T08 · Insecure Dependencies
- Location
README.md:55- Finding
Unpinned npm Package Is Downloaded and Executed with Wallet Credentials
- Content
View full analysis
Vulnerability Details
File Location:
SKILL.md:9,SKILL.md:165-168,README.md:13-16, andREADME.md:55-62
Vulnerability Type: Unpinned third-party dependency and automatic remote package execution
Risk Level: MediumVulnerable Code
SKILL.md:9:yaml install: npm install -g shll-skills --registry https://registry.npmjs.orgSKILL.md:165-168:bash npm install -g shll-skills --registry https://registry.npmjs.orgREADME.md:13-16:bash npm install -g shll-skillsREADME.md:55-62:json { "mcpServers": { "shll-defi": { "command": "npx", "args": ["-y", "shll-skills", "--mcp"], "env": { "RUNNER_PRIVATE_KEY": "0x_YOUR_OPERATOR_PRIVATE_KEY" }Technical Analysis
The documented installation and MCP setup procedures identify the package only as
shll-skills, without pinning an audited version or integrity digest. Consequently, npm resolves whichever release is current when installation occurs.The MCP configuration is particularly sensitive because
npx -ycan download and execute the resolved package automatically without interactive review. The resulting process is explicitly provided withRUNNER_PRIVATE_KEY, an operator-wallet private key capable of signing BSC transactions. A malicious package release, compromised publisher account, or compromised upstream dependency could therefore execute attacker-controlled code in a credential-bearing process.Global npm installation can also execute package lifecycle scripts with the privileges of the user running npm. The actual npm package source is not included in the audited artifact, so its implementation and the claimed PolicyGuard enforcement could not be independently verified.
Attack Path
- An attacker compromises the
shll-skillsnpm publisher account, release pipeline, or a dependency included in a new package release. - The attacke ...[truncated 1391 chars]
- An attacker compromises the
- Remediation
View remediation
Remediation Suggestions
- Pin an explicitly reviewed package version in every installation and execution example, such as:
bash npm install -g shll-skills@6.0.5 --registry https://registry.npmjs.org - Replace the automatic latest-version MCP invocation with a pinned version:
json { "command": "npx", "args": ["-y", "shll-skills@6.0.5", "--mcp"] } - Prefer installing a verified release in advance and configuring MCP to invoke the installed binary rather than downloading code at startup.
- Publish and verify package provenance, checksums, signatures, and npm integrity metadata for approved releases.
- Use lockfiles and reproducible builds for non-global deployments, including pinned transitive dependencies.
- Establish a controlled upgrade process that reviews source changes and dependencies before changing the approved version.
- Run the MCP server under a dedicated, least-privileged operating-system account or sandbox with restricted filesystem and network access.
- Continue using a dedicated operator wallet with minimal gas funds, narrow on-chain policies, short authorization periods, and a documented key-revocation procedure.
- Avoid exposing unrelated secrets to the MCP process, and rotate the operator key immediately if package integrity is ever uncertain.
- Pin an explicitly reviewed package version in every installation and execution example, such as:
