Back to skill

Security audit

ClawdVine

Security checks for vulnerabilities and agentic risk

Overview

This skill supports paid video generation, but needs Review because a bundled helper can authorize wallet payments automatically without locally enforcing the quoted price, chain, token, or recipient.

Review before installing. Use a dedicated low-balance wallet, do not expose a primary private key, and do not run the bundled automatic generation script unless you have independently verified the exact payment amount, chain, USDC token, recipient, and endpoint. Expect prompts, media URLs or base64 inputs, profile fields, feedback, and agent identity data to be sent to ClawdVine and sometimes made part of a public portfolio or agent profile. The publisher should add local payment limits and update vulnerable dependencies before this is treated as low-risk.

Vulnerability Patterns
  • 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
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (1)

T09 · Insecure Skill Coding Practices

Error
Location
scripts/x402-generate.mjs:45
Finding

Automatic Cryptocurrency Payment Lacks Client-Side Authorization Limits

Content
View full analysis

Vulnerability Details

File Location: scripts/x402-generate.mjs, lines 45–71
Vulnerability Type: Unbounded automatic cryptocurrency payment authorization
Risk Level: High

Vulnerable Code

js
// --- Setup x402 payment-wrapped fetch ---
let fetchWithPayment;

try {
  const { wrapFetchWithPayment, x402Client } = await import('@x402/fetch');
  const { registerExactEvmScheme } = await import('@x402/evm/exact/client');
  const client = new x402Client();
  registerExactEvmScheme(client, { signer });
  fetchWithPayment = wrapFetchWithPayment(fetch, client);
} catch {
  const { wrapFetchWithPayment } = await import('x402-fetch');
  fetchWithPayment = wrapFetchWithPayment(fetch, signer);
}

// --- Generate ---
console.log(`\n🎬 Generating video...`);
console.log(`   Prompt:   "${prompt.slice(0, 80)}${prompt.length > 80 ? '...' : ''}"`);
console.log(`   Model:    ${model}`);
console.log(`   Duration: ${duration}s`);
if (agentId) console.log(`   Agent:    ${agentId}`);
console.log();

const res = await fetchWithPayment(`${API_BASE}/generation/create`, {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ prompt, videoModel: model, duration, ...(agentId && { agentId }) }),
});

Technical Analysis

The script gives an x402 payment wrapper access to a signer derived from EVM_PRIVATE_KEY. When the generation API returns HTTP 402 Payment Required, the wrapper can sign the server-provided payment requirements and retry the request automatically.

The script does not independently enforce:

  • A maximum user-approved payment amount.
  • The expected Base chain identifier.
  • The expected USDC token contract.
  • The expected payment receiver.
  • The expected resource URL.
  • An immutable quote tied to the prompt, model, and duration.
  • A fresh explicit user confirmation before signing.

This behavior conflicts with the documented safeguard in SKILL.md:173–201, which requires presenting the real quote and obta ...[truncated 1494 chars]

Remediation
View remediation

Remediation Suggestions

  1. Perform an unsigned request first and parse the 402 Payment Required response without invoking the automatic payment wrapper.
  2. Validate every payment requirement locally:
    • Chain must be Base mainnet (eip155:8453).
    • Token must be the expected Base USDC contract.
    • Receiver must match an explicit trusted allowlist.
    • Resource must exactly match the intended generation endpoint.
    • Amount must not exceed a user-approved maximum.
  3. Display the complete prompt, model, duration, agent ID, receiver, token, chain, and exact total.
  4. Require explicit confirmation after displaying the final quote.
  5. Bind the approval to a canonical hash of the request and payment requirements.
  6. Reject the transaction if any payment parameter changes between quotation and submission.
  7. Avoid broad automatic retry behavior after signing.
  8. Prefer a dedicated, low-balance wallet with only the funds required for the intended generation.
  9. Remove or strictly control the legacy x402-fetch fallback so that all payment implementations apply identical validation policies.
  10. Add automated tests confirming that excessive amounts, unexpected receivers, incorrect tokens, incorrect chains, and changed retry requirements are rejected.
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (66)

Known Vulnerable Dependency: ws==8.18.3 — 2 advisory(ies): CVE-2026-45736 (ws: Uninitialized memory disclosure); CVE-2026-48779 (ws: Memory exhaustion DoS from tiny fragments and data chunks)

High
Category
Supply Chain
Confidence
97% confidence
Finding

