T08 · Insecure Dependencies
- Location
SKILL.md:60- Finding
Unpinned Third-Party Package Is Downloaded and Executed Automatically
- Content
View full analysis
Vulnerability Details
File Location:
SKILL.md, lines 60–118
Vulnerability Type: Insecure runtime dependency execution
Risk Level: HighVulnerable Code
bash npx -y @subly_fi/pay setup-link --initial-deposit 1010000 npx -y @subly_fi/pay setup-status <sessionId> npx -y @subly_fi/pay deposit 1010000 npx -y @subly_fi/pay fetch "<url>" npx -y @subly_fi/pay fetch "<url>" 100 npx -y @subly_fi/pay fetch "<url>" <sameMaxAmountRawUsdc> apr_<approvalId> npx -y @subly_fi/pay deposit <amountRawUsdc> [apr_<approvalId>] npx -y @subly_fi/pay withdraw <amountRawUsdc> [apr_<approvalId>]Technical Analysis
The Skill directs the Agent to run
@subly_fi/paythroughnpx -ywithout specifying an exact package version. The-yoption suppresses installation confirmation, while the absent version constraint permits npm to resolve and execute a mutable package release at runtime.Consequently, the code that performs the Skill's security-sensitive operations can differ from the code available when the Skill was reviewed. The project contains no lockfile, integrity hash, vendored implementation, or package source against which the executed payload can be verified.
This dependency is especially sensitive because it runs in an environment configured with
SUBLY_DEMO_AGENT_KEYPAIR_PATHand is expected to perform wallet setup, payment, deposit, and withdrawal operations. AlthoughSKILL.mdtells the Agent not to disclose the private key, that textual guardrail does not prevent downloaded package code from reading accessible files or environment variables.Attack Path
- An attacker compromises the npm package, a package maintainer account, the publication process, or a transitive dependency.
- The attacker publishes a malicious release that remains resolvable as the package's current version.
- The Agent follows the Skill and invokes an unversioned
npx -y @subly_fi/pay ...command. npxdownloads and executes the mutable package without ...[truncated 1186 chars]
- Remediation
View remediation
Remediation Suggestions
- Replace every unversioned invocation with an exact, reviewed version, such as
@subly_fi/pay@X.Y.Z. - Install dependencies during a controlled build process rather than downloading them when a Skill command is invoked.
- Commit a lockfile and require package integrity verification using the registry-provided integrity hashes.
- Vendor the reviewed implementation or include its source in the auditable Skill package where practical.
- Remove
npx -yfrom security-sensitive runtime workflows so unexpected installation is not silently accepted. - Verify package provenance through signed releases, trusted publishing, and a restricted dependency allowlist.
- Audit both the direct package and its transitive dependency tree before deployment and after upgrades.
- Run the payment client in a sandbox with narrowly scoped filesystem and network access.
- Expose only the required key material through a constrained signing interface rather than granting general file access to the private key.
- Continue using a dedicated, low-value wallet and enforce payment limits independently of the downloaded client.
- Replace every unversioned invocation with an exact, reviewed version, such as
