Bank Skills

Security checks across malware telemetry and agentic risk

Overview

This skill is purpose-aligned but needs review because it can move real bank and crypto funds, and its wallet-key handling has weak defaults and no clear transaction approval limits.

Only install this if you intentionally want an agent to access Wise and possibly crypto funds. Use a least-privilege Wise token, set WISE_PROFILE_ID, set a strong CLAWBANK_WALLET_PASSWORD, fund wallets with small amounts only, require manual approval for every transfer or swap, and monitor/revoke credentials if anything looks wrong.

VirusTotal

66/66 vendors flagged this skill as clean.

View on VirusTotal

Risk analysis

Artifact-based informational review of SKILL.md, metadata, install specs, static scan signals, and capability signals. ClawScan does not execute the skill or run runtime probes.

#
ASI02: Tool Misuse and Exploitation
High
What this means

If the agent is mistaken or influenced by bad instructions, it could initiate a real bank transfer using the user's Wise token.

Why it was flagged

The send-money flow creates and funds a Wise transfer in one action; the reviewed artifacts do not show a separate confirmation gate, amount cap, recipient allowlist, or dry-run before funds move.

Skill content
Steps:
        1. Create quote
        ...
        4. Create transfer
        5. Fund transfer
...
    _fund_transfer(client, pid, transfer["id"])
Recommendation

Require explicit human confirmation for every transfer, show recipient/amount/fees before funding, add spending limits and recipient allowlists, and consider disabling autonomous model invocation for money-moving actions.

#
ASI03: Identity and Privilege Abuse
Medium
What this means

Transfers or balance checks could apply to the wrong Wise profile if the token has access to more than one profile.

Why it was flagged

When WISE_PROFILE_ID is not set, the skill automatically uses the first Wise profile available to the API token, which may not be the intended account/profile for transfers.

Skill content
If *profile_id* is provided, return it directly.
Otherwise, fetch profiles from the API and return the first one.
...
return str(profiles[0]["id"])
Recommendation

Set WISE_PROFILE_ID explicitly, use least-privilege Wise tokens, and require the selected profile to be displayed and confirmed before any transfer.

#
ASI03: Identity and Privilege Abuse
High
What this means

If the wallet holds funds, anyone or any process with access to the keystore may be able to decrypt it when the default password is used; exporting the key also risks exposing full wallet control in agent outputs or logs.

Why it was flagged

The local wallet keystore is encrypted with a public default password unless the user overrides it, and the code includes a function that returns the private key.

Skill content
DEFAULT_PASSWORD = "clawbank-default"
...
password = os.environ.get(WALLET_PASSWORD_ENV, DEFAULT_PASSWORD)
...
return {
        "private_key": pk_hex,
        "address": address,
Recommendation

Require a user-supplied strong wallet password with no default, store keys in an OS keychain or hardware wallet where possible, and keep private-key export behind explicit manual confirmation or remove it from agent-accessible tools.

#
ASI02: Tool Misuse and Exploitation
High
What this means

If this advertised swap path is used, a user could receive far fewer tokens than expected or lose value due to price movement, MEV, or a bad route.

Why it was flagged

The included swap path can sign and broadcast an on-chain transaction while accepting zero minimum output, which removes slippage protection.

Skill content
amount_out_min=0,  # TODO: Use Quoter for slippage protection
...
tx_hash_bytes = w3.eth.send_raw_transaction(signed.raw_transaction)
Recommendation

Calculate and enforce a minimum received amount, show the quote and slippage to the user, and require confirmation before signing and broadcasting swaps.

#
ASI04: Agentic Supply Chain Vulnerabilities
Low
What this means

Future dependency versions could change behavior in a finance-related skill, even if the current source appears coherent.

Why it was flagged

Dependencies are declared as open version ranges rather than pinned versions with a lockfile in the provided artifacts.

Skill content
dependencies = [
    "fastmcp>=0.9.0",
    "httpx>=0.25.0",
    "pydantic>=2.0.0",
    "web3>=6.0.0",
    "eth-account>=0.11.0",
Recommendation

Pin and lock dependency versions, publish checksums or a lockfile, and review dependency updates before using the skill for real funds.