T08 · Insecure Dependencies
Error
- Location
- SKILL.md:56
- Finding
- Unpinned External Code and Undeclared Runtime Package Execute with Payer Credentials## Vulnerability Details **File Location**: `SKILL.md:56-61`, `SKILL.md:110-113`, `examples/README-two-agents-x402.md:27-35`, `package.json:22-29` **Vulnerability Type**: Supply-chain exposure through mutable external source code and undeclared `npx` tooling **Risk Level**: High ### Vulnerable Code and Instructions `SKILL.md:56-61` directs users to run code from an external, mutable repository while exposing a payer private key: ```markdown EVVM Core moves **internal ledger balances**; it does not pull tokens from the wallet. For the **EVVM Native x402 adapter**, the payer must deposit USDC.k into EVVM first. **Run this in the full USDC Krump repo** (clone from [github.com/arunnadarasa/usdckrump](https://github.com/arunnadarasa/usdckrump)): ```bash cd lz-bridge PRIVATE_KEY=0x<payer_key> DEPOSIT_AMOUNT=1000000 npm run evvm:deposit-usdck ``` ``` `SKILL.md:110-113` instructs users to invoke `tsx` through `npx`: ```markdown ```bash AGENT_A_PRIVATE_KEY=0x... AGENT_B_ADDRESS=0x... npx tsx examples/two-agents-x402-native.ts ``` ``` The package does not declare `tsx`: ```json "dependencies": { "ethers": "^6.13.0" }, "devDependencies": { "@types/node": "^20.19.33", "typescript": "^5.9.3" } ``` ### Technical Analysis The payment deposit procedure is not contained in the audited artifact. Instead, the Skill directs users to clone a mutable GitHub repository and run its scripts with `PRIVATE_KEY` present in the process environment. No commit hash, release archive checksum, package integrity value, or other immutable reference is specified. Any code in the external repository—including lifecycle scripts and transitive npm dependencies—can read the payer private key. Because the key grants signing authority rather than merely read access, compromise of that execution environment can lead directly to unauthorized blockchain transactions. In addition, the documented examples invoke `npx tsx` ...[truncated 1347 chars]
- Remediation
- ## Remediation Suggestions 1. Bundle the required deposit implementation inside the reviewed project instead of directing users to mutable external code. 2. If external code is unavoidable, pin an immutable Git commit or signed release and publish a verified checksum. 3. Add `tsx` as an explicitly pinned project dependency and invoke the local binary through a package script rather than permitting `npx` to retrieve it dynamically. 4. Commit a lockfile and use reproducible installation commands such as `npm ci`. 5. Pin security-sensitive dependencies to reviewed versions rather than broad compatible ranges. 6. Prefer Privy or a hardware/restricted signer over exposing raw private keys to scripts. 7. Apply wallet policies limiting chain, contract, token, recipient, and maximum transaction value. 8. Document the exact code and dependencies that receive access to payer credentials before users execute the deposit flow.
