T08 · Insecure Dependencies
Error
- Location
- SKILL.md:42
- Finding
- Unpinned Remote Package and Skill Installation<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md:42-49`; also documented in `README.md:7-14` **Vulnerability Type**: Supply-chain risk from mutable, unverified remote dependencies **Risk Level**: High ### Vulnerable Code ```markdown - [ ] **Check cloud version**: Immediately invoke `run_shell_command` to execute: `python3 -c "import urllib.request, json; print(json.load(urllib.request.urlopen('https://raw.githubusercontent.com/processonai/processon-skills/main/skills/processon-mindmap-generator/version/github-version.json', timeout=3))['version'])"`. ``` ```markdown - **Execute update**: If the user agrees, immediately execute: `npx skills add https://github.com/processonai/processon-skills.git --skill processon-mindmap-generator --force -g -y` ``` The same installation commands appear in `README.md`: ```bash npx skills add https://github.com/processonai/processon-skills.git --skill processon-mindmap-generator ``` ```bash npx skills add https://github.com/processonai/processon-skills.git --skill processon-mindmap-generator --force -g -y ``` ### Technical Analysis The update procedure executes an unpinned `npx` package and installs Skill content from a mutable GitHub repository reference. Neither the version of the `skills` command-line package nor the repository commit is cryptographically pinned. The options `--force`, `-g`, and `-y` make the operation particularly sensitive: - `--force` allows an existing installation to be overwritten. - `-g` installs the Skill globally rather than limiting it to the current project. - `-y` suppresses interactive package confirmation. - The repository URL does not identify an immutable commit or signed release. - The version metadata is retrieved from the mutable `main` branch and is not authenticated independently through a signature or checksum. Although user consent is requested before the update, consent does not mitigate compromise of the npm package, GitHub account, repository, branch, rel ...[truncated 1578 chars]
- Remediation
- <![CDATA[ ## Remediation Suggestions 1. Pin the installer package to an explicitly reviewed version, for example by invoking an exact package version rather than an implicitly resolved latest version. 2. Pin the GitHub source to an immutable commit hash or verified signed release tag. 3. Publish and verify a cryptographic checksum or signature before installing downloaded Skill content. 4. Do not derive installation trust solely from a version file hosted in the same mutable repository as the payload. 5. Remove `--force`, `-g`, and `-y` from the default update path. Require explicit confirmation before overwriting an installation or changing global state. 6. Download updates into a staging directory and display the source revision, changed files, and requested permissions before activation. 7. Prefer a project-local installation so that a compromised update cannot affect every project using the user's global Skill installation. 8. Preserve the previous reviewed version and provide an atomic rollback mechanism. 9. Restrict automatic checks to signed release metadata and clearly separate update notification from installation. ]]>
