T08 · Insecure Dependencies
- Location
requirements.txt:1- Finding
Unpinned Third-Party Dependencies Create a Supply-Chain Risk
- Content
View full analysis
Vulnerability Details
File Location:
requirements.txt:1-2; related installation guidance atSKILL.md:15-22and dynamic import atsrc/break_watch/tdx_client.py:124-130
Vulnerability Type: Unpinned and unhashed third-party dependencies
Risk Level: MediumVulnerable Code
requirements.txt:1-2text pytdx pyinstallerSKILL.md:15-22bash C:\Users\xfb\.workbuddy\binaries\python\versions\3.13.12\python.exe -m venv C:\Users\xfb\.workbuddy\binaries\python\envs\default C:\Users\xfb\.workbuddy\binaries\python\envs\default\Scripts\pip install pytdxsrc/break_watch/tdx_client.py:124-130python @staticmethod def _create_api() -> Any: try: from pytdx.hq import TdxHq_API except ImportError as exc: raise TdxClientError( "pytdx is not installed. Run: .\\venv\\Scripts\\python.exe -m pip install -r requirements.txt" ) from excTechnical Analysis
Both dependencies are specified without exact versions or package hashes. Consequently, installation resolves to whatever release the configured package index serves at installation time. The reviewed source code therefore does not fully define the code that will execute in the user's environment.
Python package installation can execute package build logic, while imported dependencies execute with the same privileges as the scanner. A compromised package release, compromised package-index account, dependency substitution through an untrusted index, or an incompatible future release could therefore alter the scanner's network and filesystem behavior.
pyinstalleris included in the runtime requirements even though it is not needed for the documented single-scan workflow. This unnecessarily expands the dependency and transitive supply-chain surface.Attack Path
- An attacker compromises a future release, maintainer account, distribution channel, or package index used ...[truncated 1058 chars]
- Remediation
View remediation
Remediation Suggestions
-
Pin every direct dependency to a reviewed exact version, such as
package==x.y.z. -
Generate a locked requirements file containing hashes for all direct and transitive dependencies.
-
Install with hash verification, for example:
bash python -m pip install --require-hashes -r requirements.lock -
Remove
pyinstallerfrom runtime requirements. Place it in a separate build-only dependency file if executable packaging is required. -
Configure installation to use a trusted package index and prohibit unintended supplemental indexes.
-
Periodically scan the lock file with software-composition analysis tools and review dependency updates before refreshing pins.
-
Build and test dependencies in an isolated, least-privileged environment.
-
Document the exact supported Python and dependency versions so users do not need to install an unspecified latest release.
-
