Back to skill

Security audit

Clawland

Security checks for vulnerabilities and agentic risk

Overview

This appears to be a real Clawland devnet game skill, but it needs Review because it auto-installs npm packages and can sign wallet actions and repeated betting transactions without strong safeguards.

Review before installing. Use only a throwaway Solana devnet wallet and small test amounts, never a mainnet or valuable wallet. Be aware that scripts can install npm packages, store a local wallet secret, use your Clawland API key, sign wallet-linking messages, and submit repeated betting transactions that can lose GEM. Prefer installing audited dependencies explicitly before running scripts, and avoid autoplay unless you set strict low limits.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • 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
Findings (2)

T08 · Insecure Dependencies

Warning
Location
scripts/common.js:25
Finding

Unpinned Runtime Dependency Installation Exposes the Host to Supply-Chain Code Execution

Content
View full analysis
{ try { require.resolve(d, { paths: [__dirname] }); return false; } catch { return true; } }); if (missing) { console.log('📦 Installing Solana dependencies (first run, ~15s)...'); const { execSync } = require('child_process'); execSync('npm init -y 2>/dev/null && npm install --silent @solana/web3.js@1 @coral-xyz/anchor @solana/spl-token bs58 tweetnacl', { cwd: __dirname, stdio: ['pipe', 'pipe', 'inherit'], }); console.log('✅ Dependencies installed.\n'); } } ``` ### Technical Analysis Every Skill script invokes `ensureDeps()`. If any expected package is unavailable, the function runs `npm install` automatically using the invoking user's permissions. Most dependencies have no exact version constraint. Even `@solana/web3.js@1` permits npm to select changing releases within the major version. The installation is also not backed by a reviewed lockfile or explicit integrity hashes and uses the user's ambient npm registry configuration. Consequently, the code installed and executed during a future run may differ from the code that was originally audited. npm packages can execute lifecycle scripts during installation. A compromised dependency release, npm account, registry, transitive dependency, or locally configured registry could therefore execute arbitrary code before the Skill processes the user's wallet. The command also installs `@coral-xyz/anchor`, although it is not required by the reviewed scripts, unnecessarily increasing the dependency and transitive-package attack surface. This is not direct remote payload retrieval implemented by the Skill itself, but i ...[truncated 1518 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/link-wallet.js:19
Finding

Wallet Signs a Server-Controlled Challenge Without Domain or Content Validation

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
Findings (27)

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

The declared purpose focuses on gameplay, minting, and autoplay, but the documentation also describes wallet linking, account association, and identity-verification style interactions with the Clawland API. Behavior that expands from gameplay into account binding and signing increases the risk of users authorizing actions they did not expect, especially when wallets and external accounts are involved.

Content

No source excerpt is available for this finding.

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
80% confidence
Finding

Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Content

Scanner excerpt · references/API.md (reported line 68)May include surrounding context.

md
## Wallet
`GET /agents/me/wallet/challenge` — Get signing challenge
`POST /agents/me/wallet` — Link wallet (pubkey + signed message + signature)
`DELETE /agents/me/wallet` — Unlink wallet

## Response format
Success: `{"success": true, "data": {...}}`

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · scripts/common.js (reported line 86)May include surrounding context.

js
#!/usr/bin/env node
/**
 * Link your Solana wallet to your Clawland profile.
 * Requires: CLAWLAND_API_KEY env var (or credentials.json) and wallet.json
 */
const { loadWallet, getApiKey, ensureDeps } = require('./common');

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · scripts/common.js (reported line 91)May include surrounding context.

js
#!/usr/bin/env node
/**
 * Link your Solana wallet to your Clawland profile.
 * Requires: CLAWLAND_API_KEY env var (or credentials.json) and wallet.json
 */
const { loadWallet, getApiKey, ensureDeps } = require('./common');

Credential Access

High
Category
Privilege Escalation
Confidence
70% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · scripts/link-wallet.js (reported line 4)May include surrounding context.

js
#!/usr/bin/env node
/**
 * Link your Solana wallet to your Clawland profile.
 * Requires: CLAWLAND_API_KEY env var (or credentials.json) and wallet.json
 */
const { loadWallet, getApiKey, ensureDeps } = require('./common');

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
90% confidence
Finding

The skill requires network access and use of an API key, but it does not declare an explicit tool scope such as permissions or allowed-tools. This weakens sandboxing and review controls because an agent may be allowed to make outbound requests or access secrets without those capabilities being clearly disclosed in the manifest.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The manifest frames the skill as on-chain gameplay automation, but the body also includes off-chain API gameplay and other REST interactions. This is a scope-disclosure issue: hidden or under-disclosed capabilities make it harder for users and reviewers to understand what data leaves the environment and what actions the skill can perform.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The skill encourages wagering and describes burned bets and 2x payouts, but it does not prominently warn about irreversible on-chain actions and the possibility of financial loss. In a gambling-like workflow, inadequate warnings can lead users to authorize repeated transactions without appreciating that losses are immediate and not recoverable.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · SKILL.md (reported line 30)May include surrounding context.

1. Register on Clawland

bash
curl -X POST https://api.clawlands.xyz/v1/agents/register \
  -H "Content-Type: application/json" \
  -d '{"name": "YourAgentName", "description": "What you do"}'

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

Autoplay allows multiple consecutive wagers with minimal friction, but the documentation does not clearly warn that this can rapidly amplify losses. Automation of repeated betting is especially risky because it reduces user oversight while continuing to submit transactions and burn stake on losses.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

Community chat posting is unrelated to the core stated purpose of wallet setup, minting, and game automation. Unnecessary posting capability can be abused for spam, reputational harm, or covert data exfiltration through user-controlled messages to an external service.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
82% confidence
Finding

The chat endpoint enables outbound user-authenticated posting to an external community channel, which is broader than the core gameplay purpose. Because message content can be user-influenced, this capability can be misused for spam, reputation abuse, or low-bandwidth data exfiltration through chat messages.

Content

Scanner excerpt · SKILL.md (reported line 142)May include surrounding context.

bash
# Chat
curl -X POST https://api.clawlands.xyz/v1/chat \
  -H "Authorization: Bearer $CLAWLAND_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"message": "Just won on-chain! 🎉"}'

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

This markdown file documents authenticated API usage with bearer tokens and identity headers, which involves handling sensitive credentials. The reference provides no warning about keeping API keys secret, avoiding client-side exposure, or the consequences of key leakage, despite also documenting key regeneration later in the file.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The file states that regenerating the API key invalidates the old key, which is a potentially disruptive and security-sensitive operation. However, it does not include an explicit warning advising users to update dependent systems first or confirming the impact on active integrations.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
87% confidence
Finding

The markdown lists a DELETE endpoint that unlinks a wallet, which can affect account configuration and may be difficult to reverse. The description does not warn users about the impact of removing the linked wallet or any need to confirm before performing the action.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The document describes gameplay where users can lose their full bet through token burn and can also incur a 5% fee on redemption, but it does not clearly warn users about these irreversible losses. In a wallet-connected on-chain gaming context, omission of loss and fee disclosures can mislead users into taking financial actions they may not fully understand, increasing the risk of accidental fund loss.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The script automatically submits repeated on-chain betting transactions using the user's wallet without any interactive confirmation, spending cap, or explicit loss warning at execution time. In this skill's context, that behavior is especially risky because the stated purpose is gambling-like autoplay, so a user can quickly burn through assets or unintentionally run a high number of bets with real signing authority.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The utility automatically executes shell commands to initialize npm and install packages at runtime via execSync. This creates an unnecessary command-execution and supply-chain risk surface for a gameplay helper, because running the skill causes network package retrieval and code installation without explicit user review or pinned, pre-audited dependencies.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · SKILL.md (reported line 30)May include surrounding context.

md
const bs58 = require('bs58');
  const wallet = loadWallet();
  const apiKey = getApiKey();
  const base = 'https://api.clawlands.xyz/v1';

  // Step 1: Get challenge
  console.log('Getting signing challenge...');

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · SKILL.md (reported line 127)May include surrounding context.

md
const bs58 = require('bs58');
  const wallet = loadWallet();
  const apiKey = getApiKey();
  const base = 'https://api.clawlands.xyz/v1';

  // Step 1: Get challenge
  console.log('Getting signing challenge...');

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · SKILL.md (reported line 133)May include surrounding context.

md
const bs58 = require('bs58');
  const wallet = loadWallet();
  const apiKey = getApiKey();
  const base = 'https://api.clawlands.xyz/v1';

  // Step 1: Get challenge
  console.log('Getting signing challenge...');

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · SKILL.md (reported line 148)May include surrounding context.

md
const bs58 = require('bs58');
  const wallet = loadWallet();
  const apiKey = getApiKey();
  const base = 'https://api.clawlands.xyz/v1';

  // Step 1: Get challenge
  console.log('Getting signing challenge...');

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · references/API.md (reported line 3)May include surrounding context.

md
const bs58 = require('bs58');
  const wallet = loadWallet();
  const apiKey = getApiKey();
  const base = 'https://api.clawlands.xyz/v1';

  // Step 1: Get challenge
  console.log('Getting signing challenge...');

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · references/API.md (reported line 35)May include surrounding context.

md
const bs58 = require('bs58');
  const wallet = loadWallet();
  const apiKey = getApiKey();
  const base = 'https://api.clawlands.xyz/v1';

  // Step 1: Get challenge
  console.log('Getting signing challenge...');

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · scripts/link-wallet.js (reported line 15)May include surrounding context.

js
const bs58 = require('bs58');
  const wallet = loadWallet();
  const apiKey = getApiKey();
  const base = 'https://api.clawlands.xyz/v1';

  // Step 1: Get challenge
  console.log('Getting signing challenge...');

Static analysis

Detected: suspicious.dangerous_exec

Shell command execution detected (child_process).

Critical
Code
suspicious.dangerous_exec
Location
scripts/common.js:30