T08 · Insecure Dependencies
Error
- Location
- install.sh:11
- Finding
- Unverified and Unpinned Third-Party Skill Installation<![CDATA[ ## Vulnerability Details **File Location**: `install.sh:11-20, 59-69` **Vulnerability Type**: Supply-chain exposure through mutable, unverified dependencies **Risk Level**: High ### Vulnerable Code ```bash ESSENTIAL_SKILLS=( "skill-vetter" "tavily-search" "self-improving-agent" "memory-os" "find-skills" "skill-creator" "summarize" "notion" ) ``` ```bash for skill in "${ESSENTIAL_SKILLS[@]}"; do echo "📦 安装 $skill..." if skillhub install "$skill" --force 2>/dev/null; then echo " ✅ $skill 安装成功" ((SUCCESS++)) else echo " ❌ $skill 安装失败" ((FAILED++)) FAILED_LIST+=("$skill") fi done ``` ### Technical Analysis The installer retrieves and installs eight third-party skills using mutable package names. It does not pin package versions, verify checksums or signatures, validate the resolved publisher or source, or inspect the downloaded artifacts before installation. The `--force` option further increases risk because it may overwrite an existing trusted installation without preserving or comparing the installed version. Redirecting standard error to `/dev/null` also hides security-relevant package resolution and installation diagnostics. The project does not contain evidence that any listed package is currently malicious. The vulnerability is the unsafe trust model: the effective installed content is determined by external registry state at execution time and can differ from what was reviewed. ### Attack Path 1. An attacker compromises the package registry, a publisher account, or one of the named skill packages. 2. The attacker publishes a malicious release under an existing mutable skill name. 3. A user or agent executes `install.sh` and confirms installation. 4. The script invokes `skillhub install "$skill" --force`. 5. The external package is downloaded without version, signature, or checksum validation. 6. The malicious or compromised skill replaces any exist ...[truncated 1061 chars]
- Remediation
- <![CDATA[ ## Remediation Suggestions 1. Pin every skill to an exact immutable version rather than installing by name alone. 2. Verify package signatures or cryptographic hashes against trusted, independently distributed values. 3. Validate the resolved registry, publisher identity, package source, and package metadata before installation. 4. Remove `--force` from the default installation path. Require explicit confirmation before replacing an existing installation. 5. Display the resolved version and publisher for each skill before requesting user approval. 6. Audit each downloaded skill before enabling or invoking it, particularly skills that handle memory, credentials, or self-modifying behavior. 7. Preserve installation errors instead of discarding standard error. If output must be controlled, write it to a protected audit log. 8. Use an allowlist containing approved package identities, versions, hashes, and trusted registry endpoints. 9. Run installation with the least-privileged account necessary and isolate installed skills where supported. ]]>
