T08 · Insecure Dependencies
Warning
- Location
- references/setup.md:35
- Finding
- Unpinned Third-Party CLI Installation Without Integrity Verification## Vulnerability Details **File Location**: `SKILL.md:17-20`; `references/setup.md:35-50` **Vulnerability Type**: T08: Insecure Dependencies **Risk Level**: Medium ### Vulnerable Code `SKILL.md:17-20`: ```yaml install: - kind: node package: "@eat-pray-ai/yutu" bins: [yutu] ``` `references/setup.md:35-50`: ```bash # Node.js (all platforms) npm i -g @eat-pray-ai/yutu # macOS brew install yutu # Linux brew install yutu # Windows winget install yutu # Gopher go install github.com/eat-pray-ai/yutu@latest ``` ```markdown Download a prebuilt binary from the [releases page](https://github.com/eat-pray-ai/yutu/releases/latest) and place it in your PATH. ``` ### Technical Analysis The installation metadata and setup guide direct users to install mutable third-party artifacts without pinning an audited version or immutable commit. In particular: - The npm package has no exact version. - The Go command explicitly requests `@latest`. - The release link resolves to the latest mutable release. - No checksum, cryptographic signature, lockfile, or other integrity-verification procedure is supplied for downloaded binaries. - The Homebrew and Winget instructions do not document the expected formula, manifest source, publisher, or package identity verification. Package managers provide transport and registry-level controls, but those controls do not protect users if a maintainer account, upstream repository, package release process, registry entry, or distribution manifest is compromised. Global npm installation can also execute package lifecycle behavior with the invoking user's privileges. The installed CLI is expected to access OAuth client credentials and a cached YouTube authorization token through `YUTU_CREDENTIAL`, `YUTU_CACHE_TOKEN`, `client_secret.json`, and `youtube.token.json`. Consequently, a malicious substituted dependency would execute in a security-sensitive context. ...[truncated 1680 chars]
- Remediation
- ## Remediation Suggestions 1. Pin the npm package to a specific audited version rather than relying on the registry's current version: ```bash npm i -g @eat-pray-ai/yutu@<audited-version> ``` 2. Replace `@latest` in the Go installation command with a specific release tag or immutable commit: ```bash go install github.com/eat-pray-ai/yutu@<verified-version-or-commit> ``` 3. Link binary downloads to a specific release instead of `/releases/latest`. 4. Publish SHA-256 or stronger checksums for every supported binary and require users to verify them before installation. 5. Prefer cryptographically signed release artifacts and document signature verification using a trusted, independently distributed public key. 6. Identify the expected Homebrew formula source, Winget package identifier, and verified publisher explicitly. 7. Pin the version in `SKILL.md` installation metadata if the skill platform supports version constraints or integrity hashes. 8. Review each pinned release before updating it, and automate dependency provenance, signature, and checksum validation. 9. Run the CLI without administrative privileges and grant only the minimum OAuth scopes required for watermark operations. 10. Store OAuth token files with restrictive filesystem permissions and rotate or revoke tokens promptly if dependency compromise is suspected.
