Back to skill

Security audit

Dayplanner

Security checks for vulnerabilities and agentic risk

Overview

This is a disclosed local command-line planner/logger, with privacy and export-quality caveats but no evidence of hidden, destructive, networked, or deceptive behavior.

Install only if you are comfortable with planner entries being stored as plaintext files in ~/.local/share/dayplanner. Avoid putting credentials, private meeting details, or highly sensitive work data into it, check local file permissions on shared machines, and treat CSV/JSON exports carefully because crafted entries may break exported formats or spreadsheet handling. Also expect a simple local logging tool, not a full calendar scheduler.

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:4
Finding

Planner Data Is Created Without Restrictive Filesystem Permissions

Content
View full analysis
/dev/null || echo " No entries yet. Use: dayplanner add " else local input="$*" local ts=$(date '+%Y-%m-%d %H:%M') echo "$ts|$input" >> "$DATA_DIR/add.log" local total=$(wc -l < "$DATA_DIR/add.log") ``` Equivalent append operations are used for the other planner log files and for `history.log`. ### Technical Analysis The script does not set a restrictive `umask` and does not explicitly assign secure permissions to the data directory or log files. Their effective permissions therefore depend entirely on the invoking process's environment. With a common `022` umask, the directory may be created with mode `0755`, while newly created log and export files may receive mode `0644`. On a multi-user system, this can allow other local accounts to traverse the planner directory and read task descriptions, plans, reminders, meeting details, reviews, and other potentially sensitive information. The script also does not inspect or repair an existing data directory with overly permissive permissions. ### Attack Path 1. A user runs Dayplanner in an environment with a permissive umask, such as `022`. 2. The script creates `~/.local/share/dayplanner` and its log files without explicit restrictive modes. 3. The user records sensitive planner content. 4. Another local account enumerates the user's home directory and accesses the world-readable or group-readable planner files. 5. The local attacker obtains personal sched ...[truncated 756 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/script.sh:60
Finding

JSON and CSV Exports Do Not Escape User-Controlled Entry Values

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 "\n]" >> "$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 ``` ### Technical Analysis The JSON exporter inserts log-file values directly inside quoted JSON strings without escaping quotation marks, backslashes, or control characters. A value containing JSON syntax can terminate the intended string, corrupt the document, or inject additional properties or objects into the generated output. The CSV exporter does not quote or escape fields. Commas, quotation marks, and embedded line breaks can alter row and column boundaries. In addition, values beginning with spreadsheet formula indicators such as `=`, `+`, `-`, or `@` remain active when the CSV is opened by formula-capable spreadsheet software. This is an output-encoding vulnerability. The shell does not directly evaluate the entry as a command, but downstream JSON parsers and spreadsheet applications may interpret crafted content differently from the plain text intended by the user. ### Attack Path #### JSON Injection 1. Crafted text containing quotation ma ...[truncated 1790 chars]
Remediation
View remediation
Vulnerability Patterns
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (5)

Tp4

High
Category
MCP Tool Poisoning
Confidence
92% confidence
Finding

The declared description suggests a true scheduling/calendar planner with features such as weekly/monthly planning, time blocking, meeting arrangement, and deadline management. The code instead implements a simple shell-based local journaling/logging tool: each command appends free-form text to separate .log files in ~/.local/share/dayplanner, with helper functions for stats, search, export, recent history, and status. While some command names loosely relate to planning (plan, remind, prioritize, weekly-review), there is no actual calendar model, event scheduling, date computation, conflict handling, reminders delivery, meeting coordination, or deadline logic. This is a material purpose mismatch: the code is a generic productivity log tracker rather than the described calendar planner.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The skill explicitly stores user-entered notes, reminders, plans, and reviews in local plaintext files under the user's home directory, but the description does not warn users that potentially sensitive personal or work data will be retained unencrypted. This can expose private information to other local users, backups, indexing tools, or malware that scans common data directories.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The manifest promises weekly/monthly planning, time-blocking, meeting scheduling, deadline management, and work-life balance support. In practice, the script exposes generic note-style commands that append arbitrary text to .log files and provides search/export/report helpers, with no date-aware scheduling, calendar integration, conflict handling, or meeting/deadline logic.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
76% confidence
Finding

The description begins in Chinese and then switches to English, which may imply a language preference or default without documenting whether the skill is intended for a specific locale or multilingual use. The file does not explicitly state that users may interact in their preferred language or that the locale choice is intentional and scoped.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Low
Category
Not specified by scanner
Confidence
78% confidence
Finding

The file header labels the script broadly as a productivity tool, while the manifest presents it specifically as a day/calendar planner focused on schedules, meetings, and deadlines. The broad internal description matches the actual generic logging behavior better than the manifest, creating an intent mismatch between documentation layers.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.