T08 · Insecure Dependencies
- Location
SKILL.md:713- Finding
Unpinned Build Tool Installation Creates Supply-Chain Risk
- Content
View full analysis
Vulnerability Details
File Location:
SKILL.md:713andSKILL.md:816
Vulnerability Type: Unpinned third-party dependency installation
Risk Level: MediumVulnerable Code
Docker build template at
SKILL.md:713:dockerfile RUN pip install --no-cache-dir uvGitHub Actions template at
SKILL.md:816:yaml - run: pip install uv && uv syncTechnical Analysis
Both templates install
uvwithout 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 --frozenprotects application dependency resolution when a valid lockfile is present, it does not protect the preceding unpinned installation of theuvexecutable itself.Attack Path
- A project adopts the supplied Dockerfile or GitHub Actions template.
- A malicious or compromised release of
uvbecomes the version resolved bypip install uv. - A developer starts a Docker build, or the CI workflow runs after a push or pull request.
pipdownloads and installs the unreviewed release.- Package installation or subsequent execution of
uv syncruns attacker-controlled behavior in the build or CI environment. - 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
View remediation
Remediation Suggestions
- Pin
uvto a reviewed exact version in both templates, for example:dockerfile RUN pip install --no-cache-dir "uv==<reviewed-version>" - Where supported, download from a controlled artifact repository and verify an expected cryptographic checksum.
- Use pip hash checking with a locked bootstrap requirements file rather than resolving the installer dynamically.
- Keep
uv.lockunder version control and continue usinguv sync --frozen. - Run automated dependency updates through reviewed pull requests rather than automatically consuming the latest release.
- Restrict CI token permissions and avoid exposing deployment secrets to dependency-installation jobs.
- Apply the same pinned version consistently at both
SKILL.md:713andSKILL.md:816.
- Pin
