T08 · Insecure Dependencies
- Location
server.js:19- Finding
Unpinned Third-Party Package Is Resolved and Executed at Runtime
- Content
View full analysis
Vulnerability Details
File Location:
server.js:19-28
Vulnerability Type: Unpinned runtime dependency execution
Risk Level: HighVulnerable Code
js // UV path check or command let uvxCmd = 'uvx'; const localBin = path.join(process.env.USERPROFILE, '.local', 'bin', 'uvx.exe'); if (fs.existsSync(localBin)) { uvxCmd = localBin; } this.process = spawn(uvxCmd, ['blender-mcp'], { stdio: ['pipe', 'pipe', 'pipe'], shell: process.platform === 'win32' });Technical Analysis
The bridge invokes
uvxwith the bare package nameblender-mcp. No package version, cryptographic hash, controlled package index, or verified local environment is specified. Consequently, the code that runs can change independently of the reviewed Skill.The npm lockfile does not mitigate this issue because it only controls the JavaScript dependency tree. It does not pin or verify the Python package resolved by
uvx.Runtime package resolution creates a supply-chain trust boundary at every fresh installation or environment resolution. If the package, one of its transitive dependencies, the selected package registry, or the local package-resolution configuration is compromised, attacker-controlled code can execute with the privileges of the bridge process.
Attack Path
- An attacker compromises the
blender-mcppackage, one of its transitive dependencies, or a package source selected by the localuvxconfiguration. - A user or agent invokes the Skill in an environment where the affected package version has not already been securely pinned and cached.
server.jsrunsuvx blender-mcp.uvxresolves and starts the attacker-controlled or compromised package.- The malicious package executes with the operating-system privileges and environment access of the Skill process.
- It can potentially read accessible files and environment variables, make network connections, alter Blender data, ...[truncated 620 chars]
- An attacker compromises the
- Remediation
View remediation
Remediation Suggestions
- Pin
blender-mcpto a specific, reviewed version rather than resolving a bare package name. - Lock all transitive Python dependencies and verify package hashes.
- Install dependencies during a controlled deployment phase instead of resolving and executing them dynamically at runtime.
- Configure an explicit trusted package index and prevent untrusted environment configuration from overriding package sources.
- Invoke a verified executable from an application-owned virtual environment using an absolute path.
- Verify the executable or environment against an expected digest before startup.
- Run the MCP process in a sandbox or container with restricted file-system, network, environment-variable, and operating-system access.
- Maintain a software bill of materials and regularly review pinned packages for disclosed vulnerabilities.
- Pin
