T08 · Insecure Dependencies
Unpinned and Unverified Third-Party Dependencies
SKILL.md:53Vulnerability Details
File Location: SKILL.md, lines 53-68
Vulnerability Type: Unverified executable download and unpinned dependencies
Risk Level: High
The installation instructions download a mutable third-party executable and install Python packages without pinning versions or verifying cryptographic integrity.
# Example for Linux amd64
curl -L https://github.com/ddvk/rmapi/releases/latest/download/rmapi-linux-amd64 -o ~/bin/rmapi
chmod +x ~/bin/rmapi
pip install --user rmc cairosvg pillow
Technical Analysis
The rmapi executable is obtained through a mutable latest release URL. The downloaded file is made executable without validating a trusted checksum or digital signature. Consequently, the executable retrieved when a user installs the Skill can differ from the artifact that existed when the Skill was audited.
The Python dependencies are also installed without exact version constraints, hashes, or a lock file. Installation can therefore resolve to newly released package versions and transitive dependencies that have not been reviewed. Compromise of an upstream release, package registry account, repository, distribution channel, or dependency could result in attacker-controlled code being installed.
These commands run under the user's account. Although they do not request administrative privileges, the dependencies can access all files, credentials, and network resources available to that account.
Attack Path
- An attacker compromises an upstream release, maintainer account, package, or transitive dependency used by
rmapi,rmc,cairosvg, orpillow. - The attacker publishes a malicious artifact under the mutable latest release or an unconstrained package version.
- A user follows the documented installation commands.
- The malicious artifact is downloaded without checksum or signature verification.
- The user executes
rmapi, or Python loads ...[truncated 903 chars]
Remediation
Remediation Suggestions
- Replace the mutable
latestURL with an immutable, explicitly versioned release URL. - Publish the expected SHA-256 digest and verify it before granting execute permission:
bash echo "EXPECTED_SHA256 rmapi-linux-amd64" | sha256sum --check - - Prefer verification using a trusted maintainer signature or provenance mechanism where available.
- Pin all Python dependencies and their transitive dependencies to reviewed versions.
- Use a lock file with cryptographic hashes, such as a hash-locked requirements file installed with:
bash python3 -m pip install --require-hashes -r requirements.txt - Install Python packages in a dedicated virtual environment rather than the user's shared package directory.
- Document the exact supported versions and establish a controlled process for reviewing and updating dependency pins.
- Advise users to verify the source and integrity of downloaded artifacts before execution.
