T08 · Insecure Dependencies
- Location
- SKILL.md:24
- Finding
- Mutable and Unpinned Third-Party Dependencies in Agent and Payment Workflows<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md:24-34`, `SKILL.md:39-45`, `README.md:15-18`, `README.md:69-72`, `requirements.txt:1-3`, `api/requirements.txt:1-5` **Vulnerability Type**: Supply-chain exposure through mutable npm execution and open-ended Python dependency constraints **Risk Level**: Medium ### Vulnerable Code `SKILL.md:24-34`: ```bash # Check payment requirements npx awal@latest x402 details https://solana-meme-analyzer-production.up.railway.app/analyze?ca=TOKEN_CA # Make a paid request (auto-pays from your wallet) npx awal@latest x402 pay "https://solana-meme-analyzer-production.up.railway.app/analyze?ca=TOKEN_CA" ``` `SKILL.md:39-45`: ```bash pip install -r {baseDir}/requirements.txt ``` `README.md:15-18`: ```bash # Install dependencies pip install -r requirements.txt ``` `README.md:69-72`: ```bash npx playbooks add skill openclaw/skills --skill solana-meme-analyzer ``` `requirements.txt:1-3`: ```text requests>=2.28.0 colorama>=0.4.6 tabulate>=0.9.0 ``` `api/requirements.txt:1-5`: ```text fastapi>=0.110.0 uvicorn>=0.29.0 requests>=2.28.0 colorama>=0.4.6 tabulate>=0.9.0 ``` ### Technical Analysis The agent-facing instructions use `npx awal@latest`, which retrieves and executes the package version currently associated with the mutable `latest` tag. Consequently, the code that executes may differ from the code available when this Skill was reviewed. This is especially sensitive because the command is used in an automatic cryptocurrency payment workflow and may interact with the user's wallet. The installation instructions also retrieve another npm-based tool without an explicit version. In addition, both Python requirements files use lower-bound constraints rather than exact versions and provide no hashes or lockfile. A future package release satisfying these constraints may therefore be installed without having been reviewed with this project. No evidence establishes that the referenced packages are currently mal ...[truncated 1911 chars]
- Remediation
- <![CDATA[ ## Remediation Suggestions 1. Replace `awal@latest` with an exact, reviewed version: ```bash npx --yes awal@X.Y.Z x402 details "https://solana-meme-analyzer-production.up.railway.app/analyze?ca=TOKEN_CA" npx --yes awal@X.Y.Z x402 pay "https://solana-meme-analyzer-production.up.railway.app/analyze?ca=TOKEN_CA" ``` 2. Pin every npm-based installation command to a specific reviewed version. Avoid mutable tags such as `latest`. 3. Commit an npm lockfile where applicable and use reproducible installation commands such as `npm ci`. 4. Replace Python lower-bound constraints with exact reviewed versions, for example: ```text requests==REVIEWED_VERSION colorama==REVIEWED_VERSION tabulate==REVIEWED_VERSION ``` 5. Generate and verify hashes for Python distributions, then install with: ```bash pip install --require-hashes -r requirements.txt ``` 6. Use a controlled dependency-update process that includes vulnerability scanning, release-diff review, automated tests, and explicit approval before changing pinned versions. 7. Isolate payment tooling from unrelated secrets and files. Run it in a restricted environment with only the wallet permissions and environment variables required for the specific payment. 8. Verify package publisher identity, registry provenance, signatures or attestations where supported, and the expected package integrity before execution. 9. Prefer a locally reviewed and version-controlled payment client over dynamically executing registry-hosted code during each transaction. ]]>
