T08 · Insecure Dependencies
Warning
- Location
- SKILL.md:713
- Finding
- Unpinned Build Tool Installation Creates Supply-Chain Risk## Vulnerability Details **File Location**: `SKILL.md:713` and `SKILL.md:816` **Vulnerability Type**: Unpinned third-party dependency installation **Risk Level**: Medium ### Vulnerable Code Docker build template at `SKILL.md:713`: ```dockerfile RUN pip install --no-cache-dir uv ``` GitHub Actions template at `SKILL.md:816`: ```yaml - run: pip install uv && uv sync ``` ### Technical Analysis Both templates install `uv` without an exact version constraint or package hash. Consequently, the installed package is determined by the package index at build time rather than by a reviewed and reproducible dependency definition. This allows build behavior to change without any corresponding source-code change. If a future release is defective or malicious, or if the package index or publisher account is compromised, Docker builds and CI jobs based on these templates will install and execute the affected package. The risk is amplified in CI because installation commands execute automatically and commonly have access to repository content, build artifacts, and workflow-scoped credentials. Although `uv sync --frozen` protects application dependency resolution when a valid lockfile is present, it does not protect the preceding unpinned installation of the `uv` executable itself. ### Attack Path 1. A project adopts the supplied Dockerfile or GitHub Actions template. 2. A malicious or compromised release of `uv` becomes the version resolved by `pip install uv`. 3. A developer starts a Docker build, or the CI workflow runs after a push or pull request. 4. `pip` downloads and installs the unreviewed release. 5. Package installation or subsequent execution of `uv sync` runs attacker-controlled behavior in the build or CI environment. 6. Depending on environment permissions, that behavior may read source code, alter build artifacts, access available workflow credentials, or compromise the resulting container image. ...[truncated 674 chars]
- Remediation
- ## Remediation Suggestions 1. Pin `uv` to a reviewed exact version in both templates, for example: ```dockerfile RUN pip install --no-cache-dir "uv==<reviewed-version>" ``` 2. Where supported, download from a controlled artifact repository and verify an expected cryptographic checksum. 3. Use pip hash checking with a locked bootstrap requirements file rather than resolving the installer dynamically. 4. Keep `uv.lock` under version control and continue using `uv sync --frozen`. 5. Run automated dependency updates through reviewed pull requests rather than automatically consuming the latest release. 6. Restrict CI token permissions and avoid exposing deployment secrets to dependency-installation jobs. 7. Apply the same pinned version consistently at both `SKILL.md:713` and `SKILL.md:816`.
