T08 · Insecure Dependencies
- Location
SKILL.md:15- Finding
Unpinned mcporter Dependency Creates Supply-Chain Execution Risk
- Content
View full analysis
Vulnerability Details
File Location:
SKILL.md:15-20
Vulnerability Type: Unpinned automatically installed npm dependency
Risk Level: MediumVulnerable Code
yaml install: - id: node kind: node package: mcporter bins: - mcporterThe dependency documentation at
SKILL.md:46explicitly confirms that this resolves the unpinned latest release:markdown - **`mcporter`** ([github.com/steipete/mcporter](https://github.com/steipete/mcporter)) — MCP CLI used by the shared wrapper once a QuickBooks MCP manifest exists. Auto-installed via `npm install -g --ignore-scripts mcporter` if missing on PATH (see `install` spec in frontmatter). The install spec uses unpinned `mcporter` (npm `latest`); operators with strict supply-chain controls should override the install to pin a specific version (e.g. `mcporter@<version>`).Technical Analysis
The installation specification names
mcporterwithout an exact version or integrity constraint. Consequently, installation may resolve to whichever release is tagged aslatestat that time rather than to the release reviewed with this Skill.Disabling npm lifecycle scripts with
--ignore-scriptsreduces install-time exposure but does not remove the risk. The installed package's executable is subsequently launched byscripts/invoke.sh:17:bash exec env MCPORTER_CONFIG="${CONFIG}" mcporter "$@"If the npm package, publisher account, or latest release were compromised, attacker-controlled code in the executable would run with the privileges of the Skill's runtime user. This is a supply-chain risk rather than evidence that the current package is malicious.
Attack Path
- An attacker compromises the upstream npm package, a maintainer account, or a release assigned the
latesttag. - The runtime cannot find
mcporterand automatically installs the dependency without an exact version. - npm resolves a ...[truncated 1246 chars]
- An attacker compromises the upstream npm package, a maintainer account, or a release assigned the
- Remediation
View remediation
Remediation Suggestions
- Pin
mcporterto a specific, reviewed version, such asmcporter@X.Y.Z, instead of resolving the mutablelatesttag. - Enforce npm integrity verification through an approved lockfile or expected package digest.
- Prefer a project-local installation over a global installation to reduce scope and improve reproducibility.
- Retrieve packages only from an explicitly configured, trusted registry; consider an internal artifact mirror for controlled deployments.
- Continue using
--ignore-scripts, but do not treat it as a substitute for version and integrity pinning. - Review dependency updates before changing the pinned version and automate vulnerability and provenance checks.
- Run the wrapper under a dedicated least-privileged account with access limited to the required QuickBooks credentials and files.
- Pin
