T08 · Insecure Dependencies
- Location
SKILL.md:55- Finding
Unpinned Third-Party Package Download and Execution
- Content
View full analysis
"The **ai-seo MCP** (`@automatelab/ai-seo-mcp`) is not connected. Step 5 can run a programmatic citation-worthiness and schema score on your draft in addition to the manual audit. To install it: > ``` > npx -y @automatelab/ai-seo-mcp > ``` > then register it in your MCP config. See the [ai-seo-mcp README](https://github.com/AutomateLab-tech/ai-seo-mcp) for one-line configs for Claude Code, Cursor, and Cline. Type **skip** to continue with the manual-only audit." ``` Related unpinned Python dependency installation appears at `SKILL.md:611`: ```bash pip install requests pyjwt ``` ### Technical Analysis The Skill instructs the user or Agent to download and execute the currently resolved version of `@automatelab/ai-seo-mcp` using `npx -y`. No exact version, lockfile, package integrity hash, or reviewed artifact is specified. The `-y` option also suppresses the normal installation confirmation. An npm package may execute code through its command entry point and package lifecycle behavior. Consequently, the effective code executed by this instruction can change after the Skill itself has been reviewed. The unpinned pip dependencies present a similar reproducibility and supply-chain weakness, although the `npx` command creates the clearest direct execution path. There is no evidence that the named packages are currently malicious. The vulnerability is that the Skill trusts mutable registry content and recommends immediate execution without version or integrity controls. ### Attack Path 1. An attacker compromises the publisher account, package repository, dependency chain, or registry delivery path for the referenced npm package. 2. The attacker publishes a malicious version that remains compatible with the unversioned package name. 3. A user follows the Skill’s preflight ...[truncated 1040 chars]- Remediation
View remediation
``` 2. Prefer installation through a lockfile-backed project rather than ad hoc `npx` execution. 3. Record and verify package integrity information or use a trusted internal package mirror. 4. Remove automatic `-y` behavior and require explicit user approval before downloading or executing third-party code. 5. Pin Python dependencies to reviewed versions and hashes, for example through a requirements lockfile: ```text requests== --hash=sha256: PyJWT== --hash=sha256: ``` 6. Run optional auditing tools in a restricted environment without CMS credentials, unrelated filesystem access, or broad network permissions. 7. Document the exact package provenance and review process so users can verify the dependency before enabling it. ]]>
