T09 · Insecure Skill Coding Practices
- Location
SKILL.md:24- Finding
Unprotected Plaintext Storage of Sensitive Personal and Delivery Data
- Content
View full analysis
Vulnerability Details
File Location:
SKILL.md:24-34,SKILL.md:74,SKILL.md:81-85,SKILL.md:118-122, andreferences/config-template.md:3-44
Vulnerability Type: Sensitive data stored in predictable plaintext files without defined access, retention, or deletion controls
Risk Level: MediumVulnerable Code Snippets
From
SKILL.md:24-34:markdown On first use, ask the user: 1. **Language**: what language to communicate in (default: user's language) 2. **What are you working on?** (separation, grief, career change, general growth, etc.) 3. **Key relationships** to track virtue alignment with (partner, ex, family, colleagues) 4. **Preferred schedule**: morning affirmation time, evening check-in time, weekly summary day/time 5. **Channel**: where to deliver messages (Telegram, WhatsApp, etc.) 6. **Audio or text?** For the morning affirmation 7. **Trigger phrase** for anxiety/impulse moments (default: "I need to stop") Store configuration in `memory/stoic-companion.md`. See [references/config-template.md](references/config-template.md) for the template.From
SKILL.md:74:markdown When the user responds, acknowledge their reflection, highlight strengths, gently note areas for growth. Log key points in `memory/YYYY-MM-DD.md`.From
SKILL.md:81-85:markdown 1. Review daily memory files from the past 7 days 2. Identify patterns: recurring struggles, improvements, consistent strengths 3. Rate each virtue based on the week's data 4. Highlight best moment and hardest moment 5. Suggest one focus area for next weekFrom
SKILL.md:118-122:markdown ## Memory Structure - `memory/stoic-companion.md` — User config, context, relationships, goals - `memory/YYYY-MM-DD.md` — Daily notes from check-ins and interactions - `MEMORY.md` — Long-term patterns and insights (update periodically)From
references/config-template.md:3-44:markdown ...[truncated 4347 chars]- Remediation
View remediation
Remediation Suggestions
-
Require explicit storage consent
- Explain which fields will be retained, why they are needed, and how long they will remain.
- Offer a memory-free mode in which reflections are processed without persistence.
- Obtain separate consent before storing highly sensitive distress or relationship information.
-
Minimize collected data
- Store only information necessary for the requested feature.
- Avoid recording full names, detailed relationship narratives, or verbatim journal responses by default.
- Summarize reflections using neutral, non-identifying terms.
- Do not retain the anxiety trigger phrase unless the user explicitly requests persistence.
-
Separate identifiers from journal records
- Keep phone numbers and chat IDs in a dedicated protected configuration store.
- Reference delivery destinations through an opaque internal identifier.
- Do not place delivery identifiers in the same file as personal context or journal history.
-
Protect data at rest
- Use a platform-provided secrets or protected state store where available.
- Encrypt sensitive records at rest.
- Apply restrictive file permissions so only the intended agent identity can read or modify the records.
- Prevent unrelated Skills and sessions from accessing the storage namespace.
-
Define retention and deletion controls
- Establish a short default retention period for daily records.
- Automatically delete or aggregate expired entries.
- Provide user commands to inspect, export, redact, and permanently delete stored data.
- Ensure deletion also covers derived summaries where supported.
-
Apply redaction and content controls
- Detect and redact phone numbers, addresses, credentials, and other unnecessary identifiers before writing journal entries.
- Store structured minimum-necessary fields rather than unrestricted prose.
- Avo ...[truncated 368 chars]
-
