T08 · Insecure Dependencies
Warning
- Location
- SKILL.md:5
- Finding
- Unpinned Third-Party CLI Installed Globally## Vulnerability Details **File Location**: `SKILL.md`, lines 5–15 **Vulnerability Type**: Supply-chain exposure through an unpinned globally installed npm dependency **Risk Level**: Medium ```yaml metadata: {"clawdbot":{"requires":{"bins":["ppls"],"env":["PPLS_HOSTNAME","PPLS_TOKEN"]},"install":[{"id":"node","kind":"node","package":"@nickchristensen/ppls","bins":["ppls"],"label":"Install ppls CLI (npm/bun)"}]}} --- # Paperless-NGX CLI Search and manage documents in Paperless-NGX using `ppls`. ## Setup ```bash npm install -g @nickchristensen/ppls ``` ### Technical Analysis The Skill requires installation and execution of `@nickchristensen/ppls` without pinning an audited version or specifying an integrity hash. The use of `npm install -g` installs the package globally and may execute npm lifecycle scripts with the privileges of the installing user. Because the package version is not constrained, the code executed by future installations can differ from the version originally reviewed. A compromised maintainer account, malicious package release, or upstream dependency compromise could introduce arbitrary code. The installed CLI subsequently operates in an environment that contains `PPLS_HOSTNAME` and `PPLS_TOKEN`, giving compromised code an opportunity to access Paperless credentials and document data. No evidence in the reviewed project establishes that the current package is malicious. The vulnerability is the absence of dependency pinning, integrity verification, and isolation around a security-sensitive third-party executable. ### Attack Path 1. An attacker compromises the npm package, a maintainer account, or a transitive dependency and publishes a malicious release. 2. A user or automated Agent follows the Skill instructions and runs `npm install -g @nickchristensen/ppls`. 3. npm resolves the unconstrained package to the attacker-controlled release. 4. Malicious package code executes during installation t ...[truncated 928 chars]
- Remediation
- ## Remediation Suggestions - Pin the dependency to an exact version that has undergone security review, rather than allowing npm to select the latest release. - Lock and verify the complete transitive dependency graph using an appropriate lockfile. - Verify package provenance and integrity using registry signatures, trusted publishing attestations, and cryptographic integrity hashes where supported. - Avoid global installation. Run the CLI from a project-local, locked dependency or an isolated container with narrowly scoped filesystem and network access. - Disable npm lifecycle scripts during installation when they are not required, and review any scripts before allowing them. - Review or vendor the exact CLI source corresponding to the pinned release. - Provide the CLI with a least-privilege Paperless token and expose credentials only for the duration of the command. - Add automated dependency monitoring and require review before upgrading the pinned package.
