T08 · Insecure Dependencies
Warning
- Location
- README.md:19
- Finding
- Unpinned Third-Party Dependencies and Browser Artifacts<![CDATA[ ## Vulnerability Details **File Location**: `README.md:19-20` (duplicated at `README.md:64-65`) **Vulnerability Type**: Uncontrolled third-party dependency installation **Risk Level**: Medium ### Vulnerable Code ```bash pip install scrapling playwright curl_cffi patchright msgspec browserforge playwright install chromium ``` ### Technical Analysis The installation instructions retrieve six third-party Python packages without version constraints, cryptographic hashes, or a lockfile. Consequently, package resolution depends on whichever releases the configured Python package index serves at installation time. The subsequent Playwright command also downloads and installs a Chromium browser artifact without a project-controlled integrity policy. The repository does not provide a hash-locked requirements file or other reproducible dependency manifest. This creates a supply-chain exposure. If a package release, maintainer account, configured package index, transitive dependency, or browser distribution channel is compromised, following the documented installation procedure could introduce attacker-controlled code. Source distributions may execute build logic during installation, while malicious wheels or dependencies can execute when imported or invoked by the Skill. The audit found no evidence that the currently named dependencies are malicious. The vulnerability is the lack of controls ensuring that users install the same reviewed artifacts over time. ### Attack Path 1. An attacker compromises an upstream dependency, maintainer account, package index, transitive dependency, or relevant browser artifact distribution channel. 2. The attacker publishes or serves a malicious release under one of the dependency names used by the project. 3. A user follows the README instructions and runs the unpinned `pip install` command. 4. Package resolution selects the attacker-controlled release because no approved version or hash is enforced. 5. Malicious code ...[truncated 819 chars]
- Remediation
- <![CDATA[ ## Remediation Suggestions 1. Create a reviewed dependency manifest with exact versions for every direct dependency. 2. Generate a transitive lockfile containing cryptographic hashes, such as a hash-locked `requirements.txt`. 3. Install with hash verification enabled: ```bash python -m pip install --require-hashes -r requirements.txt ``` 4. Pin and verify Playwright and its compatible Chromium revision. Document the expected browser artifact source and integrity verification process. 5. Configure trusted package indexes explicitly and prohibit unreviewed extra indexes to reduce dependency-confusion risk. 6. Perform installation inside a dedicated virtual environment, container, or other least-privilege sandbox. Do not install the dependencies as an administrator or root user. 7. Add automated dependency scanning and controlled update review. Regenerate hashes only after reviewing new package and browser releases. 8. Consolidate the duplicated installation instructions so both language sections reference the same secured, reproducible installation process. ]]>
