Back to skill

Security audit

Snakey

Security checks for vulnerabilities and agentic risk

Overview

This skill supports the advertised crypto game, but it asks an agent to use a wallet private key and paid game actions without enough scoping or safeguards.

Review before installing. Use only a dedicated low-value wallet, avoid primary wallets or keys with unrelated assets, verify the exact SDK package/version, and require explicit confirmation before any mainnet or paid transaction.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (1)

T08 · Insecure Dependencies

Error
Location
SKILL.md:10
Finding
Unpinned Third-Party SDK Receives a Raw Wallet Private Key## Vulnerability Details **File Location**: `SKILL.md`, lines 10-20 and 39-48 **Vulnerability Type**: `T08: Insecure Dependencies` **Risk Level**: High The skill installs `@snakey/sdk` without specifying an exact version or integrity hash. It then passes the value of `WALLET_PRIVATE_KEY` directly to this externally maintained SDK, which performs network communication and signs financial transactions. **Vulnerable configuration at lines 10-20:** ```json "openclaw": { "emoji": "🐍", "requires": { "bins": ["node", "npm"], "env": ["WALLET_PRIVATE_KEY"] }, "primaryEnv": "WALLET_PRIVATE_KEY", "install": [ { "type": "npm", "package": "@snakey/sdk", "global": false } ] } ``` **Private-key use at lines 39-48:** ```javascript const client = new SnakeyClient({ serverUrl: 'https://api.snakey.ai', walletAddress: '0x...', privateKey: process.env.WALLET_PRIVATE_KEY }); // Claim free testnet funds ($10 USDC + ETH for gas) await client.claimFaucet(); // Play a game (handles payment, waiting, everything) const result = await client.play('MyBot'); ``` ### Technical Analysis The npm package reference has no exact version constraint or cryptographic integrity value. Consequently, installation can resolve registry content that changes after the skill has been reviewed. This creates a supply-chain trust boundary around a component that receives a reusable wallet private key and is authorized to conduct network and payment operations. The audited project contains only `SKILL.md`; it does not include the SDK implementation. Therefore, the SDK's key handling, transaction validation, destination restrictions, telemetry, and signing scope cannot be independently verified from this artifact. A compromised package release, maintainer account, transitive dependency, or package-registry delivery path could introduce code that reads and transmits the key or sig ...[truncated 1519 chars]
Remediation
## Remediation Suggestions 1. Pin `@snakey/sdk` to a specific, reviewed version rather than allowing mutable package resolution. 2. Enforce lockfile integrity and verify package cryptographic integrity during installation. 3. Audit and vendor the security-critical SDK source, or otherwise make the exact implementation available alongside the skill for review. 4. Replace reusable raw private keys with an isolated signer, hardware-backed wallet, or short-lived session key. 5. Restrict signing authority by chain ID, contract, recipient, token, maximum amount, transaction count, and expiration time. 6. Require explicit confirmation before every mainnet transaction, displaying the network, recipient, token, amount, calldata, and maximum fee. 7. Use a dedicated low-balance wallet with no unrelated assets or existing token allowances. 8. Separate testnet and mainnet configuration explicitly, and reject mainnet execution unless it is deliberately enabled. 9. Review transitive dependencies and use automated dependency monitoring to detect compromised, deprecated, or unexpectedly changed releases.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (5)

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The skill explicitly requires a wallet private key and promotes paid wallet actions, but it does not provide a prominent warning about financial loss, irreversible blockchain transactions, or the sensitivity of private keys. In an agent context, this can lead users to grant signing authority or trigger spending without fully understanding that compromise or misuse of the key can drain funds.

Missing User Warnings

Medium
Confidence
96% confidence
Finding
The 'quickPlay' flow is described as automatically creating a wallet, claiming funds, and joining a game, but the documentation does not foreground that these are consequential external and financial actions. For an agent skill, automation without an up-front warning increases the chance of unintended wallet creation, external account activity, and paid participation with minimal user awareness.

External Transmission

Medium
Category
Data Exfiltration
Content
**Option 3: Direct API**
```bash
# Claim faucet (gives USDC + ETH)
curl -X POST https://api.snakey.ai/faucet \
  -H "Content-Type: application/json" \
  -d '{"walletAddress": "0x..."}'
```
Confidence
60% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

External Transmission

Medium
Category
Data Exfiltration
Content
**Option 3: Direct API**
```bash
# Claim faucet (gives USDC + ETH)
curl -X POST https://api.snakey.ai/faucet \
  -H "Content-Type: application/json" \
  -d '{"walletAddress": "0x..."}'
```
Confidence
50% confidence
Finding
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The command list shows 'snakey join' joins the next game for $3 USDC, but it is presented as a normal command without a strong spending warning. In an agent-operated environment, concise command tables can be treated as safe defaults, so omitting a clear warning raises the risk of accidental fund expenditure.

Static analysis

No suspicious patterns detected.