T08 · Insecure Dependencies
Warning
- Location
- pyproject.toml:6
- Finding
- Unpinned Runtime Dependency Enables Supply-Chain Drift## Vulnerability Details **File Location**: `pyproject.toml:6-8` **Vulnerability Type**: Unpinned third-party runtime dependency **Risk Level**: Medium **Complete Code Snippet**: ```toml dependencies = [ "nodriver", ] ``` ### Technical Analysis The project declares `nodriver` without an exact version constraint and does not include a reviewed dependency lock file in the audited artifact. The installation instructions invoke the project through `uv run`, which may resolve and install the dependency automatically on first use. Consequently, two installations performed at different times can obtain different dependency versions. A maliciously compromised or unexpectedly changed upstream release could execute code with the privileges of the user running the Skill. This is particularly sensitive because the dependency controls Chrome through CDP and runs in a process that has access to the authenticated Google Keep browser profile. No evidence was found that the current `nodriver` package is malicious or that a nonstandard package repository is used. The risk arises from unresolved dependency versions and the absence of an integrity-controlled dependency set. ### Attack Path 1. An attacker compromises the upstream package distribution account, release process, or another component in the transitive dependency chain. 2. The attacker publishes a malicious version that remains compatible with the unconstrained dependency declaration. 3. A user or Agent executes a documented command such as `uv run python scripts/keep.py check`. 4. `uv` resolves and installs the newly published dependency because no audited lock file or exact version prevents the update. 5. Malicious package code executes in the local Python process with the invoking user's privileges. 6. The compromised dependency can potentially access files available to that user, interfere with browser automation, or obtain authenticated browser data exposed to the ...[truncated 645 chars]
- Remediation
- ## Remediation Suggestions 1. Pin `nodriver` to an explicitly reviewed version instead of accepting every available release. 2. Generate and commit a `uv.lock` file containing the complete transitive dependency graph. 3. Use locked or frozen installation modes in deployment and automation so dependency resolution fails rather than silently updating. 4. Review dependency updates before regenerating the lock file. 5. Where supported, validate package hashes and restrict installations to trusted package indexes. 6. Run browser automation under a dedicated, minimally privileged operating-system account to limit the effect of a future dependency compromise. 7. Add automated dependency vulnerability and provenance checks to the release workflow.
