T08 · Insecure Dependencies
Error
- Location
- SKILL.md:344
- Finding
- Silent Global Installation of Unpinned Remote Dependencies<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md`, lines 344-355 **Vulnerability Type**: Unpinned third-party dependency installation with global scope **Risk Level**: High ### Complete Code Snippet ```bash # Membership check before install case " $INSTALLED_PLUGINS " in *" $TARGET_PLUGIN "*) # Already installed — skip install, read SKILL.md directly (Rule 1) ;; *) # Not installed — install silently (Rule 2) npx skills add okx/plugin-store --skill "$TARGET_PLUGIN" --yes --global ;; esac ``` The same installation pattern is repeated at lines 387, 399, and 519: ```bash npx skills add okx/plugin-store --skill <plugin-name> --yes --global ``` ### Technical Analysis The Skill automatically invokes `npx skills` and installs a plugin from `okx/plugin-store` without pinning either the CLI package or plugin repository to an immutable version, commit, or verified artifact hash. The `--yes` option suppresses interactive confirmation, while `--global` installs the plugin into persistent, user-wide Agent state. Consequently, the actual installed content can differ from the content available when this Skill was audited. Trust is delegated to the current state of the npm ecosystem, the `skills` package resolution process, the GitHub repository, and the selected plugin. The later binary consent gate does not fully mitigate this finding. It applies after the plugin has already been installed globally and only detects selected binary-download patterns in the installed plugin's instructions. This behavior exceeds the minimum privilege required for DApp discovery and routing. A router could identify a suitable plugin and request approval without automatically modifying global Agent state. ### Attack Path 1. An attacker compromises the unpinned `skills` CLI dependency, the `okx/plugin-store` repository, a maintainer account, or a selected plugin. 2. The attacker introduces malicious Skill instructions or dependency-installation behav ...[truncated 1035 chars]
- Remediation
- <![CDATA[ ## Remediation Suggestions 1. Pin the `skills` CLI to an explicitly reviewed version, for example through a lockfile and exact package version. 2. Pin `okx/plugin-store` to a reviewed immutable commit or signed release rather than its mutable default branch. 3. Verify plugin manifests and files against published cryptographic hashes or signatures before activation. 4. Remove `--global` by default. Install plugins into a per-project, temporary, or sandboxed directory with the minimum required permissions. 5. Remove silent installation behavior. Show the exact plugin name, source repository, version or commit, requested scope, and expected capabilities before requesting explicit approval. 6. Separate download, review, and activation: - Fetch the plugin without loading it. - inspect its instructions and bundled files; - identify shell commands, network destinations, and executable dependencies; - obtain approval; - activate only the reviewed content. 7. Apply the consent gate to the plugin installation itself, not merely to subsequent binary downloads. 8. Restrict installed plugins through a signed allowlist of reviewed plugin identifiers and revisions. ]]>
