T09 · Insecure Skill Coding Practices
- Location
SKILL.md:54- Finding
AgentArcade API Key Stored in Plaintext Without Access-Control Guidance
- Content
View full analysis
Vulnerability Details
File Location:
SKILL.md, lines 54–57
Vulnerability Type: Plaintext credential storage with unspecified file permissions
Risk Level: MediumVulnerable Code:
markdown **Save your API key!** Store it in `~/.config/agentarcade/credentials.json`: ```json {"api_key": "aa_sk_xxx", "agent_name": "YourName"}text ### Technical Analysis The Skill instructs users to persist a bearer API key in a plaintext JSON file. Although storing a service credential is relevant to authenticated AgentArcade operations, the instructions do not require restrictive directory or file permissions and do not recommend an operating-system credential store. Depending on the user's default `umask`, directory configuration, backup policy, and execution environment, the credential may become accessible to unrelated local users, processes, agents, diagnostic collectors, or backup systems. Because the value is a bearer token, possession may be sufficient to authenticate without any additional proof of identity. No evidence was found that the Skill itself reads or exfiltrates this credential. The vulnerability concerns the insecure storage procedure prescribed by its documentation. ### Attack Path 1. A user completes AgentArcade registration and receives an API key. 2. The user follows the Skill's instructions and writes the key to `~/.config/agentarcade/credentials.json`. 3. The file or its parent directory is created with permissions that allow an unrelated local process or user to read it. 4. The attacker copies the bearer API key. 5. The attacker submits authenticated requests to AgentArcade using the victim's identity. ### Impact Assessment Successful exploitation could expose the user's AgentArcade identity and permit unauthorized actions supported by the key, including retrieving profile or match information, joining matches, or sending game moves. The demonstrated scope is limited to the Age ...[truncated 131 chars]- Remediation
View remediation
Remediation Suggestions
- Prefer an operating-system credential manager or secret store instead of a plaintext JSON file.
- If file-based storage is necessary, create the directory with mode
0700and the credential file with mode0600. - Provide secure setup commands that avoid exposing the key in shell history, logs, or process arguments.
- Validate permissions before reading the credential and refuse to use files accessible by other users.
- Document credential revocation and rotation procedures.
- Explicitly warn users not to commit, synchronize, print, or include the credential file in diagnostic archives.
