T08 · Insecure Dependencies
Warning
- Location
- SKILL.md:13
- Finding
- Unpinned Global Installation of an External npm Package<![CDATA[ ## Vulnerability Details **File Location**: `SKILL.md`, lines 13–17 **Vulnerability Type**: Unpinned third-party dependency installed globally **Risk Level**: Medium ### Vulnerable Code ```markdown ## Installation ```bash npm install -g meetgeek-cli ``` ``` ### Technical Analysis The installation instructions direct users to install `meetgeek-cli` globally from the public npm registry without specifying a reviewed version or verifying package integrity. Because no version is pinned, npm resolves the package version associated with the current distribution tag, normally `latest`, at installation time. The code executed by users can therefore change after this Skill has been reviewed. Global npm installation may also execute package lifecycle scripts, such as `preinstall`, `install`, or `postinstall`, with the privileges of the user running the command. The source code of `meetgeek-cli` is not included in the audited project. Consequently, its lifecycle scripts, credential handling, network destinations, and runtime behavior could not be verified as part of this audit. There is no evidence in the reviewed files that the dependency is currently malicious; the finding concerns the unsafe and mutable dependency installation process. ### Attack Path 1. An attacker compromises the npm account, publication pipeline, or upstream repository associated with `meetgeek-cli`, or otherwise causes a malicious release to become the version selected by npm. 2. The attacker publishes a release containing a malicious lifecycle script or malicious runtime code. 3. A user follows the documented command: ```bash npm install -g meetgeek-cli ``` 4. npm downloads the mutable, unpinned release and may execute its lifecycle scripts during installation. 5. The malicious code runs with the installing user's privileges. 6. It may access files available to that user, including the MeetGeek configuration identified by the Skill as `~/.config/meetgeek/config.json`. 7 ...[truncated 967 chars]
- Remediation
- <![CDATA[ ## Remediation Suggestions 1. Pin `meetgeek-cli` to an explicitly reviewed version rather than relying on the mutable `latest` tag: ```bash npm install -g meetgeek-cli@<reviewed-version> ``` 2. Verify the selected release before recommending it: - Review the package source and npm lifecycle scripts. - Confirm package ownership and provenance. - Record and verify the expected registry integrity digest. - Reassess the package whenever the pinned version is updated. 3. Prefer a project-local installation with a committed lockfile instead of a global installation: ```bash npm install --save-exact meetgeek-cli@<reviewed-version> ``` Commit the resulting lockfile so dependency versions and integrity values are reproducible. 4. Disable lifecycle scripts during installation where compatible with the package: ```bash npm install --ignore-scripts --save-exact meetgeek-cli@<reviewed-version> ``` 5. Include or vendor the reviewed CLI implementation with the Skill when feasible, allowing its credential handling, external communications, and command execution behavior to be audited together with the wrapper. 6. Execute the CLI with least privilege and restrict access to `~/.config/meetgeek/config.json`, for example by ensuring that only the owning user can read the file. ]]>
