T09 · Insecure Skill Coding Practices
Warning
- Location
- references/onboarding-flow.md:56
- Finding
- Plaintext Persistence of Sensitive Household Profiles<![CDATA[ ## Vulnerability Details **File Location**: `references/onboarding-flow.md:12-17`, `references/onboarding-flow.md:56-76`, `SKILL.md:124-157` **Vulnerability Type**: Plaintext storage of sensitive personal and household information **Risk Level**: Medium ### Vulnerable Code Snippets `references/onboarding-flow.md:12-17`: ```markdown 1. **Partner** — name, how long together, anniversary 2. **Children** — names, ages, schools/daycare 3. **Parents** — names, how often in contact, any health considerations 4. **Siblings** — names, where they live, closeness level ``` `references/onboarding-flow.md:56-76`: ```markdown ## Data Storage Store in `memory/people/` directory: ``` memory/people/ ├── index.md (summary of all people + relationships) ├── partner.md (detailed: partner name, preferences, history) ├── children/ │ ├── child1.md │ └── child2.md ├── parents/ │ ├── mum.md │ └── dad.md ├── extended/ │ └── [name].md └── friends/ └── [name].md ``` Each person file includes: - Name, nickname, age/Date and month of birth if known - Relationship to user - Key dates (birthday, anniversary, etc.) - Current life context - Last meaningful interaction - Interests/preferences - Notes (updated over time) ``` `SKILL.md:124-157`: ```markdown ## Privacy & Data Safety This skill stores personal information about real people. Handle with care. ### You are the privacy filter When the user shares information, actively strip identifying details before writing to files. Don't wait for them to self-censor — that's adding to their mental load. **Store this way:** - "Mum, 72" — NOT "Margaret Smith, DOB 15/03/1954" - "Birthday: 15 Mar" — NOT "DOB: 15/03/1954" (day+month only, never year) - "3 years to next milestone" — all the agent needs is proximity to the next decade birthday. If the user gives a birth year, convert to this format and discard the year. - "Lives interstate" — NOT "42 Elm St, Brunswick VIC 3056" - "Works in healthcare" — NO ...[truncated 3798 chars]
- Remediation
- <![CDATA[ ## Remediation Suggestions 1. Replace general-purpose plaintext Markdown storage with a host-platform private storage facility that enforces per-skill access controls and restrictive filesystem permissions. 2. Request granular consent before persisting higher-risk categories, particularly children’s schools, health considerations, financial-provider names, and interaction history. 3. Make sensitive fields optional and collect only information strictly necessary for a specific reminder or care function. 4. Avoid storing school or daycare names. Prefer generalized descriptions such as “primary-school child” unless an exact institution is essential and separately approved. 5. Minimize health records to non-diagnostic reminder context and avoid retaining medical narratives or conditions by default. 6. Present a review and confirmation step showing exactly what will be written before creating or updating a profile. 7. Define automatic retention periods and periodically ask the user whether stale information should be updated or deleted. 8. Apply restrictive permissions when files are created, such as owner-only read and write access where the host environment supports it. 9. Detect whether the memory directory is inside a Git repository, shared folder, backup target, or cloud-synchronized location. Warn the user and decline persistence until exposure is acknowledged or mitigated. 10. Add generated storage paths to appropriate ignore files where possible, while clarifying that ignore rules do not protect existing commits, backups, or cloud synchronization. 11. Provide an inventory and deletion command that removes individual records or all skill data and verifies that deletion succeeded. 12. Document the host platform’s encryption-at-rest and access-control requirements rather than relying solely on the assumption that the local machine is a sufficient security boundary. ]]>
