T09 · Insecure Skill Coding Practices
- Location
SKILL.md:48- Finding
Persistent Plaintext Storage of API Keys and Personal Information
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This memory-upgrade skill is transparent about adding persistence, but it over-collects sensitive conversation data such as API keys, contact details, and searchable session history without clear safeguards.
Review carefully before installing. Do not use the configuration as written in environments where conversations may include credentials, personal data, confidential business details, or multiple users. Remove API keys, tokens, contact details, and other sensitive data from capture rules; disable automatic session indexing and auto-recall unless explicitly needed; pin and audit third-party plugin versions; and define retention and deletion procedures for memory files, indexes, caches, and plugin stores.
SKILL.md:48Persistent Plaintext Storage of API Keys and Personal Information
SKILL.md:73Cross-Session Disclosure Through Broad Transcript Indexing and Automatic Recall
SKILL.md:192Execution of Unpinned Third-Party Plugins and npm Dependencies
The memoryFlush prompt explicitly instructs extraction and storage of highly sensitive material including API keys and contact information into persistent files. This is dangerous because credentials, personal data, and infrastructure details may be written to disk automatically during compaction, expanding exposure through file compromise, indexing, later recall, or accidental inclusion in responses.
The skill promotes persistent, searchable retention of user conversation data across sessions without any explicit consent flow, minimization guidance, or privacy warning. Because the stated goal is to remember user identity, work, and prior discussions, it materially increases the chance that sensitive personal or business data will be stored and later surfaced unexpectedly.
These instructions create deliberate retention of sensitive user data, specifically credentials and contact information, in persistent memory artifacts. Even if intended for convenience rather than abuse, durable storage of secrets and personal data increases the blast radius of local compromise, plugin misuse, backups, or later disclosure by the agent.
The AGENTS.md instructions direct the agent to write important information to daily files every session and to promote those notes into long-term memory, but provide no safeguards around sensitive content. In practice this encourages indiscriminate persistence of user data, project details, and operational context that may exceed what is necessary and remain accessible across future sessions.
This is a clear case of session persistence: the skill instructs the agent to write conversation-derived data to dated memory files for future use. In context, persistence is the feature being added, but it becomes risky because the persisted set explicitly includes sensitive technical and personal information, making later retrieval or leakage more likely.
"enabled": true,
"softThresholdTokens": 4000,
"systemPrompt": "Session nearing compaction. Analyze the conversation and extract durable memories NOW before context is lost.",
"prompt": "Scan the current conversation and write any of the following to memory/YYYY-MM-DD.md (use today's date):\n\n1. DECISIONS made (with reasoning and context)\n2. USER PREFERENCES or corrections expressed\n3. TECHNICAL DETAILS (commands, configs, API keys, endpoints, file paths)\n4. PROJECT STATUS changes or milestones\n5. PEOPLE mentioned (names, roles, contact info, relationships)\n6. WORKFLOWS or processes described\n7. ERRORS encountered and their solutions\n8. OPINIONS or feedback the user gave\n\nFor each item, include timestamps and enough context that future-you can understand it without the conversation. If nothing meaningful happened, reply with NO_REPLY."
}
}
}
The session policy normalizes preserving any 'important' information into daily and long-term memory files without defining safety boundaries. While less explicit than the memoryFlush prompt, it still creates a durable collection mechanism for potentially sensitive user and project data that can accumulate over time.
The documented architecture chains capture, file writes, indexing, auto-recall, and long-term retention into a multilayer persistence pipeline. This makes the overall system more dangerous because once sensitive data enters any layer, it can be copied, reindexed, and resurfaced across multiple mechanisms, making deletion and control harder.
No suspicious patterns detected.