T08 · Insecure Dependencies
- Location
SKILL.md:52- Finding
Unpinned Global Installation of a Wallet-Authorized CLI Dependency
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This is a real-looking Bankr crypto and LLM integration, but it needs review because it can perform irreversible wallet actions and persists powerful credentials.
Install only if you intentionally want Bankr to access a dedicated, limited-funds crypto wallet and LLM gateway. Prefer read-only keys unless transactions are required, use separate Agent and LLM keys, enable IP allowlisting where possible, avoid copying keys into shell or IDE config, pin or verify the CLI package before global install, and require explicit human review before any trade, transfer, signature, automation, or raw transaction submission.
SKILL.md:52Unpinned Global Installation of a Wallet-Authorized CLI Dependency
SKILL.md:110API Keys Exposed Through Command-Line Arguments and Diagnostic Output
references/safety.md:127Plaintext High-Authority Credentials Persisted Across CLI, Agent, IDE, and Shell Configuration
The skill advertises high-risk financial capabilities like crypto transfers, leverage, betting, token deployment, and raw transaction signing without an upfront warning in the manifest-level description. Because routing and selection may happen before a user sees deeper safety text, users and orchestrators may invoke a dangerous capability without immediately understanding the risk profile.
The skill documents a destructive authenticated action, DELETE /agent/profile, without showing any additional safety controls such as explicit user-confirmation requirements, dry-run behavior, or anti-automation safeguards. In an agent setting, exposing deletion-capable operations via natural-language workflows increases the risk that ambiguous prompts, prompt injection, or mistaken tool use could delete a user's public profile unintentionally.
}
### DELETE /agent/profile
Delete the authenticated user's profile. Returns `{ "success": true }`.
Skill contains instructions that could directly expose system prompts, internal rules, or hidden instructions to users or external parties.
done
## Output Guidelines
### Response Formatting
Skill selects an external model or provider that may use a different account or billing plan than the operator expects. Undisclosed model switches can cause unexpected cost or quota consumption.
bankr llm claude
bankr llm claude --model claude-sonnet-4.6 bankr llm claude --allowedTools Edit,Write,Bash bankr llm claude --resume
YARA rule matched a hack tool or exploit indicator (offensive tools, reconnaissance, privilege escalation, or exploit frameworks).
nTransaction| Missing transaction | | 401 |Authentication required| Missing or invalid API key | | 403 |Agent API access not enabled` | API key lacks agent access |
Submit raw transactions directly to the blockchain.
{
"transaction": {
"to": "0x...",
"chainId": 8453,
"value": "1000000000000000000",
"data": "0x..."
},
"description": "Transfer 1 ETH",
"waitForConfirmation": true
}
| Field | Type | Required | Description |
|---|---|---|---|
to | string | Yes | Destination address |
chainId | number | Yes | Chain ID (8453=Base, 1=Ethereum, 137=Polygon) |
value | string | No | Value in wei (as string) |
data | string | No | Calldata (hex string) |
gas | string | No | Gas limit |
gasPrice | string | No | Legacy gas price |
maxFeePerGas | string | No | EIP-1559 max fee |
maxPriorityFeePerGas | string | No | EIP-1559 priority fe |
The invocation text is extremely broad and overlaps with many common user intents, including wallets, transfers, trading, LLM access, and raw transaction signing. In an agent routing system, this can cause over-selection of a high-privilege skill, increasing the chance that unrelated or ambiguous user requests get sent to a tool that can move funds or sign transactions.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
All requests require an X-API-Key header:
curl -X POST "https://api.bankr.bot/agent/prompt" \
-H "X-API-Key: bk_YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"prompt": "What is my ETH balance?"}'
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
# Start — the response includes a threadId
curl -X POST "https://api.bankr.bot/agent/prompt" \
-H "X-API-Key: $BANKR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"prompt": "What is the price of ETH?"}'
The skill explicitly encourages persistent dedicated agent wallets and stored API credentials for autonomous use. While operationally useful, session persistence combined with trading, signing, and submission capabilities increases blast radius if the host, config file, or agent workflow is compromised.
## Safety & Access Control
**Dedicated Agent Wallet**: When building autonomous agents, create a separate Bankr account rather than using your personal wallet. This isolates agent funds — if a key is compromised, only the agent wallet is exposed. Fund it with limited amounts and replenish as needed.
**API Key Types**: Bankr uses a single key format (`bk_...`) with capability flags (`agentApiEnabled`, `llmGatewayEnabled`). You can optionally configure a separate LLM Gateway key via `bankr config set llmKey` or `BANKR_LLM_KEY` — useful when you want independent revocation or different permissions for agent vs LLM access.
The documentation explicitly notes that /agent/submit executes transactions immediately with no confirmation prompt. In a system that supports autonomous agents and natural-language requests, absence of an enforced confirmation step for irreversible on-chain actions creates a direct path to accidental or malicious fund transfer.
- Store keys in environment variables (`BANKR_API_KEY`, `BANKR_LLM_KEY`), never in source code
- Add `~/.bankr/` and `.env` to `.gitignore` — the CLI stores credentials in `~/.bankr/config.json`
- Test with small amounts on low-cost chains (Base, Polygon) before production use
- Use `waitForConfirmation: true` with `/agent/submit` — transactions execute immediately with no confirmation prompt
- Rotate keys periodically and revoke immediately if compromised at [bankr.bot/api](https://bankr.bot/api)
**Reference**: [references/safety.md](references/safety.md)
The sign endpoint can transmit signing requests to a remote service and produce legally/financially meaningful signatures. In a crypto skill, this is materially risky because signatures can enable approvals, token spending, delegated actions, or transaction authorization without the user fully understanding the payload.
# Sign a plain text message
curl -X POST "https://api.bankr.bot/agent/sign" \
-H "X-API-Key: $API_KEY" \
-H "Content-Type: application/json" \
-d '{"signatureType": "personal_sign", "message": "Hello, Bankr!"}'
The sign endpoint can transmit signing requests to a remote service and produce legally/financially meaningful signatures. In a crypto skill, this is materially risky because signatures can enable approvals, token spending, delegated actions, or transaction authorization without the user fully understanding the payload.
# Sign a plain text message
curl -X POST "https://api.bankr.bot/agent/sign" \
-H "X-API-Key: $API_KEY" \
-H "Content-Type: application/json" \
-d '{"signatureType": "personal_sign", "message": "Hello, Bankr!"}'
EIP-712 typed-data signing is especially dangerous because malicious permits, order signatures, or delegation approvals can be hard for non-experts to interpret while still authorizing asset movement or control. In this skill's context, exposing such capability through natural-language tooling substantially raises phishing and prompt-manipulation risk.
-d '{"signatureType": "personal_sign", "message": "Hello, Bankr!"}'
# Sign EIP-712 typed data (permits, orders)
curl -X POST "https://api.bankr.bot/agent/sign" \
-H "X-API-Key: $API_KEY" \
-H "Content-Type: application/json" \
-d '{"signatureType": "eth_signTypedData_v4", "typedData": {...}}'
Signing transactions, even without immediate broadcast, can create pre-authorized payloads ready for submission elsewhere. Because the skill also supports raw transaction submission and agent-driven workflows, this capability can be chained into irreversible fund loss if a malicious or mistaken prompt generates a harmful transaction.
-d '{"signatureType": "eth_signTypedData_v4", "typedData": {...}}'
# Sign a transaction without broadcasting
curl -X POST "https://api.bankr.bot/agent/sign" \
-H "X-API-Key: $API_KEY" \
-H "Content-Type: application/json" \
-d '{"signatureType": "eth_signTransaction", "transaction": {"to": "0x...", "chainId": 8453}}'
The submit endpoint enables direct raw transaction broadcasting to the blockchain, which is irreversible and can transfer assets or execute arbitrary contract calldata. In an LLM-mediated skill, combining natural-language intent parsing with arbitrary transaction submission creates a very high-risk path for accidental or manipulated fund movement.
# Submit a raw transaction
curl -X POST "https://api.bankr.bot/agent/submit" \
-H "X-API-Key: $API_KEY" \
-H "Content-Type: application/json" \
-d '{
The manifest describes Bankr as a crypto trading agent and LLM gateway for wallets, transactions, NFTs, leverage, betting, token deployment, automation, and raw transaction signing/submission. This file additionally documents creation, update, and deletion of public agent profile pages and project updates, which is a distinct social/content management capability not reflected in the manifest description.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
Create profile:
curl -X POST "https://api.bankr.bot/agent/profile" \
-H "X-API-Key: $BANKR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"projectName": "My Agent", "tokenAddress": "0x...", "description": "An AI trading agent"}'
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
Request:
curl -X POST "https://api.bankr.bot/agent/prompt" \
-H "X-API-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"prompt": "What is my ETH balance?"}'
The workflow includes examples for token swaps and other trading actions without an explicit warning that these operations can be irreversible and financially risky. In a crypto-trading skill, users may copy these patterns directly, so omission of a confirmation/risk warning increases the chance of accidental loss even if no malicious behavior is present.
This reference file instructs users on setting automated trading actions, including limit orders, stop losses, DCA, TWAP, and scheduled commands, but it does not clearly warn that these actions can execute later without further confirmation and may create real financial loss. In a crypto trading skill that supports live asset transfers and order execution, omission of explicit risk, auto-execution, and balance/gas consequences can cause users to trigger unintended or poorly understood financial actions.
The docs explicitly advertise bankr llm credits add 25 -y to skip confirmation and also encourage auto top-up from a wallet. In a finance-linked skill, reducing friction around spending actions increases the risk of unintended or automated fund depletion, especially if an agent or script invokes the command without adequate user review.
bankr llm credits add 25 # Add $25 credits (USDC default)
bankr llm credits add 50 --token 0x... # Add $50 from a specific token
bankr llm credits add 25 -y # Skip confirmation prompt
Configure automatic top-up so credits never run out:
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.
## LLM Gateway Setup
If the user already has a Bankr account, they just need to configure the gateway. If not, they need to create one first.
### Have Bankr Account
The OpenClaw setup writes provider config containing apiKey: "your_key_here" into ~/.openclaw/openclaw.json, which implies storing a reusable secret in a local config file. Persisting credentials in plaintext config files can expose them through weak file permissions, backups, dotfile syncing, or accidental commits, leading to unauthorized use of the LLM gateway and possibly broader Bankr access if the same key is reused.
Auto-install the Bankr provider into your OpenClaw config:
# Write config to ~/.openclaw/openclaw.json
bankr llm setup openclaw --install
# Preview the config without writing
The documentation tells users to add ANTHROPIC_AUTH_TOKEN to ~/.zshrc or ~/.bashrc, creating a long-lived secret in shell startup files without any warning about credential exposure. Shell profiles are commonly backed up, synced, inspected by other tools, or accidentally shared, so this increases the chance of API key compromise and unauthorized gateway use.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
The gateway is compatible with standard OpenAI and Anthropic SDKs — just override the base URL.
curl -X POST "https://llm.bankr.bot/v1/chat/completions" \
No suspicious patterns detected.