T08 · Insecure Dependencies
- Location
SKILL.md:90- Finding
Unpinned Third-Party npm Packages Create a Supply-Chain Execution Risk
- Content
View full analysis
Vulnerability Details
File Location:
SKILL.md:90andSKILL.md:121
Vulnerability Type: Unpinned third-party dependencies
Risk Level: MediumVulnerable Code
bash npm install @clicks-protocol/sdkbash npx @clicks-protocol/mcp-serverTechnical Analysis
The documentation instructs users to install or execute npm packages without specifying exact versions. Package resolution therefore occurs at execution time and may retrieve code that differs from the version intended or previously reviewed.
The
npxcommand is particularly sensitive because it may download and immediately execute the currently resolved package. Similarly,npm installmay execute package lifecycle scripts unless they are explicitly disabled. The effective third-party code and its lifecycle scripts are absent from this project, so they were outside the audited code boundary.This is a supply-chain weakness rather than evidence that the named packages are currently malicious.
Attack Path
- An attacker compromises the npm publisher account, package, or a dependency in its dependency tree.
- The attacker publishes a malicious version that becomes the version selected by the unpinned command.
- A user follows the documented
npm installornpxinstruction. - npm downloads the attacker-controlled release.
- Malicious lifecycle or runtime code executes with the permissions of the invoking user.
Impact Assessment
Successful exploitation could provide arbitrary code execution under the invoking user's account. Depending on that account's permissions and environment, malicious package code could read accessible files and environment variables, modify project files, establish network connections, or alter application behavior. No privilege escalation beyond the invoking user's existing permissions is demonstrated by the audited files.
- Remediation
View remediation
Remediation Suggestions
- Pin each package to an exact, reviewed version, for example
@clicks-protocol/sdk@X.Y.Z. - Install the MCP server as a lockfile-pinned local dependency and invoke its local binary instead of allowing
npxto resolve the latest release dynamically. - Commit and enforce a package lockfile with integrity hashes.
- Use
npm ciin automated or reproducible environments. - Use
--ignore-scriptswhen package lifecycle scripts are not required. - Review package provenance, maintainers, published artifacts, dependency trees, and lifecycle scripts before approving version updates.
- Apply automated dependency scanning and require explicit review for lockfile changes.
- Pin each package to an exact, reviewed version, for example
