Cast

Security checks across malware telemetry and agentic risk

Overview

This EVM wallet skill is related to its stated purpose, but it handles wallet secrets and system changes in ways that users should review carefully before installing.

Install only if you understand this is a local hot-wallet helper. Use it with a low-value wallet, review the scripts first, avoid reusing passwords or importing valuable seed phrases, and be aware it may store wallet secrets, RPC URLs, and transaction metadata on disk. Prefer manual or hardware-wallet workflows for significant funds.

SkillSpector

By NVIDIA
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Rogue AgentSelf-Modification, Session Persistence
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
Findings (17)

Lp3

Medium
Category
MCP Least Privilege
Confidence
95% confidence
Finding
The skill declares no permissions even though it clearly instructs shell execution, file reads, and file writes. In a wallet-management context, undeclared capabilities are especially risky because they conceal the ability to install software, modify local state, and handle secrets, weakening user and platform trust boundaries.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding
The documented behavior goes far beyond simple wallet assistance: it installs external software, stores sensitive material locally, modifies packaged assets, schedules background jobs, and deletes wallet-related artifacts. In a cryptocurrency skill, those hidden side effects materially increase the chance of secret exposure, environment tampering, or destructive actions without users fully understanding the operational risk.

Description-Behavior Mismatch

Medium
Confidence
99% confidence
Finding
The skill explicitly directs the agent to write a newly generated mnemonic to a plaintext file, even if deletion is scheduled later. Seed phrases are effectively full wallet ownership credentials, so temporary plaintext persistence creates a severe theft risk from local compromise, backups, shell history, indexing, or race conditions before deletion occurs.

Context-Inappropriate Capability

Medium
Confidence
91% confidence
Finding
Scheduling background deletion jobs via at or sleep adds autonomous system behavior that exceeds normal wallet guidance and can behave unpredictably across environments. While less severe than plaintext mnemonic storage itself, it increases attack surface, may require elevated package installation, and can leave sensitive files behind if the cleanup job fails.

Context-Inappropriate Capability

Low
Confidence
89% confidence
Finding
The instruction to append transaction mentions to a workspace log creates persistent records of wallet addresses, transaction hashes, and activity context unrelated to the core function of executing wallet commands. This can expose sensitive financial metadata to other tools, users, or backups without consent.

Context-Inappropriate Capability

Medium
Confidence
96% confidence
Finding
The script downloads and immediately executes a remote installer with `curl | bash`, giving network-delivered code full execution on the local system. Even though installing Foundry is consistent with the skill's purpose, this pattern is dangerous because any compromise of the remote host, transport path, or installer content results in arbitrary code execution.

Context-Inappropriate Capability

Medium
Confidence
92% confidence
Finding
The script goes beyond wallet onboarding by attempting to install the `at` package and modify host state, potentially via `sudo`, without explicit user confirmation. In a wallet-management context, unexpected package installation and OS job management expand the trust boundary and can surprise users or be abused to make privileged system changes.

Context-Inappropriate Capability

Medium
Confidence
84% confidence
Finding
Scheduling OS-level jobs with `at` is an unnecessary host capability for a cast-based wallet onboarding script and introduces persistence outside the script's runtime. Even though the intended action is file deletion, using scheduler infrastructure increases operational risk and can fail in non-obvious ways, especially when handling highly sensitive mnemonic material.

Intent-Code Divergence

Low
Confidence
95% confidence
Finding
Although the script says the private key is 'not printed again', it later passes the private key to `cast wallet address --private-key ...` as a command-line argument, which can be exposed through process listings, shell auditing, or other local monitoring. For wallet secrets, this is a meaningful disclosure risk because any local user or telemetry agent observing argv may recover the key.

Missing User Warnings

Medium
Confidence
93% confidence
Finding
Persistently logging transaction mentions without warning the user creates silent data collection around wallet activity. In the cryptocurrency context, even metadata such as addresses, tx hashes, and descriptions can reveal holdings, counterparties, and operational patterns.

Missing User Warnings

Medium
Confidence
93% confidence
Finding
The script warns only that Foundry will be installed, but does not explicitly tell the user that it is fetching code from the network and executing it immediately. This reduces informed consent and makes a high-risk action easier to trigger in automation or by unsuspecting users.

Missing User Warnings

Medium
Confidence
94% confidence
Finding
The script silently attempts to install `at` using apt/apt-get, including through `sudo`, without an explicit warning or confirmation before altering the system. Auto-modifying packages is risky in a wallet helper because users expect key management, not privileged package management, and such behavior can break systems or normalize unsafe trust in the script.

Missing User Warnings

Medium
Confidence
97% confidence
Finding
The script stores the wallet password in a persistent plaintext file at `${APP_DIR}/pw.txt`, then later uses that file to unlock the keystore. Even with `umask 077` and `chmod 600`, any local process or user running as the same account, backup tooling, accidental commits, or filesystem compromise can recover the password and decrypt the keystore, undermining the protection of the private key.

Ssd 3

Medium
Confidence
94% confidence
Finding
The skill directs storage of transaction-related wallet activity without clear consent or necessity. Because the skill handles crypto operations, such records may constitute sensitive financial telemetry and can be exposed through workspace sharing, indexing, or compromise.

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
86% confidence
Finding
no confirmation

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.

Session Persistence

Medium
Category
Rogue Agent
Content
3. **Show wallet + network status.** When `check_wallet` finds a wallet, run `scripts/show_network.sh` and query the balance (e.g., `cast balance <ADDRESS> --rpc-url <RPC_URL> --ether`) so the user sees the current native balance, network name, chainId, and RPC URL without being prompted to check anything manually.
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 
...[truncated 25 chars]
Confidence
98% confidence
Finding
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

VirusTotal

65/65 vendors flagged this skill as clean.

View on VirusTotal