T08 · Insecure Dependencies
Error
- Location
- SKILL.md:4
- Finding
- Unpinned Remote npm CLI Executes with Financial Credentials<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md`, lines 4–52 **Vulnerability Type**: Unpinned third-party dependency with access to sensitive payment credentials **Risk Level**: High ### Vulnerable Code ```yaml metadata: {"openclaw": {"emoji": "⚡", "requires": {"bins": ["npx"], "env": ["COINBASE_API_KEY_ID", "COINBASE_API_KEY_SECRET", "COINBASE_WALLET_SECRET"]}, "install": [{"id": "boltzpay-cli", "kind": "node", "label": "BoltzPay CLI"}]}} ``` ```bash npx @boltzpay/cli fetch https://invy.bot/api ``` ```markdown ### x402 (USDC on Base) - `COINBASE_API_KEY_ID` — Your Coinbase CDP API key ID - `COINBASE_API_KEY_SECRET` — Your Coinbase CDP API key secret - `COINBASE_WALLET_SECRET` — Your Coinbase CDP wallet secret ### MPP (Tempo payment channels) - `TEMPO_PRIVATE_KEY` — Tempo wallet private key (hex). Enables MPP one-shot payments and streaming sessions. ### Optional - `NWC_CONNECTION_STRING` — NWC connection string for L402 (Lightning) payments - `STRIPE_SECRET_KEY` — Stripe secret key for Stripe MPP payments - `BOLTZPAY_DAILY_BUDGET` — Daily spending limit in USD (default: unlimited) ``` ### Technical Analysis The Skill instructs agents to execute `@boltzpay/cli` through `npx` without specifying an exact package version or verified integrity value. Consequently, the code executed during a future Skill invocation may differ from the code that existed when the Skill was reviewed. The downloaded CLI executes in an environment explicitly configured with Coinbase API secrets, wallet secrets, and potentially Tempo, Lightning, or Stripe payment credentials. Network access and payment authorization are necessary for the declared paid-API functionality, but allowing a mutable, remotely retrieved dependency to inherit broad financial credentials does not enforce least privilege. The audited project contains no source code or lockfile for `@boltzpay/cli`, so its credential handling, request destinations, transaction validation, and secret-storage ...[truncated 2263 chars]
- Remediation
- <![CDATA[ ## Remediation Suggestions 1. Pin `@boltzpay/cli` to a reviewed, exact version rather than using an unconstrained package reference. 2. Supply and verify a lockfile and package integrity hash. Prefer a reproducible installation process that fails closed if the artifact hash changes. 3. Include the CLI source in the audited package or link directly to the exact source revision corresponding to the pinned release. 4. Correct the provenance documentation so the npm and source links clearly identify the executed `@boltzpay/cli` package rather than only `@boltzpay/sdk`. 5. Run the CLI in an isolated process with only the credential required for the selected payment protocol. Do not expose Coinbase, Tempo, Lightning, and Stripe credentials simultaneously. 6. Use narrowly scoped, revocable credentials and dedicated low-balance wallets. Avoid primary wallets or unrestricted Stripe keys. 7. Require a finite, conservative daily and per-transaction budget. Do not default to unlimited spending. 8. Require explicit user confirmation before each payment and display the protocol, chain, amount, recipient, endpoint, and maximum total charge. 9. Restrict outbound network destinations where practical, separating package retrieval, registry access, payment-provider access, and selected API access. 10. Validate endpoint redirects and payment-recipient changes to prevent a quoted request from being redirected to a different host or recipient. 11. Ensure non-payment commands such as `quote`, `discover`, and `diagnose` run without inheriting payment credentials. 12. Document credential rotation and revocation procedures for users who suspect package or endpoint compromise. ]]>
