T09 · Insecure Skill Coding Practices
- Location
scripts/script.sh:3- Finding
Contact Data Is Created Without Enforcing Restrictive Filesystem Permissions
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This is a local plaintext contact/activity logger with disclosed storage and export behavior, but users should treat stored and exported contact details as unencrypted local files.
Install only if you are comfortable with contact and relationship notes being stored unencrypted under ~/.local/share/contact-book and exported as plaintext. Avoid highly sensitive entries on shared machines, review file permissions, and treat CSV/JSON exports carefully when opening them in other tools.
scripts/script.sh:3Contact Data Is Created Without Enforcing Restrictive Filesystem Permissions
scripts/script.sh:65Unescaped Contact Values Produce Unsafe JSON and CSV Exports
The description claims a personal contact book with tags, search, and relationship tracking for managing contacts and follow-ups. The code does not implement structured contacts at all: it simply appends free-form text to per-command log files and offers generic search, stats, recent activity, status, and export functions. While there is some overlap with tagging, searching, and planning in a broad sense, the primary behavior is a general-purpose productivity/event logger rather than a contact manager. It also includes several capabilities unrelated to contact management, such as streaks, weekly reviews, reports, and generic exports. Therefore the declared description does not accurately represent the code's actual behavior.
The script claims to be a contact book but implements a generic activity logger with commands unrelated to contact management. This deceptive capability mismatch can cause users or higher-level agents to entrust sensitive personal contact data to a tool that does not provide the expected structure, access controls, or privacy properties, increasing the chance of misuse and unintended disclosure.
The add command accepts arbitrary free-form input and appends it directly to a plaintext log, rather than creating validated contact entries. In the context of a contact-book skill, this is dangerous because users may provide names, phone numbers, addresses, and relationship details expecting contact-oriented storage semantics, but the tool merely dumps them into local logs without safeguards or clear boundaries.
The skill handles sensitive personal data such as names, emails, reminders, and relationship notes, yet only mentions that data stays local and is plain text without clearly warning about privacy exposure on shared or compromised machines. Users may reasonably store confidential contact information believing it is safely managed, while unencrypted logs and exports remain readable by other local processes, backups, or anyone with filesystem access.
Skill grants unrestricted tool access without appropriate constraints. An agent with unfettered tool access can perform arbitrary actions including file modification, network requests, and code execution.
## Tips
- Run any command without arguments to review its recent entries — quick way to check history
- Use `contact-book recent` for a cross-command activity timeline
- Combine `search` with shell tools: `contact-book search "2025" | grep "plan"`
- The `prioritize` command helps surface your most important relationship-building tasks
The help text markets the utility as a contact book while the commands reveal a generic productivity logger. Misrepresentation is security-relevant here because it can socially engineer users or calling agents into submitting sensitive contact and relationship data under false assumptions about purpose, storage model, and retrieval behavior.
The export function creates additional plaintext or weakly structured copies of all stored history and contact-like data on disk, which expands the attack surface and increases the chance of accidental exposure, backup leakage, or unauthorized local access. Because the skill is presented as handling personal contacts, secondary copies are especially sensitive and should not be created silently.
The manifest describes searching contact details, which implies lookup over contact records and fields. Instead, the code performs a case-insensitive grep across every .log file in the data directory, including unrelated activity/history logs, so the behavior is broad text search over miscellaneous logs rather than contact search.
The skill persistently stores user-supplied data that is likely to include personal contact information in plaintext log files under the user's home directory, without any warning or consent prompt. In a contact-book context, that materially raises privacy risk because users are especially likely to enter sensitive third-party data they may not realize is being retained verbatim.
No suspicious patterns detected.