T08 · Insecure Dependencies
- Location
SKILL.md:8- Finding
Unpinned Third-Party Packages Execute with Exchange Credentials
- Content
View full analysis
Vulnerability Details
File Location:
SKILL.md:8-12andSKILL.md:123-137
Vulnerability Type: Unpinned npm dependencies and unsafe supply-chain execution
Risk Level: HighVulnerable Code
yaml install: - kind: node package: "@3rd-eye-labs/openmm" bins: [openmm]json { "mcpServers": { "openmm": { "command": "npx", "args": ["@qbtlabs/openmm-mcp"], "env": { "MEXC_API_KEY": "your_key", "MEXC_SECRET": "your_secret", "KRAKEN_API_KEY": "your_key", "KRAKEN_SECRET": "your_secret" } } } }Technical Analysis
The Skill instructs the environment to install
@3rd-eye-labs/openmmwithout an exact version. It separately invokes@qbtlabs/openmm-mcpthroughnpx, also without an exact version. Consequently, the package versions executed may change after the Skill has been reviewed.The MCP package is additionally launched with exchange API credentials in its environment. Code executed by that package can read all supplied environment variables. No malicious package content is present in the audited project, but the configuration creates a supply-chain trust boundary in which a compromised publisher account, malicious future release, registry compromise, or package ownership transfer could convert the dependency into a credential-stealing or unauthorized-trading payload.
The differing package scopes also increase the need to verify that both dependencies are intentional, authentic components maintained by trusted publishers.
Attack Path
- An attacker compromises the npm publisher, package repository, release process, or another relevant supply-chain component.
- The attacker publishes a malicious version under one of the referenced package names.
- A user installs the unpinned OpenMM package or starts the MCP server using
npx. - The package manager resolves and executes the a ...[truncated 1031 chars]
- Remediation
View remediation
Remediation Suggestions
- Pin both npm dependencies to reviewed, exact versions rather than relying on the latest matching release.
- Use a lockfile with verified integrity hashes and enforce immutable or reproducible installation behavior.
- Avoid ad hoc
npxresolution for credential-bearing services. Install a reviewed version explicitly and invoke its fixed local path. - Verify the ownership, source repository, release provenance, and maintenance status of both npm package scopes.
- Review package contents, lifecycle scripts, transitive dependencies, and network behavior before providing exchange credentials.
- Use npm provenance or signed release verification where available.
- Run the MCP service as an isolated, unprivileged account or container with restricted filesystem and network access.
- Supply only the credentials required for the selected exchange and avoid inheriting unrelated environment variables.
- Use exchange API keys with no withdrawal or transfer rights, strict IP allowlisting, minimal trading permissions, and low account exposure.
- Initially validate integrations with testnet or dedicated low-value accounts and rotate credentials after any suspected dependency compromise.
