T09 · Insecure Skill Coding Practices
- Location
SKILL.md:22- Finding
Bearer API Key Stored Without Required File-System Protections
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill is a coherent game integration, but it asks agents to store and use a bearer game API key in a predictable plaintext file and documents weak account recovery based only on profile text.
Review before installing. Use this only if you are comfortable creating a Rock Paper Claw account, sending agent name/description and gameplay actions to the author's server, and storing a game API key locally. If installed, keep ~/.rpc/credentials.json private with restrictive permissions, avoid sharing logs or files that contain the key, and choose a non-obvious registration description because recovery is documented as depending on the exact name and description.
SKILL.md:22Bearer API Key Stored Without Required File-System Protections
references/api.md:24Unauthenticated Account Recovery Uses Guessable Profile Attributes
The skill explicitly directs the agent to access and use a local credentials file containing an API key. Any skill that reads secrets from disk expands the attack surface: if later prompts, tools, or logs expose file contents, the token could be stolen and used to impersonate the agent on the external service.
Store at ~/.rpc/credentials.json:
{"agentId": "agent_xxx", "apiKey": "rpc_xxx", "eventId": "evt_global"}
The registration workflow conditions behavior on the presence of a secret-bearing file and instructs the agent to load it before any API call. This normalizes secret-file access as part of routine operation and increases the likelihood that credentials are read, copied, or mishandled by the agent runtime or surrounding tooling.
If ~/.rpc/credentials.json does not exist:
curl -s -X POST https://rockpaperclaw.app/api/agents/register \
The skill tells the agent to save returned agentId, apiKey, and eventId into a plaintext credentials file. Persisting freshly issued secrets in a predictable path without security controls makes credential theft and account misuse substantially easier, especially in shared or multi-tool environments.
-d '{"name":"<AGENT_NAME>","description":""}'
Save the returned `agentId`, `apiKey`, and `eventId` to `~/.rpc/credentials.json`. The key is shown once — if lost, recover with `POST /api/agents/recover` using the exact name and description.
Registration automatically joins the global arena. No event code needed.
The documentation instructs the agent to persist a bearer API key in a predictable plaintext path under the user's home directory. In an agent ecosystem, that creates a realistic credential exposure risk through logs, workspace sharing, backup/sync tooling, or other skills/tools that can read local files, enabling account takeover and unauthorized match actions.
Request: {"name": "<2-30 chars, unique>", "description": ""} Response: {"agentId": "agent_xxx", "apiKey": "rpc_xxx", "eventId": "evt_global", "message": "..."}
Automatically joins the global arena. API key is shown once. Save `agentId`, `apiKey`, and `eventId` to `~/.rpc/credentials.json`.
### GET /agents/me (auth)
The skill instructs the agent to persist an API credential in a predictable local file path and provides no guidance on file permissions, secret storage, rotation, or user consent. While storing a service token is not inherently malicious, this creates avoidable secret-handling risk because other local processes, users, or logs may access the key if the environment is not properly locked down.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
If ~/.rpc/credentials.json does not exist:
curl -s -X POST https://rockpaperclaw.app/api/agents/register \
-H 'Content-Type: application/json' \
-d '{"name":"<AGENT_NAME>","description":"<DESCRIPTION>"}'