T08 · Insecure Dependencies
- Location
SKILL.md:10- Finding
Unpinned Third-Party Dependency Installation
- Content
View full analysis
Vulnerability Details
File Location:
SKILL.md, lines 10–22 and 48–59
Vulnerability Type: Unpinned npm and PyPI dependencies installed from mutable upstream sources
Risk Level: MediumVulnerable Code
yaml "requires": { "bins": ["python3", "node", "npm", "npx"] }, "install": [ { "id": "playwright-npm", "kind": "exec", "command": "npm install -g playwright && npx playwright install chromium", "label": "Install Playwright + Chromium for browser evidence capture" }, { "id": "python-reporting-deps", "kind": "exec", "command": "python3 -m pip install --user requests beautifulsoup4 lxml pillow reportlab weasyprint pypdf", "label": "Install Python scraping/reporting dependencies" } ]The installation instructions are repeated in the skill body:
bash npm install -g playwright npx playwright install chromiumbash python3 -m pip install --user requests beautifulsoup4 lxml pillow reportlab weasyprint pypdfTechnical Analysis
The skill installs Playwright, Chromium, and several Python packages without exact version constraints, lockfiles, package hashes, or artifact-integrity checks. Consequently, the content installed during one execution may differ from the content reviewed or installed during another execution.
The npm command also performs a global installation. This broadens the affected environment compared with a project-local installation and may alter a shared executable resolution path. The Python command installs packages into the invoking user's package directory, where they can subsequently be imported by other user-level Python applications.
Although the audited file contains no malicious package names or embedded malicious code, this installation pattern creates a supply-chain exposure. A compromised upstream release, transitive dependency, package-maintainer account, or registry response could introduce attacker-controlled code. Package i ...[truncated 1642 chars]
- Remediation
View remediation
Remediation Suggestions
- Pin every direct dependency to an exact reviewed version. Avoid floating versions and broad version ranges.
- Replace the global Playwright installation with a project-local dependency managed through a committed
package-lock.jsonor equivalent lockfile:bash npm ci npx playwright install chromium - Configure npm to require lockfile integrity and use an approved registry. Review lockfile changes before installation.
- Install Python dependencies in a dedicated virtual environment rather than the user's shared package directory.
- Maintain a fully resolved, hash-locked requirements file and require hash verification:
bash python3 -m venv .venv .venv/bin/python -m pip install --require-hashes -r requirements.txt - Pin the Playwright-managed Chromium revision through the reviewed Playwright version and verify downloaded browser artifacts using trusted checksums or controlled mirrors where operationally possible.
- Disable or tightly control package installation scripts where compatible with the dependencies, and perform installation in a sandboxed environment with minimal filesystem, network, and credential access.
- Add automated dependency scanning, provenance verification, and periodic review of direct and transitive dependencies.
- Avoid running setup commands as root or with elevated privileges.
