Back to skill

Security audit

Scheduler

Security checks for vulnerabilities and agentic risk

Overview

This scheduler skill is a local productivity logger with export/search features; it has privacy and file-handling caveats but no evidence of deception, exfiltration, privilege escalation, or unsafe automatic execution.

Install only if you are comfortable with a local command-line tool storing your scheduling and productivity text under ~/.local/share/scheduler and exporting all of that data on request. Avoid entering secrets or highly sensitive personal details, and be cautious opening CSV exports in spreadsheet software until export escaping and local file-permission hardening are improved.

Vulnerability Patterns
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (2)

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/script.sh:6
Finding

Predictable Data Files Permit Symbolic-Link File Overwrite

Content
View full analysis
> "$DATA_DIR/history.log"; } ``` The export function also writes directly to predictable paths: ```bash _export() { local fmt="${1:-json}" local out="$DATA_DIR/export.$fmt" case "$fmt" in json) echo "[" > "$out" ``` Entry commands similarly append directly to predictable log names: ```bash echo "$ts|$input" >> "$DATA_DIR/add.log" ``` ### Technical Analysis The script creates or reuses `~/.local/share/scheduler` without setting a restrictive `umask`, explicitly enforcing mode `0700`, validating directory ownership, or verifying that the directory and destination files are not symbolic links. Shell output redirection follows symbolic links. Predictable destinations such as `history.log`, `add.log`, and `export.json` are therefore unsafe when another local principal can modify the data directory. This condition could arise from an unsafe process umask, pre-existing permissive permissions, incorrect ownership, or another process that has access to the directory. The script also writes exports directly to their final destination. It does not use a securely created temporary file followed by an atomic rename, leaving the operation exposed to time-of-check/time-of-use and replacement races. ### Attack Path 1. The scheduler data directory exists with permissions that allow an attacker or another compromised local process to create or replace files within it. 2. The attacker creates a predictable destination, such as `export.json` or `history.log`, as a symbolic link to another file writable by the victim. 3. The victim invokes an affected operation, such as `scheduler export json` or `scheduler ad ...[truncated 801 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/script.sh:58
Finding

Unescaped Exports Enable CSV Formula Injection and Invalid JSON Generation

Content
View full analysis
"$out" local first=1 for f in "$DATA_DIR"/*.log; do [ -f "$f" ] || continue local name=$(basename "$f" .log) while IFS='|' read -r ts val; do [ $first -eq 1 ] && first=0 || echo "," >> "$out" printf ' {"type":"%s","time":"%s","value":"%s"}' "$name" "$ts" "$val" >> "$out" done < "$f" done echo "" >> "$out" echo "]" >> "$out" ;; csv) echo "type,time,value" > "$out" for f in "$DATA_DIR"/*.log; do [ -f "$f" ] || continue local name=$(basename "$f" .log) while IFS='|' read -r ts val; do echo "$name,$ts,$val" >> "$out" done < "$f" done ;; ``` User-controlled values are persisted without validation, for example: ```bash local input="$*" local ts=$(date '+%Y-%m-%d %H:%M') echo "$ts|$input" >> "$DATA_DIR/add.log" ``` ### Technical Analysis Scheduler entry values are supplied by the user and written into log files without restrictions. During CSV export, the values are concatenated with commas without RFC 4180 quoting or escaping. If a value begins with `=`, `+`, `-`, or `@`, spreadsheet applications may interpret it as a formula rather than text. Depending on the spreadsheet software and its security configuration, a malicious formula can trigger external requests, expose data referenced by the workbook, display deceptive content, or invoke dangerous legacy functionality. Fields containing commas, quo ...[truncated 2122 chars]
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (6)

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The manifest description is overly broad and generic ('for everyday use' / 'Use when you need scheduler'), which can cause the agent to invoke this skill in contexts that are only loosely related to scheduling. Overbroad invocation text increases the risk of inappropriate tool selection, unintended command execution, or unnecessary exposure of user data to the skill.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The comments and help text frame the tool as a broad productivity toolkit rather than a scheduler, reinforcing a deceptive or at least misleading trust boundary. Misrepresentation of capability is dangerous in agent ecosystems because it can cause users or orchestrators to grant access under false assumptions about what the tool does with their data.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The implementation materially exceeds the stated scheduler purpose by acting as a general productivity data collection tool with many unrelated commands. This scope mismatch increases the chance that a user or calling agent invokes capabilities they did not intend to trust, especially because the tool persistently stores broad user inputs.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The export functionality enables bulk extraction of all accumulated user activity into machine-readable formats, which is more sensitive than the minimal scheduler description suggests. In an agent skill context, undocumented export paths can facilitate unintended aggregation and secondary use of personal data.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

User-provided inputs are written verbatim to persistent logs without any explicit notice, consent flow, retention policy, or sensitivity guidance. In this skill context, users may enter personal plans, reminders, or activity details, so silent persistence creates a real privacy and data-handling risk even without network exfiltration.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Low
Category
Not specified by scanner
Confidence
79% confidence
Finding

The code implements a free-text search across all log files in the data directory. While useful for a personal logging system, this is not an obvious requirement of a scheduler based on the manifest's stated purpose alone.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.