T08 · Insecure Dependencies
- Location
SKILL.md:74- Finding
Unpinned Third-Party CLI Installed Globally
- Content
View full analysis
Vulnerability Details
File Location:
SKILL.md, lines 74–78
Additional Locations:SKILL.md, line 34;README.md, lines 3, 11–13, and 18–21
Vulnerability Type: Supply-chain exposure through an unpinned globally installed dependency
Risk Level: MediumVulnerable Code Snippet
markdown ## 安装 CLI(必须) ```bash npm i -g @fly-ai/flyai-clitext The same installation pattern also appears in `README.md`: ```markdown - Node.js 环境 - `npm i -g @fly-ai/flyai-cli` - 可选:`flyai config set FLYAI_API_KEY "your-key"`Technical Analysis
The Skill requires installation of the latest available version of
@fly-ai/flyai-cliwithout specifying an exact version, lockfile, integrity hash, trusted package provenance, or reviewed source revision. Because the CLI implementation is not included in this repository, its behavior cannot be verified through this static audit.Using
npm i -gincreases the exposure:- npm may execute package lifecycle scripts during installation.
- The package executes with the privileges of the user running npm.
- Its executable is placed on the global command path.
- Future calls to
flyaitrust code outside the audited project. - An unpinned installation can resolve to a different package version on each installation.
This is a supply-chain trust issue rather than evidence that the current package is malicious. Exploitation would require compromise of the package, its maintainer or publishing credentials, the package registry path, or a future release.
Attack Path
- An attacker compromises the npm package, a maintainer account, or the package publication pipeline.
- The attacker publishes a malicious version under the expected package name.
- A user or Agent follows the Skill's mandatory unpinned command:
bash npm i -g @fly-ai/flyai-cli - npm resolves and installs the attacker-controlled release.
- Malicious lifecycle code may execute during installation, or malicious behavior may ...[truncated 994 chars]
- Remediation
View remediation
Remediation Suggestions
-
Pin the dependency to an exact reviewed version:
bash npm install --global @fly-ai/flyai-cli@X.Y.Z -
Document the expected package publisher, official registry, source repository, and package integrity hash.
-
Prefer a project-local dependency with a committed lockfile instead of a global installation:
bash npm install --save-exact @fly-ai/flyai-cli@X.Y.Z -
Invoke the locally pinned binary through a controlled project script rather than relying on a mutable executable from the global command path.
-
Review the package's source, dependency tree, and lifecycle scripts before approving upgrades.
-
If compatible with the package, install with lifecycle scripts disabled:
bash npm install --ignore-scripts --save-exact @fly-ai/flyai-cli@X.Y.Z -
Run the CLI with least privilege in an isolated environment, exposing only the files, credentials, and network destinations required for travel searches.
-
Avoid storing API keys in plaintext configuration when possible. Use a scoped secret manager or short-lived environment injection, and ensure secrets are not included in logs or command output.
-
Establish a controlled upgrade process in which new versions are reviewed, integrity-verified, and tested before the pinned version is changed.
-
