T09 · Insecure Skill Coding Practices
- Location
SKILL.md:71- Finding
Unprotected Persistent Storage of Potentially Sensitive Sales and Prospect Data
- Content
View full analysis
Vulnerability Details
File Location:
SKILL.md, lines 71-72
Vulnerability Type: Plaintext sensitive-data retention in persistent agent memory
Risk Level: MediumRelevant instructions translated into English:
markdown - Read `memory/sales-preferences.md` to obtain the user's industry and product information. - Save generated records to `memory/sales-outreach-history.md`.Technical Analysis
The skill directs the agent to read user sales preferences from persistent memory and save generated outreach records to another Markdown file. Personalized outreach records may contain names, occupations, contact channels, financial profiles, health-related interests, customer segmentation, and other personal or commercially sensitive information.
The specification does not define user consent, data minimization, field-level redaction, file permissions, tenant isolation, retention periods, deletion procedures, or restrictions on subsequent access. Storing such information in a plaintext Markdown file can expose it to other agents, skills, processes, or workspace users that can read the same memory directory.
This is an insecure storage practice rather than memory poisoning: the documented write operation stores outreach history, but there is no evidence that it writes attacker-controlled rules intended to alter future agent behavior.
Attack Path
- A user provides sensitive customer or prospect attributes for personalized outreach.
- The skill incorporates those attributes into generated sales messages.
- Following the documented behavior, the generated records are saved to
memory/sales-outreach-history.md. - The records remain available across sessions without a documented expiration or deletion policy.
- Another skill, agent process, or workspace user with access to the shared memory directory reads the plaintext history.
- The exposed information can be used for unauthorized profiling, un ...[truncated 608 chars]
- Remediation
View remediation
Remediation Suggestions
- Require explicit user consent before reading preferences or saving outreach history.
- Disable persistent history by default and provide an opt-in configuration setting.
- Store only the minimum information necessary; exclude or redact names, contact details, financial attributes, health information, and other sensitive fields.
- Prefer short-lived session storage when persistence is not essential.
- If persistence is required, use access-controlled storage rather than unrestricted plaintext Markdown files.
- Enforce restrictive file permissions and isolate memory by user, tenant, and skill.
- Encrypt sensitive records at rest and securely manage encryption keys outside the stored data.
- Define an automatic retention period and securely delete expired records.
- Provide users with controls to inspect, export, and delete saved preferences and outreach history.
- Prevent unrelated skills and processes from reading these files unless access is explicitly authorized.
- Document the exact data fields collected, their purpose, retention duration, and authorized consumers.
