T08 · Insecure Dependencies
- Location
README.md:39- Finding
Unpinned npx Installation Command Creates a Mutable Supply-Chain Execution Path
- Content
View full analysis
Vulnerability Details
File Location:
README.md, line 39
Vulnerability Type: Unpinned third-party installer and Skill source
Risk Level: MediumVulnerable Code
markdown 1. Install the skill: `npx skills add AntreasAntoniou/visual-qa`.Technical Analysis
The documented installation command invokes the
skillsnpm package throughnpxwithout specifying a version or integrity constraint. Depending on the local environment and npm configuration,npxmay download and execute the currently published version of that package. The command also identifies the Skill by a mutable repository name without pinning a release tag or commit.Consequently, the effective installation code and installed Skill contents can change after this repository has been audited. Compromise of the npm package, its publisher account, the package registry resolution path, or the referenced repository could introduce code that was not present during this audit.
This is a supply-chain risk rather than evidence that the current repository contains malicious code. The audited Python validator itself has no third-party dependencies and no network or command-execution behavior.
Attack Path
- An attacker compromises the npm package, its maintainer account, or another component governing resolution of the unpinned
skillspackage. - The attacker publishes a malicious version under the version range implicitly selected by
npx. - Alternatively, the attacker compromises the mutable
AntreasAntoniou/visual-qasource and modifies the content retrieved by the installer. - A user follows the Quick Start instructions and runs
npx skills add AntreasAntoniou/visual-qa. npxretrieves and executes the attacker-controlled installer, or the installer retrieves attacker-controlled Skill content.- The malicious installation process executes with the invoking user's privileges.
Impact Assessment
Successful explo ...[truncated 576 chars]
- An attacker compromises the npm package, its maintainer account, or another component governing resolution of the unpinned
- Remediation
View remediation
Remediation Suggestions
- Pin the
skillsnpm package to a reviewed, immutable version, for example by documenting an explicit package version rather than relying on the latest registry release. - Pin the installed Skill to an immutable release or full commit digest instead of a mutable repository reference.
- Publish and document expected integrity hashes or signed release provenance where supported.
- Recommend installation with npm lifecycle-script protections where compatible, and document whether the installer executes package lifecycle hooks.
- In CI or managed environments, use an approved lockfile, internal registry mirror, or allowlisted package source.
- Document the exact trusted publisher, package name, version, repository commit, and verification procedure so users can confirm provenance before execution.
- Periodically review pinned versions and update them through an explicit security review rather than automatic latest-version resolution.
- Pin the
