T08 · Insecure Dependencies
- Location
SKILL.md:150- Finding
Unpinned and Unverifiable Third-Party Dependency Installation
- Content
View full analysis
Vulnerability Details
File Location:
SKILL.md:150-156,SKILL.md:284-285, andSKILL.md:335-342
Vulnerability Type: Supply-chain exposure through unpinned packages, native modules, repositories, and model downloads
Risk Level: MediumVulnerable Code
SKILL.md:150-156:bash # Install through the platform platform install discord-voice # Or install manually cd $HOME/.agent/extensions git clone <repository-url> discord-voice cd discord-voice npm installSKILL.md:284-285:bash npm install -g node-gyp npm rebuild @discordjs/opus sodium-nativeSKILL.md:335-342:text | Local Whisper model | Model | Required | Automatically downloaded on first run | | Kokoro TTS model | Model | Required | Automatically downloaded on first run | | Node.js native modules | Library | Required | Compiled by npm install | - Discord Bot Token: Configured through the DISCORD_TOKEN environment variable. - Local models: Free Whisper and Kokoro models are automatically downloaded on first run without an API key.Technical Analysis
The skill instructs users or Agents to install executable third-party components without specifying exact package versions, immutable repository commit hashes, lockfile enforcement, source authenticity requirements, or integrity hashes.
The manual installation command contains an unresolved repository placeholder, so the source cannot be verified from the audited package. The platform package identity and version are also unspecified. In addition,
npm installmay execute dependency lifecycle scripts, while rebuilding@discordjs/opusandsodium-nativecompiles and loads native code. A global installation ofnode-gypexpands the effect beyond an isolated project environment.Whisper and Kokoro models are described as automatically downloaded, but the document does not identify their download locations, versions, signatures, or expec ...[truncated 2065 chars]
- Remediation
View remediation
Remediation Suggestions
- Replace the repository placeholder with the official HTTPS repository and document its expected owner and canonical URL.
- Pin the plugin to an immutable release artifact or commit hash rather than installing an unspecified current version.
- Pin exact npm dependency versions and include a reviewed lockfile. Use
npm ciinstead of unrestrictednpm install. - Publish and verify cryptographic checksums or signatures for plugin releases, native binaries, and model files.
- Specify exact Whisper and Kokoro model versions, canonical download origins, expected file sizes, and SHA-256 hashes.
- Avoid global npm installation. Install build tools in a constrained project environment or a disposable build container.
- Use
npm ci --ignore-scriptsduring initial verification where feasible. Audit every lifecycle script before explicitly allowing required build steps. - Build native dependencies in a sandbox with restricted filesystem access, no unnecessary credentials, and limited outbound network access.
- Run the Discord plugin under a dedicated, non-administrative account with access only to required configuration and data.
- Ensure installation and build environments do not expose
DISCORD_TOKENor unrelated Agent secrets. - Add automated dependency scanning, lockfile validation, provenance verification, and reproducible release procedures.
