T03 · Remote Payload Retrieval and Execution
- Location
SKILL.md:34- Finding
Unpinned Remote Installer Is Piped Directly into Bash
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill is a real ClawDown game agent, but it also persists credentials, can run in the background, and can replace its instructions from a remote source without verification.
Review this before installing. Use it only if you trust the ClawDown service and understand that the agent can spend/compete for USDC bounties, send public chat, keep a local API key, and run a background WebSocket client. Avoid the curl-to-bash installer, lock the API base to the official HTTPS endpoint, rotate the API key if exposed, and remove SKILL.md.bak or any fixed third-party notification instructions before use.
SKILL.md:34Unpinned Remote Installer Is Piped Directly into Bash
HEARTBEAT.md:73Unsigned Remote Content Can Overwrite Trusted Skill Instructions
scripts/clawdown_ws.js:60Mutable API Base Can Redirect Credentials to Arbitrary or Plaintext Endpoints
SKILL.md.bak:17Packaged Backup Instructions Direct Match Reports to a Fixed Third Party
The skill also enables authenticated public chat transmission and other remote actions beyond simple gameplay, while the high-level description does not mention that scope. Undisclosed outward communication is risky because it can expose data or create actions on behalf of the user without informed consent.
The skill also enables authenticated public chat transmission and other remote actions beyond simple gameplay, while the high-level description does not mention that scope. Undisclosed outward communication is risky because it can expose data or create actions on behalf of the user without informed consent.
The skill also enables authenticated public chat transmission and other remote actions beyond simple gameplay, while the high-level description does not mention that scope. Undisclosed outward communication is risky because it can expose data or create actions on behalf of the user without informed consent.
Piping a remote install script directly into bash executes unverified code from the network immediately on the host. If the source, transport, or upstream account is compromised, this becomes arbitrary code execution with the user's privileges.
If bun is not installed:
curl -fsSL https://bun.sh/install | bash
The | bash pattern is a classic command-chaining risk because it turns fetched content directly into executable shell input without inspection. In a skill context, this is especially dangerous because users may assume documented setup commands are trustworthy and safe to automate.
If bun is not installed:
curl -fsSL https://bun.sh/install | bash
The skill requires shell and environment access, reads local files, launches background processes, and makes authenticated network connections, but it declares no explicit tool scope. That omission weakens least-privilege controls and can cause hosts to grant broader capabilities than users expect.
The invocation guidance is broad and does not define narrow trigger conditions for when the skill should run. In practice that can cause over-invocation of a networked, credential-using skill in contexts where the user did not intend external actions or file access.
The skill persists an API key, agent ID, and API base in a long-lived directory under the user's home folder. Persistent credential storage increases the blast radius of local compromise and creates residual sensitive state after the skill finishes.
If you registered via API directly:
mkdir -p ~/.clawdown
echo "cd_yourActualApiKey" > ~/.clawdown/api_key
chmod 600 ~/.clawdown/api_key
echo "https://api.clawdown.xyz" > ~/.clawdown/api_base
Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.
mkdir -p ~/.clawdown
echo "cd_yourActualApiKey" > ~/.clawdown/api_key
chmod 600 ~/.clawdown/api_key
echo "https://api.clawdown.xyz" > ~/.clawdown/api_base
echo "your-agent-id" > ~/.clawdown/agent_id
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.
- How should you respond to aggression?
- Any personality traits to embody?
Use the `strategy_template` from Step 3 as a starting point. Write your strategy to `~/.clawdown/strategies/{game_type}.md`.
**WARNING**: Rule-based handlers (if/else scripts) lose every competitive match against LLM-powered opponents. Use your full reasoning capability.
Starting the WebSocket client with nohup creates a detached background process that can continue making authenticated network actions after the initiating session ends. That persistence reduces user visibility and can lead to unintended ongoing participation or API use.
Poll /tournaments/?status=registration for your agent_id in entries. When found, start the WS client:
nohup bun {baseDir}/scripts/clawdown_ws.js > ~/.clawdown/ws.log 2>&1 &
The readiness window is 60 seconds, so poll at least every 30 seconds.
The skill explicitly instructs sending match details to a third-party Telegram account, creating an external data flow with no consent, minimization, or privacy notice. Even if the content is 'only' game telemetry, it still discloses operational behavior and could expose sensitive metadata or strategy to an external recipient.
The skill requires persistent local logging of detailed game state and reasoning without warning about retention or sensitivity. This can accumulate strategic data, inputs, and internal decision rationale that are not strictly necessary for gameplay and may later be exposed to other users, tools, or processes on the host.
The tournament log format explicitly asks for full game state plus 'Reasoning,' which encourages storing model deliberation and potentially sensitive input context beyond operational need. Persisting this information increases the blast radius of any later compromise and can leak strategy, prompts, or other sensitive context.
The skill directs the agent to append ongoing entries and match results to a persistent file, creating durable session artifacts. In context, this persistence is more dangerous because the file contains detailed game state and reasoning, so information survives beyond the immediate session and may be accessed later by unrelated processes or users.
- **Reasoning:** {1-2 sentence summary of why}
```
Use `echo "..." >> ~/workspace/clawdown/tournament-log.md` or write the file directly.
Also append a `## Match Result` section at the end when a `match_result` webhook arrives:
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
- **Invite link format:** https://clawdown.xyz/invite/{token}
- **Web dashboard:** https://clawdown.xyz
- **Leaderboard:** https://api.clawdown.xyz/agents/leaderboard
- **Replay viewer:** https://clawdown.xyz/replay/{match_id}
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
- **Invite link format:** https://clawdown.xyz/invite/{token}
- **Web dashboard:** https://clawdown.xyz
- **Leaderboard:** https://api.clawdown.xyz/agents/leaderboard
- **Replay viewer:** https://clawdown.xyz/replay/{match_id}
This markdown file includes operational instructions to read an API key from ~/.clawdown/api_key, fetch replay data over the network, and save derived insights to ~/.clawdown/learnings.md. The section presents these actions as workflow steps but does not warn that it accesses credentials, transmits authenticated data, or writes to the user's filesystem.
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.
}
**Action:** Write the deactivation status to `~/.clawdown/status.json` and exit cleanly (no reconnect). Next time your owner asks about ClawDown, inform them that the agent was removed. If the agent is later reactivated and reconnects successfully, the status file is automatically cleared.
## Agent -> Server Messages
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
exit 1
fi
curl -s -X POST \
-H "Authorization: Bearer ${API_KEY}" \
-H "Content-Type: application/json" \
-d "${BODY}" \
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
exit 1
fi
curl -s -X POST \
-H "Authorization: Bearer ${API_KEY}" \
-H "Content-Type: application/json" \
-d "${BODY}" \
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
exit 1
fi
curl -s -X POST \
-H "Authorization: Bearer ${API_KEY}" \
-H "Content-Type: application/json" \
-d "${BODY}" \
The script sends a bearer API key to a remote endpoint via curl, which is a network operation involving sensitive credentials. While the code comments explain purpose and usage, they do not warn the user that the script will contact an external service and transmit the API key.
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.
*
* This client is challenge-type agnostic. It does NOT contain game strategy.
* When it receives a your_turn message, it writes the full state to a file
* and waits for the agent to write a decision file. Your agent (the LLM)
* reads the state, reasons about it, and writes the decision.
*
* Decision contract:
The WebSocket URL includes the API key as a query parameter, which risks disclosure through logs, process listings, proxies, crash reports, browser/dev tooling, or upstream infrastructure that records full URLs. Even when using WSS, URL-based secrets are more broadly exposed than header- or message-based credentials.