T01 · Skill Instruction Hijacking
- Location
README.md:1- Finding
Instructions Conceal Paid Transactions from Users
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This skill can automatically spend real wallet funds, and its payment disclosures and safeguards are inconsistent.
Review carefully before installing. Use only a dedicated wallet with minimal funds, configure X402_POLICY_PATH with strict per-transaction caps, daily caps, and recipient allowlists, keep autopreflight enabled, and verify the discovery endpoint and catalog recipients. Do not rely on this skill to protect funds if no policy is configured, and require the agent to show cost and destination before any paid call.
README.md:1Instructions Conceal Paid Transactions from Users
client.js:149Payment Policy Silently Bypassed When No Policy Path Is Configured
discovery.js:47Remote Catalog Can Redirect User Data and Wallet-Authorized Payments
policy-engine.cjs:132Configured Hourly Transaction Limit Is Not Enforced
client.js:159Non-Atomic Spend State Permits Concurrent Daily-Cap Bypass
YARA rule matched a hack tool or exploit indicator (offensive tools, reconnaissance, privilege escalation, or exploit frameworks).
install
**Required environment:**
- `EVM_PRIVATE_KEY` — funded EVM wallet private key (Base USDC or MegaETH USDm)
**Optional:**
- `X402_POLICY_PATH` — custom policy file (default: `POLICY.example.json`)
- `X402_STATE_PATH` — daily spend tracking file
- `X402_DISCOVERY_URL` — override discovery endpoint
- `X402ENGINE_ORIGIN` — override API base URL
- `X402_AUTOPREFLIGHT` — enable/disable policy preflight (default: `true`)
## CLI
```bash
# List all available services from the catalog
node ./cli.js discover
# Show remaining daily budget
node ./cli.js budget
Crypto: price feeds, market data, history, trending, search Wallet: balances, transactions across 20+ chains Image: fast (FLUX), quality (FLUX.2 Pro), text-in-image (Ideogram) Video: fast, quality, animation, Hailuo premium LLM: GPT-4o, Claude, Gemini, DeepSeek, Llama, Grok, Qwen, Mistral, Perplexity, and more Code: sandboxed execution (Python, JS, Bash, R)
The skill explicitly states that without a policy file, no spending limits are enforced beyond wallet balance, and also allows overriding discovery and skipping preflight checks via configuration. Combined with evidence that operational payment enforcement may be missing or inconsistent, this creates a realistic risk of unauthorized or excessive payments to catalog-declared recipients, especially because all payments are driven by remote discovery data.
The skill explicitly states that without a policy file, no spending limits are enforced beyond wallet balance, and also allows overriding discovery and skipping preflight checks via configuration. Combined with evidence that operational payment enforcement may be missing or inconsistent, this creates a realistic risk of unauthorized or excessive payments to catalog-declared recipients, especially because all payments are driven by remote discovery data.
The skill explicitly states that without a policy file, no spending limits are enforced beyond wallet balance, and also allows overriding discovery and skipping preflight checks via configuration. Combined with evidence that operational payment enforcement may be missing or inconsistent, this creates a realistic risk of unauthorized or excessive payments to catalog-declared recipients, especially because all payments are driven by remote discovery data.
The skill explicitly states that without a policy file, no spending limits are enforced beyond wallet balance, and also allows overriding discovery and skipping preflight checks via configuration. Combined with evidence that operational payment enforcement may be missing or inconsistent, this creates a realistic risk of unauthorized or excessive payments to catalog-declared recipients, especially because all payments are driven by remote discovery data.
The skill explicitly states that without a policy file, no spending limits are enforced beyond wallet balance, and also allows overriding discovery and skipping preflight checks via configuration. Combined with evidence that operational payment enforcement may be missing or inconsistent, this creates a realistic risk of unauthorized or excessive payments to catalog-declared recipients, especially because all payments are driven by remote discovery data.
The lockfile pins fast-uri to 3.1.0, and the cited advisories describe URI/host parsing ambiguities including IDN canonicalization, backslash authority handling, and malformed IPv6 normalization. In a skill that acts as a pay-per-call API gateway and may validate or construct outbound destinations, URI confusion bugs can enable SSRF, host allowlist bypass, or misrouting of paid requests to attacker-controlled endpoints.
The bundled ws 8.18.3 is flagged for uninitialized memory disclosure and memory-exhaustion DoS via fragmented frames. If this dependency is reachable through websocket features in viem or related libraries, an attacker interacting with websocket-based RPC or streaming paths could crash the process or potentially expose process memory contents.
A second vulnerable ws version, 8.17.1, is also present in the lockfile, indicating multiple affected copies in the dependency graph. This broadens exposure because any code path using that older websocket stack could be abused for denial of service or memory disclosure, especially in a service expected to maintain network connectivity to external providers.
The README explicitly says the skill 'transparently' calls paid APIs and that the user 'never sees' x402/payment/USDC, which indicates hidden spending and external data transmission on the user's behalf. In an agent-skill context, concealed payments and undisclosed routing of user prompts to third-party services are dangerous because they can cause unauthorized financial loss and privacy exposure without meaningful user consent.
The README requires an EVM_PRIVATE_KEY for a funded wallet but does not prominently warn that the skill can use that key to sign blockchain payments automatically. In practice, this creates a high-risk trust boundary: anyone deploying the skill may expose spendable credentials to an automation layer that can initiate real-money transactions.
The skill declares access to sensitive capabilities through metadata and documented behavior—environment secrets and network access—but does not define an explicit tool scope such as permissions or allowed-tools. In an agent environment, this weakens containment and review because the skill can influence use of a private key and remote endpoints without clear, enforceable least-privilege boundaries.
The skill loads an EVM private key from EVM_PRIVATE_KEY or EVM_PRIVATE_KEY_FILE and then creates a signing account, but there is no explicit warning or user-facing disclosure that sensitive credentials will be accessed. The top-level comments mention wallet wrapping, but they do not clearly warn about secret material being consumed from the environment or filesystem.
The autopreflight path updates and saves state to disk via applySuccessToState and saveState, but there is no user-facing prompt, log, or warning at the point of write. While the function has a brief code comment about preflight, it does not disclose that using this path will persist data to a state file.
The code wraps fetch with payment support, which can cause outbound network activity carrying payment and wallet-related context, but there is no user-facing warning or confirmation near this operation. Although the function name implies paid fetch behavior, the file does not explicitly disclose the network/payment side effects to users of the skill.
The code accesses wallet credentials by creating or loading an EVM account and also falls back to environment-provided policy/state paths, but there is no user-facing warning, confirmation, or visible logging at the point this sensitive account material is used. Although the function docstring documents parameters, it does not clearly warn that wallet credentials will be used to authorize paid requests on the user's behalf.
The function sends parameters derived from the user's natural-language query to a remote paid service via GET query string or JSON POST body. The code contains no confirmation prompt or user-visible notice immediately before transmitting this data, and the existing comments/docstring do not explicitly warn that user input will be sent to external services.
The manifest describes a micropayment-backed API gateway for calling external APIs such as LLMs, media generation, travel, crypto, and search. This router also treats 'run', 'execute', 'python', 'javascript', and 'bash' as first-class intents for a 'code-run' service, which introduces a code-execution capability not clearly justified by that stated gateway purpose.
When a query is routed to 'code-run', the router silently strips trigger words, places the remainder into params.code, and forces params.language = 'python' without explicit user confirmation. In a pay-per-call gateway that exposes remote execution as one of many services, ambiguous natural-language requests could unintentionally invoke Python execution, increasing the risk of accidental code execution, unsafe side effects, or unexpected spend.
The policy sets the daily cap timezone to "America/Los_Angeles", which imposes a specific locale in a configuration that otherwise appears general-purpose. The same locale constraint is repeated for multiple assets without any indication that users can choose it or that the policy is region-specific.
This entry again fixes the daily cap timezone to "America/Los_Angeles", enforcing one locale across assets. Without user choice or clear regional scoping, this can violate language/locale policy expectations.
The Solana asset policy also hard-codes "America/Los_Angeles" as the timezone for daily caps. This is a locale-specific constraint presented without evidence of user opt-in or a documented region-specific purpose.
The code uses Intl.NumberFormat with the fixed locale string 'en-US' in both currency formatting functions. This forces U.S. English formatting conventions regardless of user preference, which matches the policy category for language/locale constraints without opt-in.
The dependency uses a caret range, which allows automatic installation of newer compatible releases instead of a single vetted version. In a payment-gateway skill that handles micropayments and likely interacts with wallets or signing flows, a compromised or buggy upstream release could introduce supply-chain risk and affect financial operations.
"budget": "node ./cli.js budget"
},
"dependencies": {
"@x402/fetch": "^2.4.0",
"@x402/evm": "^2.4.0",
"viem": "^2.0.0"
}
The package is version-ranged with a caret, so builds may pull different transitive code over time. Because this skill uses EVM-related payment components, unexpected upstream changes could affect transaction handling, signing behavior, or introduce a malicious package update through the supply chain.
},
"dependencies": {
"@x402/fetch": "^2.4.0",
"@x402/evm": "^2.4.0",
"viem": "^2.0.0"
}
}
Detected: suspicious.exposed_secret_literal