T08 · Insecure Dependencies
- Location
SKILL.md:49- Finding
Unpinned Third-Party Package Installation with System Package Protection Bypass
- Content
View full analysis
Vulnerability Details
File Location:
SKILL.md, lines 12–18 and 49–55
Vulnerability Type: Unpinned and insufficiently verified third-party dependency installation
Risk Level: MediumVulnerable Code
Lines 12–18:
yaml requires: bins: - pip install: - id: pip-navil kind: pip package: navil bins: [navil]Lines 49–55:
bash navil --versionIf navil is not installed, install it first:
bash pip install navil --break-system-packages 2>/dev/null || pip install navilTechnical Analysis
The skill directs users to install the
navilpackage from PyPI without specifying an exact version or cryptographic integrity hash. Consequently, the installed artifact and its transitive dependencies are determined dynamically at installation time and may differ from those reviewed when the skill was published.Python packages can execute installation or build-related code, and their installed modules execute with the privileges of the user running them. If the package publisher, distribution account, package artifact, or a transitive dependency is compromised, following this instruction could cause attacker-controlled code to execute locally.
The
--break-system-packagesoption bypasses protections intended to preventpipfrom modifying an externally managed Python environment. This increases the possibility of dependency conflicts and system Python corruption. Redirecting standard error to/dev/nullalso hides diagnostics from the first installation attempt, reducing the user's ability to identify package-resolution, integrity, or environment-management problems.The project metadata references a GitHub repository, but the installation command does not cryptographically establish that the retrieved PyPI artifact corresponds to reviewed source from that repository.
Attack Path
- An attacker compromises the PyPI publisher account, an upstream dependency, or a subsequently published package release. 2 ...[truncated 1393 chars]
- Remediation
View remediation
Remediation Suggestions
- Pin the dependency to an audited exact version, for example
navil==X.Y.Z, after verifying that release. - Publish and verify cryptographic hashes for the package and all transitive dependencies, using a locked requirements file and
pip install --require-hashes. - Install the command in an isolated environment with
pipxor a dedicated virtual environment rather than modifying the system-managed Python installation. - Remove
--break-system-packagesfrom the recommended command. If system-wide installation is genuinely required, explain the risks and require explicit user approval. - Do not suppress standard error with
2>/dev/null; preserve installation diagnostics so users can detect failures and suspicious package-resolution behavior. - Bind reviewed source to distributed artifacts through signed releases, provenance attestations, or documented package hashes.
- Verify and document that the PyPI package publisher and release artifact correspond to the repository identified in
skill.jsonand theSKILL.mdmetadata. - Regularly audit and lock transitive dependencies to reduce exposure to compromised or unexpectedly changed upstream packages.
- Pin the dependency to an audited exact version, for example
