T08 · Insecure Dependencies
- Location
pyproject.toml:6- Finding
Unpinned Runtime Dependency Enables Supply-Chain Drift
- Content
View full analysis
Vulnerability Details
File Location:
pyproject.toml:6-8
Vulnerability Type: Unpinned third-party runtime dependency
Risk Level: MediumComplete Code Snippet:
toml dependencies = [ "nodriver", ]Technical Analysis
The project declares
nodriverwithout an exact version constraint and does not include a reviewed dependency lock file in the audited artifact. The installation instructions invoke the project throughuv 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
nodriverpackage 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
- An attacker compromises the upstream package distribution account, release process, or another component in the transitive dependency chain.
- The attacker publishes a malicious version that remains compatible with the unconstrained dependency declaration.
- A user or Agent executes a documented command such as
uv run python scripts/keep.py check. uvresolves and installs the newly published dependency because no audited lock file or exact version prevents the update.- Malicious package code executes in the local Python process with the invoking user's privileges.
- 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
View remediation
Remediation Suggestions
- Pin
nodriverto an explicitly reviewed version instead of accepting every available release. - Generate and commit a
uv.lockfile containing the complete transitive dependency graph. - Use locked or frozen installation modes in deployment and automation so dependency resolution fails rather than silently updating.
- Review dependency updates before regenerating the lock file.
- Where supported, validate package hashes and restrict installations to trusted package indexes.
- Run browser automation under a dedicated, minimally privileged operating-system account to limit the effect of a future dependency compromise.
- Add automated dependency vulnerability and provenance checks to the release workflow.
- Pin
