T08 · Insecure Dependencies
- Location
SKILL.md:12- Finding
Unpinned Global Installation of a Third-Party Executable Dependency
- Content
View full analysis
Vulnerability Details
File Location:
SKILL.md, lines 12-15 and 63
Vulnerability Type: Unpinned third-party executable dependency
Risk Level: MediumVulnerable Code
Dependency declaration at lines 12-15:
yaml install: - kind: node package: "@selat-ai/selat-cli" bins: - selatInstallation command at line 63:
bash selat --version || npm install -g @selat-ai/selat-cliTechnical Analysis
The skill instructs users to install
@selat-ai/selat-cliglobally without specifying an exact package version or integrity digest. Consequently, npm resolves a mutable registry release rather than a dependency whose reviewed contents are cryptographically fixed.The installed component is executable and is later trusted to download skill content, communicate with remote infrastructure, initialize wallet configuration, and perform paid network operations. Global installation also exposes the package's installation lifecycle and executable code to the privileges of the account running npm.
This finding does not establish that the current package is malicious. The vulnerability is the absence of controls ensuring that the package executed by a user is the same version that was reviewed.
Attack Path
- An attacker compromises the npm package, a maintainer account, or the package publication pipeline.
- The attacker publishes a malicious or backdoored release under the legitimate package name.
- A user follows Step 0 while no
selatbinary is available. npm install -g @selat-ai/selat-cliresolves and installs the attacker-controlled release because no exact version or integrity value is specified.- Malicious package lifecycle code or the installed CLI executes with the privileges of the user running npm.
- The compromised CLI can tamper with downloaded skill definitions or observe later configuration, wallet initialization, and paid-operation workflows.
Impact Assessment
Successful exploitation could ...[truncated 651 chars]
- Remediation
View remediation
Remediation Suggestions
-
Pin the dependency to a reviewed, exact version rather than relying on the mutable latest release:
yaml package: "@selat-ai/selat-cli@<audited-exact-version>"bash npm install -g @selat-ai/selat-cli@<audited-exact-version> -
Publish and verify the expected npm integrity digest or a signed release artifact before installation.
-
Document the approved package registry explicitly and enforce registry scoping to reduce dependency-confusion risk.
-
Avoid global installation where practical. Run the pinned package in a minimally privileged, isolated environment with restricted filesystem and network access.
-
Disable npm lifecycle scripts during installation when compatible with the package:
bash npm install -g --ignore-scripts @selat-ai/selat-cli@<audited-exact-version> -
Verify package provenance, maintainer identity, and release signatures as part of every dependency update.
-
Pin and independently verify remotely installed skill manifests and endpoint definitions before permitting wallet initialization or paid execution.
-
