T08 · Insecure Dependencies
- Location
SKILL.md:13- Finding
Unpinned Global Installation of a Privileged Payment CLI
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This payment skill is not clearly malicious, but it should be reviewed carefully because it gives an agent broad spending, card, API-payment, and blockchain-signing authority with some safeguards missing or under-scoped.
Install only if you trust the Lobster Cash CLI publisher and are comfortable delegating payment actions to the agent. Pin and review the CLI version where possible, avoid passing bearer tokens through command arguments, do not use debug output around secrets unless necessary, require explicit confirmation before every spend or transaction signature, and revoke wallet or card access when finished.
SKILL.md:13Unpinned Global Installation of a Privileged Payment CLI
references/x402.md:14Bearer Credentials and Signed Payment Payloads May Be Exposed to Arbitrary Endpoints or Logs
references/tx.md:3Opaque External Blockchain Transactions Can Be Signed Without Mandatory Validation or User Confirmation
The trigger description is extremely broad, covering generic intents like shopping, browsing, sending money, and payment setup, which can cause the skill to activate in many normal conversations where financial tooling was not explicitly requested. In a payment-capable skill, unintended invocation increases the chance an agent starts wallet, card, or checkout flows without sufficiently explicit user consent, making the context materially more dangerous than a typical informational skill.
The BYO-browser and manual checkout flow instructs the agent to use cards reveal to obtain card credentials, but the skill does not prominently warn about the sensitivity of exposing PAN/CVV/expiry data or define strict handling requirements. In this context, revealing payment credentials to an agent or browser automation path creates clear risk of leakage through logs, screenshots, tool telemetry, prompt history, or accidental display to unintended parties.
The eval prompts and expectations define the skill as applicable to a very broad range of spending, wallet, checkout, browsing, and transaction-signing intents without clear narrowing conditions or disambiguation boundaries. In a payment-capable skill, overly broad trigger scope can cause the agent to invoke high-risk financial actions in ambiguous contexts, increasing the chance of unintended purchases, wallet operations, or exposure to malicious checkout/payment flows.
The example content encourages users to buy tokenized stocks and, after selection, immediately check balances and continue into funding or transaction flows without surfacing any warning about investment risk, asset volatility, jurisdictional restrictions, or the fact that on-chain actions can be irreversible. In a payment and wallet skill, this omission can materially increase the chance of users being nudged into financial activity they do not fully understand.
Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.
- **Skipping price discovery:** Always discover the real product and price (Step 2) before requesting a card. Without it you can't size the card and the merchant will decline.
- **Hallucinating product URLs or paths:** Same rule as the native flow — never guess URLs beyond the root domain. Either start from the merchant homepage and let your browser tool navigate the site's own UI, or ground yourself in a real URL pulled from web search results.
- **Placing orders without user authorization:** The card's hard cap is a backstop, not a green light. Always stop at the order-review screen and ask the user to confirm before submitting.
- **Requesting a new card without checking `cards list` first:** Always run `lobstercash cards list` after Step 2 and check whether an `active` card already covers this purchase. Reusing a usable card avoids spamming the user with another approval link.
- **Reusing a card whose description doesn't fit the purchase:** The user approved each card for a specific purpose. Don't reuse an "AWS credits" card to buy enamel pins — request a new card scoped to the new purpose.
- **Sharing revealed card details with the user or logs:** `cards reveal` output is sensitive. Use the values in the merchant's checkout form, then forget them. Don't echo them back to the user.
- **Guessing merchant questions you can't answer:** Same as the native flow — when you hit a required choice you can't make on your own (size, shipping option, missing address field), pause and ask the user. Don't invent answers.
Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.
- **Skipping price discovery:** Always discover the real product and price (Step 2) before requesting a card. Without it you can't size the card and the merchant will decline.
- **Hallucinating product URLs or paths:** Same rule as the native flow — never guess URLs beyond the root domain. Either start from the merchant homepage and let your browser tool navigate the site's own UI, or ground yourself in a real URL pulled from web search results.
- **Placing orders without user authorization:** The card's hard cap is a backstop, not a green light. Always stop at the order-review screen and ask the user to confirm before submitting.
- **Requesting a new card without checking `cards list` first:** Always run `lobstercash cards list` after Step 2 and check whether an `active` card already covers this purchase. Reusing a usable card avoids spamming the user with another approval link.
- **Reusing a card whose description doesn't fit the purchase:** The user approved each card for a specific purpose. Don't reuse an "AWS credits" card to buy enamel pins — request a new card scoped to the new purpose.
- **Sharing revealed card details with the user or logs:** `cards reveal` output is sensitive. Use the values in the merchant's checkout form, then forget them. Don't echo them back to the user.
- **Guessing merchant questions you can't answer:** Same as the native flow — when you hit a required choice you can't make on your own (size, shipping option, missing address field), pause and ask the user. Don't invent answers.
Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.
- **Skipping price discovery:** Always discover the real product and price (Step 2) before requesting a card. Without it you can't size the card and the merchant will decline.
- **Hallucinating product URLs or paths:** Same rule as the native flow — never guess URLs beyond the root domain. Either start from the merchant homepage and let your browser tool navigate the site's own UI, or ground yourself in a real URL pulled from web search results.
- **Placing orders without user authorization:** The card's hard cap is a backstop, not a green light. Always stop at the order-review screen and ask the user to confirm before submitting.
- **Requesting a new card without checking `cards list` first:** Always run `lobstercash cards list` after Step 2 and check whether an `active` card already covers this purchase. Reusing a usable card avoids spamming the user with another approval link.
- **Reusing a card whose description doesn't fit the purchase:** The user approved each card for a specific purpose. Don't reuse an "AWS credits" card to buy enamel pins — request a new card scoped to the new purpose.
- **Sharing revealed card details with the user or logs:** `cards reveal` output is sensitive. Use the values in the merchant's checkout form, then forget them. Don't echo them back to the user.
- **Guessing merchant questions you can't answer:** Same as the native flow — when you hit a required choice you can't make on your own (size, shipping option, missing address field), pause and ask the user. Don't invent answers.
The flow instructs the agent to collect and pass shipping address, contact email, phone number, and product details into automated browser and payment workflows, but it does not include an explicit privacy notice, minimization guidance beyond convenience, retention limits, or user-facing consent language for transmitting this data to third-party merchants and browser automation. In a payments/purchasing skill, this is materially risky because the data is both sensitive and externally disclosed during checkout, increasing privacy, compliance, and misuse exposure.
Tool defaults are unsafe or overly permissive (e.g. disabled TLS verification, no authentication, world-writable permissions). Unsafe defaults widen the attack surface.
When the web app is running with NODE_ENV=development, you can pass --card-id dev-mock-card to bypass Crossmint card credentials and inject a non-chargeable test card:
lobstercash purchase run \
The setup instructions direct the agent to link itself to a blockchain wallet and enable spending-adjacent capabilities such as virtual cards and top-ups, but they do not require an explicit safety warning or a clear confirmation that the user understands they are granting the agent financial authority. In a payments skill, that omission is risky because users may treat setup as routine account linking rather than delegation of sensitive wallet access, increasing the chance of unintended authorization.
The skill explicitly supports signing and submitting arbitrary externally supplied blockchain transactions, but it does not require or prominently warn about verifying the transaction source, contents, destination, approvals, or irreversibility before approval. In this context, an agent wallet may execute hostile serialized payloads or raw calls from another tool or external system, leading to irreversible asset loss, unsafe approvals, or unintended contract interactions.
The skill instructs the agent to automatically pay a metered API endpoint from the agent wallet and optionally attach arbitrary Authorization headers, but it does not require explicit user confirmation for spending or any warning about transmitting sensitive credentials to third-party URLs. In a payments skill, this context makes the issue more dangerous because an agent could silently spend funds and exfiltrate bearer tokens or other secrets to an attacker-controlled endpoint under the guise of an API fetch.
The documentation tells users to export LOBSTER_AGENT_ID to control which wallet an agent session uses, but it does not warn that environment variables can persist in shell history, be inherited by child processes, or be exposed through debugging/process-inspection workflows depending on the environment. While the value is an agent identifier rather than a secret key, it is still security-relevant because it influences wallet/agent selection and could cause accidental cross-agent actions or information leakage in multi-agent setups.
L42 instructs the agent to include the explorer URL so the user can verify the transaction, while L38 says to show the explorer link only if asked. It also says not to show the raw transaction hash unless specifically asked, creating conflicting guidance about what transaction identifiers should be disclosed by default.
No suspicious patterns detected.