T08 · Insecure Dependencies
- Location
SKILL.md:49- Finding
Unpinned Third-Party CLI Installed Globally with Access to Wallet Keys and Transaction Signing
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This skill is purpose-aligned but asks agents to install and run a wallet-capable CLI in ways that can auto-confirm blockchain actions across saved wallets.
Review before installing. Only use this with wallets you explicitly choose, prefer dry-run first, avoid --all and --yes unless you have already reviewed the exact wallet, accounts, reclaimed SOL, protocol fee, and claim details, and consider installing a pinned CLI version in a constrained environment rather than a mutable global npm package.
SKILL.md:49Unpinned Third-Party CLI Installed Globally with Access to Wallet Keys and Transaction Signing
The manifest description says to use the skill when 'the user wants to' perform several actions, including broad phrases like checking earnings or claiming rewards. This does not provide a clear, bounded trigger phrase set or exclusion conditions, so it could overlap with ordinary wallet- or rewards-related requests and cause unintended invocation.
The skill explicitly promotes --yes to skip confirmation for a value-moving blockchain operation that closes token accounts and submits signed transactions. In an agent context, this reduces human oversight and can enable unintended execution across the wrong wallet or at the wrong time, especially because the backend scan results drive what gets closed.
Scan all or a specified wallet for empty SPL token accounts and close them, returning locked rent to the respective wallet(s). -y or --yes option provide auto confirmation to the Close empty accounts? interactive prompt.
gp close-empty --wallet <address> --yes --json # target a specific walletskip confirmation prompt
gp close-empty --all -y --json # all saved wallets, auto-confirm
The auto-confirm pattern encourages unattended execution of a transaction-generating command. Although closing empty token accounts is a legitimate workflow, removing confirmation safeguards in an agent environment increases the risk of unauthorized or mistaken on-chain actions.
gp close-empty --wallet <address> --yes --json # target a specific walletskip confirmation prompt
gp close-empty --all -y --json # all saved wallets, auto-confirm
gp close-empty --wallet <address> --dry-run --yes --json # preview — no transactions sent
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.
gp stats --all --json # summary JSON for all saved wallets
gp stats --wallet
--yes --json # auto-write CSV without promptinggp stats --wallet
--csv-out ~/report.csv --json # write CSV to pathThis section normalizes fully unattended wallet operations, including adding a wallet from a local keypair file and then performing auto-confirmed account closures. In an agent or CI environment, that combination can lead to secret-adjacent handling and irreversible blockchain actions without meaningful user verification.
# Add a wallet non-interactively
gp add-wallet --keypair-file ~/.config/solana/id.json --name "Bot" --json
# Close empty accounts — auto-confirm, JSON output
gp close-empty --wallet <address> --yes --json
# Close for all wallets
Auto-confirming claim-soul is less dangerous than close-empty because the skill states no local signing is required and the action claims allocated rewards. However, it still authorizes an external state-changing operation without confirmation, which is a poor fit for autonomous agents.
gp stats --wallet
--json gp stats --all --jsongp claim-soul --wallet
--json gp claim-soul --all --jsonThe documentation states that JSON mode can effectively bypass interactive prompts and let transactions proceed automatically. In a skill intended for agent use, this materially increases the chance of silent execution of blockchain-affecting actions, especially when combined with --all or persisted wallets.
- **`--json` requires `--wallet` or `--all`.** In JSON mode the interactive
wallet picker is suppressed. Always pass an explicit wallet address or
`--all` flag.
- **`--json` auto-confirms.** In JSON mode the "close accounts?" and "claim
SOUL?" prompts can be skipped by using `--yes` as default response— transactions proceed automatically.
- **No signing for SOUL claims.** `gp claim-soul` does not require
your keypair for signing. Your wallet public-key is sufficient. The SOUL tokens are transferred from Project's Community Wallet making it the transaction Signer and The backend handles signing entirely.
The Add/Remove Wallets section documents gp remove-wallet --wallet <address> but does not explicitly warn that this deletes the locally stored encrypted wallet entry from ~/.gp-cli/wallets.json. Because this is a data-affecting operation, the skill description should clearly disclose the local deletion impact before use.