T09 · Insecure Skill Coding Practices
Warning
- Location
- SKILL.md:18
- Finding
- Persistent Plaintext Storage of Sensitive Third-Party Personal Data<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md:18-47`, `SKILL.md:80-86`; supporting instruction at `deepening.md:23-28` **Vulnerability Type**: Plaintext storage and overcollection of sensitive personal data **Risk Level**: Medium ### Complete Vulnerable Code Snippets From `SKILL.md:18-47`: ```md - User mentions a friend → check if exists, offer to create/update - Interaction detected → log it, note context - Friendship fading → surface proactively with reconnection prompt - Create `~/friends/` as workspace ## When User Mentions Someone - "Had dinner with Carlos" → log interaction, create if new - "Ana's going through a divorce" → add to life events, flag for check-ins - "Pedro moved to Berlin" → update location - "Haven't seen Maria in months" → surface last interaction, suggest reach out ## Friend Structure - One Markdown file per person: carlos-martinez.md - Sections: basics, how we met, life events, interaction history, friendship notes - Tags for circles: #inner-circle #close #wider #reconnecting - Readable format — this is about relationships, not database ## Key Fields To Capture - Name, how you met, when friendship started - Birthday, important dates - Current life situation: job, relationship, kids, city - What they care about, what's going on in their life - Last interaction and what you talked about - What kind of friend they are (activity buddy, deep talks, etc.) ## Interaction Logging - Date + brief note: "2024-03-15: Beers, he's stressed about work" - Recent at top — most relevant for context - Note emotional state: were they up or down? - Flag follow-ups: "said he'd let me know about the job" ``` From `SKILL.md:80-86`: ```md ## Life Events Worth Tracking - Job changes, promotions, layoffs - Relationships: new partner, breakup, divorce, marriage - Kids: pregnancy, birth, milestones - Health: illness, recovery, mental health struggles - Moves: new city, new home - Losses: death in family, pet, hardship ``` Supporting instr ...[truncated 3086 chars]
- Remediation
- <![CDATA[ ## Remediation Suggestions 1. Require explicit, per-record confirmation before creating a friend file or persisting information inferred from conversation. 2. Require separate confirmation before storing sensitive categories such as health, mental health, children, pregnancy, relationship problems, losses, or conflicts. 3. Apply data minimization by default. Store only details necessary for a user-requested reminder and avoid free-form personal dossiers. 4. Create the workspace with owner-only permissions, such as mode `0700`, and individual files with mode `0600`. 5. Use an application-private storage directory rather than a broadly discoverable general-purpose folder. 6. Encrypt sensitive records at rest using a key protected by the operating system's credential store or keychain. 7. Avoid identifiable filenames. Use opaque identifiers and keep any identity mapping inside protected storage. 8. Add configurable retention periods and automatic deletion for stale interactions and sensitive life events. 9. Provide commands to review, correct, export, and permanently delete individual details or complete records. 10. Warn the user before enabling calendar, contacts, backup, or synchronization integration, and request only narrowly scoped authorization. 11. Ensure generated reminders reveal minimal information on lock screens, shared calendars, logs, and notification systems. 12. Document the local privacy model, including who can access the records, where copies may be created, and how deletion affects backups. ]]>
