T09 · Insecure Skill Coding Practices
Warning
- Location
- SKILL.md:14
- Finding
- Administrative Bearer Token Stored in Unspecified Agent Memory## Vulnerability Details **File Location**: `SKILL.md`, lines 14–18 **Vulnerability Type**: Sensitive credential retained in insecure or unspecified storage **Risk Level**: Medium **Vulnerable Code**: ```markdown ## Two Tokens When you create a poll you get two tokens: - **Admin token** (`adm_...`) — Private. View full results, see who voted, close the poll. Store it in your memory for the poll's lifetime. - **Participate token** (`prt_...`) — Shareable. Anyone with the participate URL can vote — humans via the web UI, agents via the API. Multiple people use the same link. ``` ### Technical Analysis The Skill explicitly directs the Agent to store the poll's administrative bearer token in “your memory.” This storage location has no defined confidentiality controls, isolation guarantees, retention limits, deletion procedure, or protection against later context or memory disclosure. The administrative token is security-sensitive because it authorizes access to full poll results, participant identities, and individual votes, and it permits poll closure. Retaining such a token in conversational or persistent Agent memory violates least-retention principles and increases its exposure beyond the operation for which it is immediately required. This finding concerns insecure credential handling rather than Agent Memory Poisoning: the stored value is a credential, not an attacker-controlled rule intended to alter future Agent behavior. ### Attack Path 1. The Agent creates a poll through the external service and receives an `adm_...` administrative token. 2. Following the instruction in `SKILL.md`, the Agent stores that token in its unspecified memory for the poll's lifetime. 3. The credential remains available beyond the immediate API operation and may become accessible through later memory retrieval, context exposure, logging, or a malicious prompt that induces disclosure. 4. An unauthorized party obtains the retained toke ...[truncated 801 chars]
- Remediation
- ## Remediation Suggestions - Remove the instruction to place administrative tokens in conversational or general-purpose Agent memory. - Keep each token only in ephemeral, poll-scoped state for the shortest period required. - If cross-session access is essential, use an approved encrypted secret store with strict access controls instead of Agent memory. - Never include the token in user-visible responses, model prompts, logs, telemetry, or long-term memory. - Define an explicit retention period and delete the token immediately after poll closure or expiration. - Document server-side token expiration and provide token revocation or rotation. - Request explicit user confirmation before retrieving identity-level voting data or closing a poll. - Redact administrative credentials from errors and diagnostic output.
