T08 · Insecure Dependencies
- Location
.claude/skills/competitive-ops/SKILL.md:76- Finding
Unpinned Third-Party Dependencies Are Downloaded and Executed During Setup
- Content
View full analysis
Vulnerability Details
File Location:
SKILL.md:76-89;.claude/skills/competitive-ops/SKILL.md:76-89;requirements.txt:1-3
Vulnerability Type: Supply-chain exposure through unpinned npm and Python dependencies
Risk Level: MediumVulnerable Code
From
SKILL.md:76-89and the duplicated plugin entry point.claude/skills/competitive-ops/SKILL.md:76-89:bash npx playwright install chromium npx playwright --version npx -y uipro-cli init --ai claude claude mcp add tavily -- npx -y tavily-mcp python3 -m venv .venv && source .venv/bin/activate && pip install -r requirements.txtFrom
requirements.txt:1-3:text pyyaml>=6.0 python-dotenv>=1.0.0 playwright>=1.40.0Technical Analysis
The setup workflow instructs the agent to resolve and execute npm packages without exact version constraints. In particular,
npx -y uipro-cliandnpx -y tavily-mcpmay download the currently published package version and immediately execute its CLI or lifecycle code. The-yoption suppresses interactive confirmation.The Python dependencies use lower-bound constraints rather than exact versions and are installed without a lockfile or package hashes. Consequently, the code installed during a future setup can differ materially from the code that was originally reviewed.
This behavior is functionally related to setup, but it does not follow least-change supply-chain practices. The effective setup payload remains mutable after audit because package registry state determines which code is installed.
Attack Path
- An attacker compromises a referenced package, its maintainer account, or the relevant package-registry distribution channel.
- The attacker publishes a malicious or compromised version that still satisfies the unconstrained npm resolution or Python lower-bound requirement.
- A user or agent invokes the Skill's
setupmode. npx -ydownloa ...[truncated 1136 chars]
- Remediation
View remediation
Remediation Suggestions
- Pin every npm executable to an explicitly reviewed version, for example:
bash npx --yes uipro-cli@X.Y.Z init --ai claude npx --yes tavily-mcp@X.Y.Z - Prefer installing npm dependencies from a committed lockfile and invoking their local binaries rather than dynamically running registry-selected packages.
- Commit and enforce
package-lock.jsonor an equivalent lockfile with integrity metadata. - Replace Python lower bounds with reviewed exact versions:
text pyyaml==X.Y.Z python-dotenv==X.Y.Z playwright==X.Y.Z - Generate and enforce cryptographic hashes, such as with
pip-compile --generate-hashes, then install using:bash pip install --require-hashes -r requirements.txt - Request explicit user approval before downloading or executing third-party setup components; do not silently suppress confirmation.
- Validate package publisher, provenance, signatures, and expected checksums before installation.
- Run setup in an isolated virtual environment or container with restricted filesystem access, minimal credentials, and constrained network permissions.
- Add automated dependency scanning and controlled update review so pinned versions receive timely security patches without silently changing the audited payload.
- Pin every npm executable to an explicitly reviewed version, for example:
