T08 · Insecure Dependencies
Error
- Location
- SKILL.md:15
- Finding
- Unpinned Global Installation of a Security-Sensitive npm Package<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md:15-20` and `SKILL.md:47-50` **Vulnerability Type**: Unpinned third-party dependency and supply-chain exposure **Risk Level**: High ### Vulnerable Code ```yaml install: - id: openclaw-credential-vault kind: node package: openclaw-credential-vault bins: [openclaw-credential-vault] label: Install Credential Vault plugin (npm) ``` ```markdown ## Install Install the plugin via npm: ```bash npm install -g openclaw-credential-vault ``` ``` ### Technical Analysis The Skill directs users to install `openclaw-credential-vault` globally without specifying an exact version or package integrity digest. Consequently, the installed code is determined by the package registry at installation time and can differ from the version reviewed when the Skill was published. The project contains only `SKILL.md`; it does not include the dependency's implementation. Therefore, the claims concerning encryption, credential injection, output scrubbing, and hook behavior cannot be verified from the audited artifact. A global npm installation can also execute package lifecycle scripts with the privileges of the user running npm. This dependency is especially sensitive because the documentation states that it registers execution and messaging hooks and handles decrypted credentials. Compromise of this dependency would therefore provide access to high-value secrets and trusted Agent execution channels. ### Attack Path 1. An attacker compromises the npm publisher account, package release pipeline, or another component in the package's supply chain. 2. The attacker publishes a malicious release under the same package name. 3. A user follows the Skill's instructions and runs `npm install -g openclaw-credential-vault`. 4. npm resolves and installs the attacker-controlled release because no exact version or integrity value is required. 5. Malicious lifecycle or runtime code executes with the installing user's ...[truncated 784 chars]
- Remediation
- <![CDATA[ ## Remediation Suggestions 1. Pin the dependency to a reviewed, immutable version rather than resolving the latest registry release. 2. Record and verify a cryptographic integrity digest for the distributed package. 3. Verify npm package provenance and require signed, reproducible releases where supported. 4. Audit the exact package archive, including lifecycle scripts, transitive dependencies, hook registration, credential handling, and network behavior. 5. Avoid global installation when possible; use a restricted, project-local installation or isolated environment with least-privilege permissions. 6. Disable npm lifecycle scripts during initial inspection, then enable only scripts demonstrated to be necessary and safe. 7. Include the security-relevant implementation in the reviewed artifact or link the Skill to an immutable source commit rather than a mutable branch. 8. Establish dependency monitoring and an explicit upgrade-review process so newer releases are not automatically trusted. ]]>
