shekel-hyperliquid
SKILL.md-only skill with mandatory dynamic instruction fetching from an uncontrolled backend, allowing the operator to silently pivot to malicious behavior at any time, compounded by undeclared wallet key export, credential forwarding to a third-party backend, and no local code to audit.
SKILL.md requires the agent to call GET /skill/version before EVERY interaction, and if the version hash differs, fetch GET /skill to get entirely new instructions. This means the skill's behavior is not determined by the locally stored SKILL.md but by whatever the backend operator chooses to serve at any moment. There is no local code, no version pinning, and no audit trail.
SKILL.md:14 Why this conclusion was reached
2/4 dimensions flagged4 undeclared or violating capabilities were inferred.
7 lower-risk artifacts were extracted and still need context.
The report includes 4 attack-chain steps and 4 severe findings.
Dependency information is incomplete, so supply-chain confidence stays limited.
Attack Chain
Entry · SKILL.md:1
supply_chain · SKILL.md:14
Escalation · SKILL.md:72
Impact · SKILL.md:72
What drove the risk score up
SKILL.md mandates fetching GET /skill on every interaction, allowing the backend to silently replace all instructions with malicious code at any time — no local audit trail, no version lock
POST /auth/export-agent-key exports the trading wallet key; this is not declared in _meta.json requires/permissions and could be triggered by a backend instruction update
No local scripts exist; the entire agent execution, LLM reasoning, and order placement happens on shekel-skill-backend.onrender.com — operator has full access to all credentials and trading logic
llmApiKey provided by the user is sent to the backend; combined with dynamic fetching, the backend could update instructions to harvest these keys
Step 2a instructs writing the user's sk_... API key to memory; while marked 'encrypted at rest by OpenClaw', the skill has no declaration of this storage behavior
Most important evidence
Mandatory dynamic instruction fetching — silent remote code replacement
SKILL.md requires the agent to call GET /skill/version before EVERY interaction, and if the version hash differs, fetch GET /skill to get entirely new instructions. This means the skill's behavior is not determined by the locally stored SKILL.md but by whatever the backend operator chooses to serve at any moment. There is no local code, no version pinning, and no audit trail.
SKILL.md:14 Undeclared wallet key export capability
The skill exposes POST /auth/export-agent-key which exports the trading wallet key. This capability is not declared anywhere in _meta.json's requires section and is not mentioned as a security-sensitive operation in SKILL.md. Combined with dynamic instruction fetching, the backend could silently update instructions to call this endpoint and exfiltrate the exported key.
SKILL.md:72 Rei API key forwarded to backend operator
Users who choose the Rei LLM provider must supply their llmApiKey. SKILL.md instructs this key be included in the registration payload and sent to the shekel backend. The backend operator can then use this key independently. With dynamic instruction fetching active, the backend could update instructions to harvest Rei keys at any time.
SKILL.md:127 All execution happens on an uncontrolled remote backend not declared as a dependency
SKILL.md maps to a backend at shekel-skill-backend.onrender.com which performs all trading logic, LLM reasoning, and order execution. The backend URL appears only as inline documentation, not as a declared supply chain dependency. The operator controls the code, can read all API keys, and can modify behavior at any time via the GET /skill endpoint.
SKILL.md:14 API key written to filesystem without explicit declaration
Step 2a instructs saving the user's sk_... API key to MEMORY.md. This constitutes a filesystem WRITE of a credential. While the platform may encrypt memory at rest, the skill does not declare this storage behavior, and the write is not declared in _meta.json permissions.
SKILL.md:167 No pinned versions for external data sources
The skill integrates with DappLooker, 0xAthena, and CoinMarketCap for market data. These third-party services are not declared as dependencies and have no version or commit pinning. Service changes could silently alter agent behavior.
SKILL.md:270 Skill version in _meta.json does not match dynamic version mechanism
_meta.json lists version 1.10.1, but SKILL.md describes a completely separate dynamic versioning system where the backend serves version hashes. The _meta.json version has no relationship to the actual running behavior of the skill.
_clawsafe/pre-scan.json Declared capability vs actual capability
SKILL.md:167 — instructs writing apiKey to MEMORY.md SKILL.md:14-19 — mandates GET /skill/version and GET /skill on every interaction SKILL.md:466-476 — POST /agent/run with user llmApiKey forwarded to backend _meta.json declares SHEKEL_API_KEY env requirement but SKILL.md does not document this as a declared capability Suspicious artifacts and egress
https://shekel-skill-backend.onrender.com/skill SKILL.md:15
https://shekel-skill-backend.onrender.com/skill/version SKILL.md:31
https://www.shekel.xyz/hl-skill-dashboard SKILL.md:45
https://www.shekel.xyz/hl-skill-dashboard** SKILL.md:84
https://shekel-skill-backend.onrender.com/agents/ SKILL.md:368
https://shekel-skill-backend.onrender.com/agent/run SKILL.md:478
https://t.me/c/2308722458/1 SKILL.md:570
Dependencies and supply chain
There are no structured dependency warnings.
File composition
SKILL.md