T08 · Insecure Dependencies
Warning
- Location
- SKILL.md:10
- Finding
- Unpinned Global Installation of a Credential-Handling npm Dependency<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md:10-16`, `SKILL.md:31-37`, and `SKILL.md:226` **Vulnerability Type**: Unpinned third-party dependency installed globally **Risk Level**: Medium ### Vulnerable Code ```yaml metadata: openclaw: emoji: "🔍" requires: bins: - deso-ag install: - id: npm kind: npm package: deso-ag global: true bins: - deso-ag label: "Install deso-ag CLI (npm)" ``` ```bash which deso-ag || echo "deso-ag not found — install with: npm install -g deso-ag" ``` ```bash npm install -g deso-ag ``` ```markdown - If deso-ag is not found, install it: `npm install -g deso-ag` ``` ### Technical Analysis The Skill directs the Agent to install the latest available release of `deso-ag` from npm without specifying an exact version, lockfile, or package-integrity hash. It also requests a global installation, increasing the dependency's exposure to the user's environment and potentially allowing npm lifecycle scripts to execute with the privileges of the user performing the installation. The dependency is central to the Skill and is expected to access network services and credential-bearing environment variables, including `NEYNAR_API_KEY`, `BLUESKY_IDENTIFIER`, and `BLUESKY_APP_PASSWORD`. The implementation of `deso-ag` is not included in the audited project, so the audit cannot verify its network destinations, lifecycle scripts, credential redaction, or runtime behavior. This does not prove that the current npm package is malicious. The vulnerability is the mutable and insufficiently constrained dependency trust boundary: a future compromised, replaced, or unexpectedly changed package release could be installed and executed without further review. ### Attack Path 1. An attacker compromises the npm package, a maintainer account, or the package's release pipeline. 2. The attacker publishes a malicious release under the existing `deso-ag` package n ...[truncated 1816 chars]
- Remediation
- <![CDATA[ ## Remediation Suggestions 1. Pin `deso-ag` to a specific, reviewed version rather than resolving the latest release: ```yaml package: deso-ag@X.Y.Z ``` 2. Use a lockfile and verify npm package integrity hashes in the installation workflow. 3. Avoid global installation. Install the dependency in an isolated project directory or disposable execution environment with minimal filesystem permissions. 4. Review and retain the exact dependency source used by the Skill, including transitive dependencies and npm lifecycle scripts. 5. Disable lifecycle scripts during installation where compatible: ```bash npm install --ignore-scripts --save-exact deso-ag@X.Y.Z ``` 6. Run the CLI with a minimal environment containing only the credentials required for the selected network. Do not expose unrelated secrets to the process. 7. Restrict outbound network access to documented and approved Farcaster, Bluesky, Lens, and Nostr endpoints. 8. Use scoped, revocable app credentials and ensure the dependency redacts secrets from command output, debug logs, telemetry, and error messages. 9. Document the exact external hosts that receive each credential and require explicit user approval before authenticated queries. 10. Periodically re-audit the pinned package version and its transitive dependency tree before upgrading. ]]>
