Back to skill

Security audit

ClawCast Crypto Wallet: Keys, Balances & Transactions

Security checks across malware telemetry and agentic risk

Overview

This is a real EVM wallet helper, but it stores wallet secrets locally and can make system-level changes during setup, so it needs careful review before use.

Install only if you intend to let the agent manage a hot wallet. Use a new low-balance wallet, do not import valuable existing seed phrases or private keys, review any sudo or installer prompts before approving them, and inspect ~/.agent-wallet after setup, especially pw.txt and keystore.json. Manually confirm every transaction before broadcast and use the removal script when finished.

SkillSpector

By NVIDIA
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
Findings (14)

Lp3

Medium
Category
MCP Least Privilege
Confidence
93% confidence
Finding
The skill clearly directs the agent to read and write local files and execute shell scripts, yet no permissions are declared. In a wallet-management skill, undeclared shell and filesystem access is especially risky because it can manipulate keystores, secrets, logs, and system state without transparent consent boundaries.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding
The documented behavior goes far beyond ordinary wallet guidance: it installs software from the internet, may invoke package managers, stores passwords locally, schedules jobs, edits bundled JSON assets, and performs deletion/log modification. In the context of a crypto wallet skill, these hidden side effects materially increase the chance of credential exposure, system tampering, and irreversible loss of wallet-related data.

Context-Inappropriate Capability

Low
Confidence
82% confidence
Finding
The skill instructs the agent to maintain a transaction mention log containing wallet addresses, hashes, and descriptions in the workspace, which is not required for core cast operations. This creates a local ledger of sensitive financial activity that could be exposed to other tools, users, or future sessions.

Intent-Code Divergence

Medium
Confidence
78% confidence
Finding
The documentation says static asset JSON files are also modified at runtime to record token additions, which blurs the boundary between trusted reference data and mutable user-provided content. In a wallet context, this can poison future token recommendations or explorer links and make later actions rely on tampered metadata.

Context-Inappropriate Capability

Medium
Confidence
94% confidence
Finding
The script attempts to install the 'at' package and may invoke privilege escalation via apt/sudo during a wallet setup flow. Introducing system package installation and elevated execution in a key-handling script expands the trust boundary and creates unnecessary risk, especially because the script processes highly sensitive wallet secrets and writes installer logs to /tmp.

Missing User Warnings

Medium
Confidence
92% confidence
Finding
The skill writes wallet addresses and transaction details to a local workspace log without warning the user about retention or sensitivity. Because blockchain activity is financially sensitive and highly linkable, this creates an avoidable privacy leak and expands the footprint of wallet data on disk.

Missing User Warnings

Medium
Confidence
91% confidence
Finding
The function derives a raw private key directly from a mnemonic and returns it to the caller, which materially increases secret exposure risk because private keys are easier to log, persist, or exfiltrate than a mnemonic kept in a dedicated wallet flow. In a wallet-management skill, converting seed phrases into raw keys without explicit warning, consent, or strong handling constraints is especially dangerous because these secrets can immediately authorize fund transfers.

Missing User Warnings

Medium
Confidence
96% confidence
Finding
The script downloads and immediately executes code from a remote URL using `curl | bash` without any integrity verification, pinning, or explicit trust prompt. This creates a supply-chain execution path where a compromised upstream server, DNS/TLS interception, or malicious installer change would result in arbitrary code execution on the host.

Autonomous Decision Making