The lockfile pins ws 8.18.3, which the provided advisory data marks as affected by an uninitialized memory disclosure and a memory-exhaustion denial of service issue. Even though this is a dependency file rather than executable logic, shipping a known vulnerable websocket library can expose any websocket-using functionality in the skill or its transitive dependencies to remote attack.

Content

No source excerpt is available for this finding.

Known Vulnerable Dependency: ws==8.17.1 — 2 advisory(ies): CVE-2026-45736 (ws: Uninitialized memory disclosure); CVE-2026-48779 (ws: Memory exhaustion DoS from tiny fragments and data chunks)

High
Category
Supply Chain
Confidence
97% confidence
Finding

The lockfile also contains ws 8.17.1, which the advisory data indicates is vulnerable to the same memory disclosure and DoS issues. Having multiple vulnerable ws versions increases exposure because either dependency path may be invoked at runtime, especially in a skill that relies on web3/networking libraries where websocket support is common.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
95% confidence
Finding

The skill declares no explicit tool scope despite clearly requiring network access and environment-secret access for wallet signing and payment flows. In agent platforms, missing scope declarations can cause overbroad execution privileges, weak reviewability, and accidental exposure of sensitive capabilities such as reading private keys from environment variables.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The manifest markets the skill as short-form video generation with x402 payment, but the body also enables identity enrollment, wallet-authenticated profile mutation, persistent identity management, and token-launch operations. This scope mismatch can mislead users and reviewers into granting trust or permissions for a much broader set of financially and identity-sensitive actions than advertised.

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 39)May include surrounding context.

bash
# Step 1: Start verification
curl -X POST https://api.clawdvine.sh/join/moltbook/init \
  -H "Content-Type: application/json" \
  -d '{"moltbookUsername": "YourMoltbookUsername"}'
# → Returns: publicIdentifier, secret, verificationPostContent

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% 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 39)May include surrounding context.

bash
# Step 1: Start verification
curl -X POST https://api.clawdvine.sh/join/moltbook/init \
  -H "Content-Type: application/json" \
  -d '{"moltbookUsername": "YourMoltbookUsername"}'
# → Returns: publicIdentifier, secret, verificationPostContent

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% 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 53)May include surrounding context.

bash
# Step 1: Start verification
curl -X POST https://api.clawdvine.sh/join/moltbook/init \
  -H "Content-Type: application/json" \
  -d '{"moltbookUsername": "YourMoltbookUsername"}'
# → Returns: publicIdentifier, secret, verificationPostContent

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% 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 95)May include surrounding context.

bash
# Step 1: Start verification
curl -X POST https://api.clawdvine.sh/join/moltbook/init \
  -H "Content-Type: application/json" \
  -d '{"moltbookUsername": "YourMoltbookUsername"}'
# → Returns: publicIdentifier, secret, verificationPostContent

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% 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 98)May include surrounding context.

bash
# Step 1: Start verification
curl -X POST https://api.clawdvine.sh/join/moltbook/init \
  -H "Content-Type: application/json" \
  -d '{"moltbookUsername": "YourMoltbookUsername"}'
# → Returns: publicIdentifier, secret, verificationPostContent

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% 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 122)May include surrounding context.

bash
# Step 1: Start verification
curl -X POST https://api.clawdvine.sh/join/moltbook/init \
  -H "Content-Type: application/json" \
  -d '{"moltbookUsername": "YourMoltbookUsername"}'
# → Returns: publicIdentifier, secret, verificationPostContent

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% 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 151)May include surrounding context.

bash
# Step 1: Start verification
curl -X POST https://api.clawdvine.sh/join/moltbook/init \
  -H "Content-Type: application/json" \
  -d '{"moltbookUsername": "YourMoltbookUsername"}'
# → Returns: publicIdentifier, secret, verificationPostContent

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% 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 220)May include surrounding context.

bash
# Step 1: Start verification
curl -X POST https://api.clawdvine.sh/join/moltbook/init \
  -H "Content-Type: application/json" \
  -d '{"moltbookUsername": "YourMoltbookUsername"}'
# → Returns: publicIdentifier, secret, verificationPostContent

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% 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 302)May include surrounding context.

bash
# Step 1: Start verification
curl -X POST https://api.clawdvine.sh/join/moltbook/init \
  -H "Content-Type: application/json" \
  -d '{"moltbookUsername": "YourMoltbookUsername"}'
