T08 · Insecure Dependencies
- Location
requirements.txt:1- Finding
Unused and Unpinned Third-Party Dependencies Expand the Software Supply-Chain Attack Surface
- Content
View full analysis
Vulnerability Details
File Locations:
requirements.txt:1-5README.md:20-23SKILL.md:20-23SKILL.md:288-290hermes.config.yaml:7-13
Vulnerability Type: Unnecessary, unpinned third-party dependencies
Risk Level: MediumVulnerable Code
requirements.txt:1-5:text numpy>=1.21.0 matplotlib>=3.5.0 sympy>=1.10.0 pandas>=1.3.0 scipy>=1.7.0README.md:20-23:bash ### Install dependencies pip install -r requirements.txtSKILL.md:20-23:yaml install: - id: "python-deps" kind: "pip" packages: ["numpy", "matplotlib", "sympy", "pandas", "scipy"] label: "Install Python dependencies"hermes.config.yaml:7-13:yaml dependencies: - numpy - matplotlib - sympy - pandas - scipyTechnical Analysis
The package directs users and the Skill runtime to install NumPy, Matplotlib, SymPy, Pandas, and SciPy. However, all four bundled Python scripts use only Python standard-library modules; none imports or uses these five packages.
The dependency constraints specify only minimum versions and do not impose upper bounds, exact versions, lockfile resolution, or package hashes. Consequently, two installations performed at different times may resolve to different package versions and transitive dependency graphs. Package installation may also execute build-system or installation hooks with the privileges of the user running
pip.Because the dependencies are unused, this supply-chain exposure provides no functional benefit. Although the audit found no malicious package names or currently embedded malicious dependency code, a future compromise of an allowed package release, transitive dependency, or package-distribution account could affect installations without requiring any change to this repository.
Attack Path
- A user installs the Skill according to
README.md, or the Skill platform processes the installation metadata inSKILL.md. - The environment runs `pi ...[truncated 1447 chars]
- Remediation
View remediation
Remediation Suggestions
-
Remove unused dependencies
- Delete all five entries from
requirements.txt. - Remove the corresponding dependency declarations from
SKILL.mdandhermes.config.yaml. - Update the installation instructions in
README.mdand the troubleshooting instructions inSKILL.md.
- Delete all five entries from
-
Use the standard library for current functionality
- The present scripts require no third-party Python packages, so the safest dependency manifest is empty or absent.
-
Lock dependencies if future functionality requires them
- Pin exact, reviewed versions rather than using open-ended minimum constraints.
- Generate a lockfile that captures transitive dependencies.
- Require package hashes, such as through
pip install --require-hashes. - Review and regenerate the lockfile through a controlled dependency-update process.
-
Isolate installation
- Install dependencies in a dedicated virtual environment or restricted container.
- Avoid running package installation as root or an administrator.
- Do not expose unrelated secrets or credentials to the installation environment.
-
Add automated dependency controls
- Add CI checks that reject unused dependencies and unlocked production dependencies.
- Perform software-composition analysis and vulnerability scanning on every dependency update.
- Prefer prebuilt artifacts from trusted indexes and review packages that require local build execution.
-