Medium
Category
Excessive Agency
Content
4. **Onboarding flow** (automatic when no wallet exists). If the readiness check exits with 1, walk through the scripted steps in order, mirroring their prompts and explicitly asking the user for every required piece of information before running the next script. After the key-material step finishes, share the derived address immediately so the user sees it before we ask them for anything in step 3:
   1. Installation — explain that the script will ensure Foundry/cast is installed so every mentioned `cast` command works before proceeding.
   2. Key material — before running the wallet step, ask whether they want to create a new hot keypair, import a 12/24-word MetaMask-compatible mnemonic (`m/44'/60'/0'/0/0`), or import a private key. Collect the chosen secret, confirm the resulting address right after the step finishes, and tell the user that address before moving on. When generating a new keypair, capture the mnemonic displayed by `cast wallet new`, save it to `~/.agent-wallet/mnemonic-words-<timestamp>.txt`, and tell the user the exact path plus the fact that a job (via `at now + 1 hour` if available or a background `sleep` fallback) will delete that file after 60 minutes so the seed phrase does not linger.
   3. Password — only ask for the keystore password once (there is no confirmation prompt, no save/remember question, and the account name is forced to “agent”). The script saves that password to the local helper file and uses it when creating the keystore, so nothing else is needed from the user for this step.
   4. Network — read aloud the default network list derived from `assets/evm-networks.json`, ask which numbered network they want, and note that the script now auto-selects the first RPC URL from that entry (it saves the matching `CHAIN_ID`/`ETH_RPC_URL` and then just shows the RPC so the user can see which endpoint is being used).
   5. Tokens — the script now prints the token table derived from `assets/evm-network-tokens.json` so it appears directly i
...[truncated 25 chars]
Confidence
89% confidence
Finding
no confirmation

Credential Access

High
Category
Privilege Escalation
Content
APP_NAME="agent-wallet"
APP_DIR="${HOME}/.${APP_NAME}"
STATE_FILE="${APP_DIR}/state.env"
FOUNDRY_BIN_DIR="${HOME}/.foundry/bin"
FOUNDRY_KEYSTORE_DIR="${HOME}/.foundry/keystores"
ASSETS_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../assets" && pwd)"
Confidence
72% confidence
Finding
.env"

Sudo/Root Execution

Medium
Category
Privilege Escalation
Content
return 1
  fi
  if [[ -x "/usr/bin/sudo" ]]; then
    if ! sudo sh -c "$installer > /tmp/at-install.log 2>&1"; then
      warn "Failed to install 'at' with sudo; mnemonic cleanup will be manual."
      return 1
    fi
Confidence
97% confidence
Finding
sudo

Session Persistence

Medium
Category
Rogue Agent
Content
## Scripts

- **Step scripts** — `scripts/01_install_cast.sh`..`06_finish.sh` cover the onboarding flow described in the README: install Foundry/cast, create or import a key, encrypt the keystore, choose network/RPC/tokens (sourced from the JSON assets), and show the resulting address and balance. Run them in order when the user requests onboarding. Each script already prompts for the necessary inputs (mnemonic/private key, password, RPC URL, token details), so relaying the same questions to the user and then running the next script is the recommended approach.
- **Wallet health check** — `scripts/check_wallet.sh` inspects the shared state and reports whether a keystore/address pair already exists; it returns success (0) when a wallet is present and 1 otherwise.
- **Network status** — `scripts/show_network.sh` prints the active network name, chainId, and RPC URL from `~/.agent-wallet/state.env`, or warns if the configuration is incomplete.
- **Wallet removal** — `scripts/remove_wallet.sh` safely deletes the keystore, password stash, and metadata from `~/.agent-wallet/state.env` after an explicit confirmation.
Confidence
90% confidence
Finding
create or import a key, encrypt the keystore, choose network/RPC/tokens (sourced from the JSON assets), and show the resulting address and balance. Run them in order when the user requests onboarding.

External Script Fetching

High
Category
Supply Chain
Content
exit 0
fi
if ! has_cmd curl; then
  err "curl is required but not found. Install curl and re-run."
  exit 1
fi
warn "cast not found. Installing Foundry..."
Confidence
98% confidence
Finding
curl is required but not found. Install curl and re-run." exit 1 fi warn "cast not found. Installing Foundry..." curl -L https://foundry.paradigm.xyz | bash

Chaining Abuse

High
Category
Tool Misuse
Content
exit 1
fi
warn "cast not found. Installing Foundry..."
curl -L https://foundry.paradigm.xyz | bash
enable_strict_path
if ! has_cmd foundryup; then
  for p in "${HOME}/.bashrc" "${HOME}/.zshrc" "${HOME}/.profile"; do
Confidence
99% confidence
Finding
| bash

VirusTotal

61/61 vendors flagged this skill as clean.

View on VirusTotal

Static analysis

No suspicious patterns detected.