T08 · Insecure Dependencies
- Location
SKILL.md:11- Finding
Unpinned Third-Party npm Package Installation and Execution
- Content
View full analysis
Vulnerability Details
File Location:
SKILL.md, lines 11–20 and 51–55
Vulnerability Type: Supply-chain risk from an unpinned third-party dependency
Risk Level: MediumComplete Code Snippet:
yaml "requires": { "bins": ["grazy"], "npmPackages": ["@grazy/cli"], }, "install": [ { "id": "node", "kind": "node", "package": "@grazy/cli", "label": "Install grazy CLI (npm)", "description": "Installiert die grazy CLI global: npm install -g @grazy/cli" }, ],bash Die CLI ist bereits global installiert: `npm install -g @grazy/cli` Oder alternativ mit npx (sandbox): ```bash npx @grazy/cli eventstext ### Technical Analysis The skill declares, installs, and executes `@grazy/cli` without specifying an exact reviewed version or package-integrity hash. Consequently, the code executed by the skill may change whenever the npm registry package is updated. Both documented installation mechanisms carry supply-chain risk: - `npm install -g @grazy/cli` retrieves the registry-selected package release and can execute npm lifecycle scripts with the permissions of the invoking user. Global installation also modifies the user's wider Node.js environment. - `npx @grazy/cli events` may retrieve and immediately execute a registry release that was not part of this audit. - The provided npm and GitHub links identify the claimed project but do not cryptographically establish that the downloaded npm artifact corresponds to reviewed source code. The audited project contains only `SKILL.md`; the implementation of `@grazy/cli` is not included. Therefore, the package's lifecycle scripts, network behavior, command construction, file access, and runtime implementation could not be independently reviewed. This finding does not establish that the current package is malicious; it identifies an unsafe dependency-resolution and execution mechanis ...[truncated 1420 chars]- Remediation
View remediation
Remediation Suggestions
- Pin
@grazy/clito a specific, reviewed version in both metadata and command examples, rather than allowing npm to select the current release. - Record and validate the package integrity digest using a lockfile or an equivalent cryptographic verification mechanism.
- Vendor the reviewed implementation with the skill, or retrieve it only from a trusted immutable artifact repository.
- Review the resolved package, its transitive dependencies, and all npm lifecycle scripts before deployment.
- Avoid global installation. Install the package in an isolated project directory or disposable sandbox with minimal filesystem and network permissions.
- Disable lifecycle scripts with
--ignore-scriptswhen the verified package does not require them. - Replace unversioned
npx @grazy/cliexamples with invocation of a locally locked dependency or an explicitly pinned package version. - Run the CLI under a dedicated, unprivileged account without access to secrets, sensitive files, or privileged system interfaces.
- Establish dependency monitoring and require review before updating the pinned package or its transitive dependency graph.
- Pin
