T08 · Insecure Dependencies
- Location
SKILL.md:16- Finding
Unpinned npm Packages Are Downloaded and Executed
- Content
View full analysis
Vulnerability Details
File Location:
SKILL.md:16-18,SKILL.md:24-30,SKILL.md:225-227; repeated installation guidance atREADME.md:23-25
Vulnerability Type: Supply-chain risk from mutable, unpinned npm dependencies
Risk Level: MediumVulnerable Code
SKILL.md:16-18:bash npx @rotifer/playground --versionSKILL.md:24-30:json { "mcpServers": { "rotifer": { "command": "npx", "args": ["@rotifer/mcp-server"] } } }SKILL.md:225-227:text - CLI is installed: `npm i -g @rotifer/playground`, or invoke it as `npx @rotifer/playground`README.md:23-25:text **Setup it does need**: a Rotifer workspace (`rotifer.json`), the CLI (`npm i -g @rotifer/playground`), and — for Native Genes — the TS→WASM toolchain that `rotifer doctor` checks.Technical Analysis
The documented
npxandnpm installcommands identify packages only by mutable npm names. They do not specify an exact reviewed version, lock the dependency graph, or provide an integrity value. Consequently, the code executed when a user follows these instructions is determined by the npm registry at execution time rather than by the audited Skill package.The MCP configuration is especially sensitive because it starts
@rotifer/mcp-serveras a local server throughnpx. If the package is absent from the local npm cache,npxcan retrieve it from the registry and immediately execute it. Installing@rotifer/playgroundglobally similarly permits package installation scripts and later CLI runtime code to execute with the invoking user's operating-system privileges.The package names are consistent with the project's documented purpose, and the audit found no evidence that they are currently malicious. The vulnerability is the absence of dependency pinning and integrity enforcement, which creates a mutable remote supply-chain execution path.
Atta
...[truncated 1575 chars]
- Remediation
View remediation
Remediation Suggestions
- Pin every externally executed npm package to an exact reviewed version:
bash npx --yes @rotifer/playground@1.2.1 --version npx --yes @rotifer/mcp-server@<reviewed-exact-version> - Pin the MCP configuration to the same reviewed exact version rather than using the package's mutable latest release.
- Prefer a project-local dependency installation backed by a committed lockfile over
npm i -g. Usenpm ciso resolution fails when the lockfile and manifest disagree. - Verify npm package provenance, signatures, and integrity metadata before execution. Preserve expected integrity hashes in the controlled dependency workflow where practical.
- Review direct and transitive dependency changes before upgrading pinned versions.
- Require explicit user confirmation before the first package download or execution, clearly identifying the package, exact version, source registry, and requested capabilities.
- Disable npm lifecycle scripts during installation where compatible, and run the CLI in a restricted environment with only the filesystem and network access required for the evaluation.
- Avoid privileged execution and global installation. Use a dedicated low-privilege account or sandbox for evaluation workloads.
- Pin every externally executed npm package to an exact reviewed version:
