T08 · Insecure Dependencies
- Location
SKILL.md:45- Finding
Unpinned npm Package Execution Creates a Supply-Chain Code Execution Risk
- Content
View full analysis
Vulnerability Details
File Location:
SKILL.md:45-47,README.md:45-49,README.md:56-60, andskill.yaml:25-34
Vulnerability Type: Unpinned third-party dependency execution
Risk Level: MediumThe project instructs users and MCP clients to execute
virtualsms-mcpthroughnpxwithout specifying an exact, reviewed package version or an integrity constraint.Relevant code from
SKILL.md:45-47:bash npx virtualsms-mcpRelevant code from
README.md:45-49:bash npx virtualsms-mcpRelevant code from
README.md:56-60:json { "mcpServers": { "virtualsms": { "command": "npx", "args": ["virtualsms-mcp"], "env": { "VIRTUALSMS_API_KEY": "vsms_your_key_here" } } } }Relevant code from
skill.yaml:25-34:yaml mcp_server: package: virtualsms-mcp command: npx args: - virtualsms-mcp env: VIRTUALSMS_API_KEY: ${VIRTUALSMS_API_KEY} install: npm: virtualsms-mcp homepage: https://www.npmjs.com/package/virtualsms-mcpTechnical Analysis
Invoking
npx virtualsms-mcpwithout an exact version causes package resolution to depend on mutable npm registry state. The reviewed Skill therefore does not uniquely identify the code that will execute at installation or launch time.If the package publisher account, package distribution process, or npm package itself is compromised, a malicious release could become the version resolved by
npx. Package lifecycle behavior and the MCP server entry point execute as the user running the AI client. No lockfile, package integrity hash, or exact version is supplied by this project to ensure that users receive a previously reviewed artifact.The environment configuration also makes
VIRTUALSMS_API_KEYavailable to the launched package. This access is functionally necessary for the legitimate MCP service, but it increases the impact of ...[truncated 1758 chars]- Remediation
View remediation
Remediation Suggestions
-
Pin the dependency to a reviewed exact version in every command and configuration, for example:
bash npx --yes virtualsms-mcp@1.2.3Replace
1.2.3with a version that has been independently reviewed. -
Update the MCP configuration to use the same exact version:
json { "command": "npx", "args": ["--yes", "virtualsms-mcp@1.2.3"] } -
Change
skill.yamlso its package and installation metadata identify an exact version rather than a floating package name. -
Prefer a controlled installation using a committed lockfile and npm integrity metadata. Deploy from the locked dependency tree rather than resolving the latest registry version every time the MCP server starts.
-
Document the expected npm publisher, source repository, release-signing process, and package checksum so operators can verify the artifact before execution.
-
Run the MCP server in a sandbox or container with minimal filesystem access, restricted outbound network access, and no unrelated credentials in its environment.
-
Scope and rotate the VirtualSMS API key. Revoke it promptly if dependency compromise is suspected, and monitor account transactions and orders for unauthorized activity.
-
Establish a controlled update process in which new dependency versions are reviewed and tested before the pinned version is changed.
-