# → Returns: publicIdentifier, secret, verificationPostContent

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% 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 322)May include surrounding context.

bash
# Step 1: Start verification
curl -X POST https://api.clawdvine.sh/join/moltbook/init \
  -H "Content-Type: application/json" \
  -d '{"moltbookUsername": "YourMoltbookUsername"}'
# → Returns: publicIdentifier, secret, verificationPostContent

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% 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 330)May include surrounding context.

bash
# Step 1: Start verification
curl -X POST https://api.clawdvine.sh/join/moltbook/init \
  -H "Content-Type: application/json" \
  -d '{"moltbookUsername": "YourMoltbookUsername"}'
# → Returns: publicIdentifier, secret, verificationPostContent

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% 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 366)May include surrounding context.

bash
# Step 1: Start verification
curl -X POST https://api.clawdvine.sh/join/moltbook/init \
  -H "Content-Type: application/json" \
  -d '{"moltbookUsername": "YourMoltbookUsername"}'
# → Returns: publicIdentifier, secret, verificationPostContent

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% 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 498)May include surrounding context.

bash
# Step 1: Start verification
curl -X POST https://api.clawdvine.sh/join/moltbook/init \
  -H "Content-Type: application/json" \
  -d '{"moltbookUsername": "YourMoltbookUsername"}'
# → Returns: publicIdentifier, secret, verificationPostContent

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% 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 538)May include surrounding context.

bash
# Step 1: Start verification
curl -X POST https://api.clawdvine.sh/join/moltbook/init \
  -H "Content-Type: application/json" \
  -d '{"moltbookUsername": "YourMoltbookUsername"}'
# → Returns: publicIdentifier, secret, verificationPostContent

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% 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 561)May include surrounding context.

bash
# Step 1: Start verification
curl -X POST https://api.clawdvine.sh/join/moltbook/init \
  -H "Content-Type: application/json" \
  -d '{"moltbookUsername": "YourMoltbookUsername"}'
# → Returns: publicIdentifier, secret, verificationPostContent

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% 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 599)May include surrounding context.

bash
# Step 1: Start verification
curl -X POST https://api.clawdvine.sh/join/moltbook/init \
  -H "Content-Type: application/json" \
  -d '{"moltbookUsername": "YourMoltbookUsername"}'
# → Returns: publicIdentifier, secret, verificationPostContent

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% 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 600)May include surrounding context.

bash
# Step 1: Start verification
curl -X POST https://api.clawdvine.sh/join/moltbook/init \
  -H "Content-Type: application/json" \
  -d '{"moltbookUsername": "YourMoltbookUsername"}'
# → Returns: publicIdentifier, secret, verificationPostContent

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% 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 624)May include surrounding context.

bash
# Step 1: Start verification
curl -X POST https://api.clawdvine.sh/join/moltbook/init \
  -H "Content-Type: application/json" \
  -d '{"moltbookUsername": "YourMoltbookUsername"}'
# → Returns: publicIdentifier, secret, verificationPostContent

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% 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 701)May include surrounding context.

bash
# Step 1: Start verification
curl -X POST https://api.clawdvine.sh/join/moltbook/init \
  -H "Content-Type: application/json" \
  -d '{"moltbookUsername": "YourMoltbookUsername"}'
# → Returns: publicIdentifier, secret, verificationPostContent

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% 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 724)May include surrounding context.

bash
# Step 1: Start verification
curl -X POST https://api.clawdvine.sh/join/moltbook/init \
  -H "Content-Type: application/json" \
  -d '{"moltbookUsername": "YourMoltbookUsername"}'
# → Returns: publicIdentifier, secret, verificationPostContent

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% 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 875)May include surrounding context.

bash
# Step 1: Start verification
curl -X POST https://api.clawdvine.sh/join/moltbook/init \
  -H "Content-Type: application/json" \
  -d '{"moltbookUsername": "YourMoltbookUsername"}'
# → Returns: publicIdentifier, secret, verificationPostContent

Static analysis

Detected: suspicious.env_credential_access, suspicious.prompt_injection_instructions

Environment variable access combined with network send.

Critical
Code
suspicious.env_credential_access
Location
scripts/check-balance.mjs:22

Environment variable access combined with network send.

Critical
Code
suspicious.env_credential_access
Location
scripts/x402-generate.mjs:29

Prompt-injection style instruction pattern detected.

Warn
Code
suspicious.prompt_injection_instructions
Location
SKILL.md:1565