T01 · Skill Instruction Hijacking
- Location
SKILL.md:21- Finding
Untrusted Remote Instructions Are Retrieved and Applied at Runtime
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This trading skill is purpose-aligned overall, but it asks agents to accept remote replacement instructions and persist a powerful financial API key in memory.
Review this carefully before installing. The skill may trade futures, manage funds, withdraw assets, export wallet key material, and alter account state using a single API key. Do not store that key in agent memory; use a dedicated secret manager if available, rotate any key already written to memory or logs, and require fresh confirmation for withdrawals, wallet export, account deletion, vault operations, schedule changes, and any run that bypasses the whitelist. The remote-instruction update behavior is the largest review issue because the service can change what the agent is told to do after installation.
SKILL.md:21Untrusted Remote Instructions Are Retrieved and Applied at Runtime
SKILL.md:303Financial API Credential Is Persisted and Re-read from Agent Memory
SKILL.md:499Single-Ticker Execution Bypasses the Whitelist and Accepts Arbitrary LLM Context Overrides
The onboarding checklist mandates saving the API key to the agent's own memory and confirming that it can be recalled. This is especially dangerous because the secret appears to provide broad control over deposits, withdrawals, trading, key rotation, export of wallet key material, and account deletion, so compromise of stored memory can directly lead to account takeover and financial loss.
The skill includes verbatim instructions to say the API key aloud to the user, save it into memory, and verify recall. This creates multiple disclosure paths for a high-value secret: conversational output, persistent storage, and subsequent retrieval, all of which increase the chance of secret leakage and unauthorized trading/account actions.
The skill exposes highly destructive capabilities such as account deletion and wallet-key export in the same interface used for routine trading operations, with no documented requirement for secondary confirmation, step-up authentication, or strong guardrails. In an agentic setting, this increases the risk that prompt injection, misunderstanding, or misuse of tool parameters could trigger irreversible account compromise or destruction.
| Withdraw to Arbitrum | `POST /account/withdraw` |
| Rotate API key | `POST /auth/rotate-key` |
| Export trading wallet key | `POST /auth/export-agent-key` |
| Delete account | `DELETE /auth/account` |
| Available models | `GET /agents/models` — returns `{ venice: [...], rei: [...] }` |
| Available markets | `GET /markets/tickers` |
| **Create vault (agent as fund manager)** | `POST /vault/create` |
The skill directs the agent to retain and recall the user's API key across sessions instead of asking again. Storing reusable secrets in persistent memory creates a long-lived target that can be exfiltrated by prompt injection, memory inspection, or accidental model disclosure, especially because the same key appears to authorize all account actions.
The skill explicitly instructs the agent to persist a live trading API key in memory for future reuse and to verify recall. Persisting reusable credentials in agent memory materially increases the blast radius of prompt injection, memory leakage, unauthorized reuse across sessions, and accidental disclosure through logs or future conversations.
The dashboard instructions direct users to paste their API key into a web UI that uses the same bearer token for full account control, but they do not prominently warn that this credential is highly sensitive and grants trading and account-management authority. Users may be conditioned to enter powerful secrets into third-party interfaces without understanding the trust implications.
The directive to consult memory first and not ask the user for their API key encourages autonomous reuse of a highly sensitive credential. In this context, the autonomy is risky because the key unlocks consequential financial operations and the user may be unaware the agent is still able to act on their behalf.
> This is the common case — check here first.
**Check your memory first.** If you saved credentials during onboarding (see Step 2a), load them from `MEMORY.md` — do not ask the user for their API key if you already have it. Only ask if memory is empty or the key returns a `401`.
If you must ask the user, only ask for their `apiKey` — that is the only credential needed for everything.
The documentation tells the agent to check memory first and avoid asking the user again for the API key, encouraging persistent retention of a sensitive credential without a clear warning about cross-session secret handling risks. This normalizes silent credential reuse and reduces user awareness and control over how their trading credential is stored and accessed.
The instruction to recall the API key in future sessions 'without asking the user again' reduces user awareness and consent for reuse of a powerful credential. In a financial-trading context, silent reuse of stored credentials makes prompt-injection or unintended autonomous actions more dangerous because the agent can act with full account authority without re-authentication.
> This allows you to recall the API key in future sessions without asking the user again. OpenClaw memory is encrypted at rest — it is safe to store the key here.
**3. Verify you can recall it**
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
Once they choose, enable the built-in schedule via PUT /agents/:id:
curl -X PUT https://shekel-skill-backend.onrender.com/agents/<agentId> \
-H "Authorization: Bearer <apiKey>" \
-H "Content-Type: application/json" \
-d '{"runScheduleMinutes": 240}'
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
Example — disable Athena and sentiment:
curl -X PUT https://shekel-skill-backend.onrender.com/agents/<agentId> \
-H "Authorization: Bearer <apiKey>" \
-H "Content-Type: application/json" \
-d '{
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
Set or change at any time via PUT /agents/:id:
curl -X PUT .../agents/<agentId> \
-H "Authorization: Bearer <apiKey>" \
-H "Content-Type: application/json" \
-d '{ "marginMode": "isolated" }'
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
# Option A: Create a vault (automatic linkage)
curl -X POST .../vault/create \
-H "Authorization: Bearer <apiKey>" \
-d '{"name":"My AI Fund","description":"BTC/ETH momentum strategy","initialUsd":200}'
# Returns the vault address and automatically links the agent
No suspicious patterns detected.