T08 · Insecure Dependencies
- Location
scripts/package.json:5- Finding
Unpinned Third-Party Dependency Allows Unreviewed Supply-Chain Changes
- Content
View full analysis
Vulnerability Details
File Location:
scripts/package.json:5-6; related installation instruction atSKILL.md:24
Vulnerability Type: Unpinned npm dependency and missing lockfile
Risk Level: MediumVulnerable Code
scripts/package.json:5-6:json "dependencies": { "wyze-node": "^2.12.2" }SKILL.md:24:text 1. `npm install --prefix "{baseDir}/scripts" wyze-node`Technical Analysis
The package manifest permits npm to resolve any compatible
wyze-noderelease under the caret range rather than an exact audited version. The documented setup command is even less restrictive because it installswyze-nodewithout specifying any version. The project also contains no package lockfile that pins the complete transitive dependency graph and associated integrity hashes.Consequently, following the documented installation procedure can retrieve package contents that differ from those reviewed during this audit. npm packages and their transitive dependencies may execute lifecycle scripts during installation, while the installed
wyze-nodepackage is later loaded directly byscripts/vacuum. A compromised maintainer account, malicious compatible release, or compromised transitive dependency could therefore introduce arbitrary code without requiring changes to this repository.Attack Path
- An attacker compromises the
wyze-nodepublishing account, an allowed transitive dependency, or another component selected by npm dependency resolution. - The attacker publishes a malicious release compatible with
^2.12.2, or a release selected by the unversioned command inSKILL.md. - A user follows the setup instructions and runs
npm install --prefix "{baseDir}/scripts" wyze-node. - npm downloads the changed dependency graph and may execute malicious package lifecycle scripts with the user's permissions.
- Alternatively, the malicious package executes when
scripts/vacuuml ...[truncated 795 chars]
- An attacker compromises the
- Remediation
View remediation
Remediation Suggestions
- Replace the caret range with an exact, reviewed dependency version, for example:
json "wyze-node": "2.12.2" - Generate and commit
scripts/package-lock.jsonso that all transitive versions and integrity hashes are fixed. - Change the documented installation process to use the committed manifest and lockfile:
bash npm ci --prefix "{baseDir}/scripts" - Do not instruct users to install
wyze-nodewithout an explicit version. - Review dependency lifecycle scripts and the transitive dependency tree before accepting upgrades.
- Use automated dependency scanning and require manual review for lockfile changes.
- Where operationally feasible, disable installation scripts with
--ignore-scriptsafter confirming that the audited dependency does not require them. - Run the skill under a least-privileged account and restrict permissions on the Wyze environment file and token directory.
- Replace the caret range with an exact, reviewed dependency version, for example:
