T08 · Insecure Dependencies
- Location
SKILL.md:43- Finding
Unpinned Executable Dependencies and Unverified Browser Artifacts
- Content
View full analysis
Vulnerability Details
File Location:
SKILL.md:43-45,SKILL.md:97-100; duplicated inREADME.md:30-36
Vulnerability Type: Third-party supply-chain exposure
Risk Level: MediumVulnerable Code
bash npm install playwright@1.60.0 camoufox-js # First run auto-fetches the camoufox Firefox binary into node_modulesbash python3 -m pip install "camoufox[geoip]" playwright==1.60.0 # Fetch the camoufox browser binary (~700 MB) + uBlock Origin addon python3 -m camoufox fetchTechnical Analysis
Although Playwright is pinned to version
1.60.0, thecamoufox-jsandcamoufoxpackages are not pinned to exact versions. Their transitive dependency trees are also not locked in the documented installation process.The Node package automatically retrieves a Firefox artifact on first use, while the Python workflow explicitly invokes
camoufox fetch. The instructions do not require verification of the downloaded browser or extension using an immutable checksum or publisher signature.This makes the effective executable content dependent on mutable registry packages and remote artifacts available at installation time. Package installation can execute lifecycle or build logic, and the fetched browser is subsequently executed locally. This is a supply-chain weakness rather than evidence that the currently named dependencies are malicious.
Attack Path
- An attacker compromises a relevant package publisher, registry account, transitive dependency, or artifact distribution channel.
- The attacker publishes a modified release or replaces a remotely downloaded artifact.
- A user follows the documented unpinned installation or fetch command.
- The package manager installs the attacker-controlled release, or Camoufox retrieves the substituted browser artifact.
- Installation hooks, build logic, imported package code, or the downloaded browser executes under the installing user's accou ...[truncated 890 chars]
- Remediation
View remediation
Remediation Suggestions
- Pin
camoufox-jsandcamoufoxto reviewed, exact versions rather than version ranges. - Commit and enforce lock files for Node dependencies, using deterministic installation such as
npm ci. - Use a Python constraints or lock file containing hashes for all direct and transitive packages.
- Document the expected source, version, checksum, and signature for downloaded Firefox and extension artifacts.
- Verify downloaded artifacts before execution and fail closed if verification is unavailable or unsuccessful.
- Disable or review package lifecycle scripts where feasible.
- Perform installation in a sandbox, container, or restricted account without access to production credentials.
- Periodically review pinned versions and update them through an explicit, audited dependency-update process.
- Pin
