T08 · Insecure Dependencies
- Location
SKILL.md:12- Finding
Unpinned Third-Party npm Packages Are Installed and Executed
- Content
View full analysis
Vulnerability Details
File Location:
SKILL.md:12-18,SKILL.md:29-38, andSKILL.md:64-65
Vulnerability Type: Supply-chain risk through mutable, unpinned npm dependencies
Risk Level: MediumVulnerable Code
yaml metadata: emoji: 🛡️ requires: bins: - npx env: [] install: | npm install -g protect-mcp@latestbash # Shadow mode — log everything, block nothing npx protect-mcp -- node your-server.js # Enforce mode — apply per-tool policies npx protect-mcp --policy policy.json --enforce -- node your-server.js # Initialize signing (generates Ed25519 keypair) npx protect-mcp initbash npx @veritasacta/verify receipt.json npx @veritasacta/verify --self-testTechnical Analysis
The installation instruction explicitly selects the mutable
latestrelease ofprotect-mcp, while thenpxcommands do not specify package versions. Consequently, the code executed by future users may differ from the package version that existed when this Skill was reviewed.Neither an exact version, lockfile, integrity hash, nor audited vendored source is included in the project. npm packages can also execute lifecycle scripts during installation. Global installation further increases exposure because the installed executable is placed in the user's global npm environment rather than being isolated to this project.
This is a supply-chain weakness rather than evidence that either named package is currently malicious. Exploitation would require compromise or malicious publication of a referenced package or one of its transitive dependencies.
Attack Path
- An attacker compromises the npm publisher account, package distribution process, or a transitive dependency associated with
protect-mcpor@veritasacta/verify. - The attacker publishes a malicious release that is selected by the
latesttag or by versionlessnpxresolution. - A user ...[truncated 1128 chars]
- An attacker compromises the npm publisher account, package distribution process, or a transitive dependency associated with
- Remediation
View remediation
Remediation Suggestions
- Replace
@latestand versionless package references with exact, reviewed versions, for exampleprotect-mcp@X.Y.Zand@veritasacta/verify@X.Y.Z. - Avoid global installation. Use a project-local dependency declared in
package.jsonand committed lockfile, then invoke the locked binary through a package script. - Commit a lockfile generated with a current npm client and verify registry integrity metadata during installation.
- Review the selected packages and their transitive dependency trees before updating versions.
- Use an automated dependency-update process that requires security review and test approval before lockfile changes are merged.
- Disable npm lifecycle scripts where operationally possible, such as with
npm ci --ignore-scripts, and explicitly review any scripts that must remain enabled. - Run the MCP proxy under a dedicated, least-privileged account or within a constrained container or sandbox. Limit filesystem, environment-variable, credential, and network access.
- Configure trusted npm registries and scoped-package mappings explicitly, and consider organizational package allowlists or provenance verification.
- Document a verified package version and integrity digest in
SKILL.mdso users do not resolve a different artifact at execution time.
- Replace
