Back to skill

Security audit

Monero Wallet

Security checks for vulnerabilities and agentic risk

Overview

This skill is a real Monero wallet controller, but it lets an agent make irreversible payments, including payments triggered by outside websites, without clear per-payment approval.

Install only if you intend to give an agent real Monero wallet authority. Use a minimally funded wallet, enforce gateway spending limits, require manual approval for every transfer or XMR402 payment, restrict paywalled requests to trusted HTTPS origins, avoid passing AGENT_API_KEY on the command line, and review or pin the external Docker setup and Python dependencies before use.

Vulnerability Patterns
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
Findings (4)

T09 · Insecure Skill Coding Practices

Error
Location
SKILL.md:90
Finding

Untrusted XMR402 challenges can initiate wallet payments without explicit user approval

Content
View full analysis
", amount="", message="", timestamp="" ``` - **address**: Monero subaddress to pay. - **amount**: Amount in atomic units (Piconero). Divide by `1e12` for XMR. - **message**: Anti-replay nonce. Pass this EXACTLY to the `pay-402` command. ### Step 2: Pay the Invoice ```bash python3 scripts/monero_wallet_rpc.py pay-402 "" "" ``` ``` ```python def pay_402(address, amount_xmr, message, api_key=None): """XMR402 Protocol: Pay a 402 challenge and get back an Authorization header.""" res = api_call("pay_402", method="POST", data={ "address": address, "amount_xmr": float(amount_xmr), "message": message }, api_key=api_key) print(json.dumps(res)) ``` ### Technical Analysis The Skill directs the agent to pay an XMR402 challenge whenever an external HTTP service returns status 402. The destination address, amount, and nonce are controlled by that external service. Neither the instructions nor the helper require explicit user approval, validate that the payment matches an expected price, restrict eligible origins, or enforce a caller-defined transaction budget. The documented gateway spending limits reduce the maximum potential loss but do not establish that an individual payment is authorized. Duplicate-nonce checks also prevent only repeated payment of the same challenge; they do not establish the legitimacy of the initial payment. ### Attack Path 1. An agent accesse ...[truncated 892 chars]
Remediation
View remediation

T03 · Remote Payload Retrieval and Execution

Warning
Location
SKILL.md:17
Finding

Mutable external installation instructions retrieve and execute unaudited container payloads

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/monero_wallet_rpc.py:87
Finding

Gateway API key can be exposed through command-line arguments

Content
View full analysis
Remediation
View remediation

T08 · Insecure Dependencies

Warning
Location
scripts/monero_wallet_rpc.py:8
Finding

Python dependency is installed without version or integrity pinning

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (10)

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

The description presents the skill as a wallet-management interface, but the body also introduces an XMR402 payment flow that can cause the agent to pay third-party services and interact with arbitrary external URLs. That hidden behavioral expansion is dangerous because reviewers may approve a local-wallet skill without realizing it authorizes spending in response to external 402 challenges.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
92% confidence
Finding

The skill declares capabilities that involve environment-variable access and network activity, but it does not define an explicit tool scope such as permissions or allowed-tools. In an agent setting, that omission weakens policy enforcement and can let the skill be invoked with broader runtime powers than reviewers or users expect, especially given that it can initiate wallet actions and outbound HTTP requests.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The skill documents irreversible transfer and payment actions without requiring an explicit confirmation or approval step before spending wallet funds. In an autonomous agent context, that can turn prompt injection, user misunderstanding, or malicious third-party content into immediate irreversible financial loss.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · SKILL.md (reported line 81)May include surrounding context.

Example:

bash
curl -H "X-API-KEY: $AGENT_API_KEY" http://127.0.0.1:38084/sync

XMR402 Payment Gating (v1.0.1)

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

Although the skill is framed as using a secure local gateway, it instructs the agent to make arbitrary requests to external paywalled URLs and then spend Monero based on unauthenticated challenge data from those sites. This creates a direct path for untrusted external services to induce wallet payments, potentially draining funds or causing repeated micropayments to attacker-controlled endpoints.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
88% confidence
Finding

The skill explicitly directs requests to arbitrary external URLs as part of the payment-gating flow. This increases exposure to malicious services that can fabricate or manipulate 402 challenges to trigger unnecessary payments or influence subsequent agent behavior.

Content

Scanner excerpt · SKILL.md (reported line 137)May include surrounding context.

Example Flow

bash
# 1. Attempt access (returns 402)
curl -i https://api.example.com/protected
# => 402, WWW-Authenticate: XMR402 address="5...", amount="10000000000", message="abc123..."

# 2. Check if already paid for this nonce

External Transmission

Medium
Category
Data Exfiltration
Confidence
90% confidence
Finding

Retrying external requests with an authorization header containing payment proof sends transaction-linked metadata to third-party endpoints. While expected for XMR402, it still expands the trust boundary and can leak payment correlation data or enable abuse when interacting with untrusted services.

Content

Scanner excerpt · SKILL.md (reported line 154)May include surrounding context.

http://127.0.0.1:38084/get_proof

3. Retry with proof

curl -H 'Authorization: XMR402 txid="...", proof="..."' https://api.example.com/protected

=> 200 OK

text

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The security comment is misleading: sending the API key over plain HTTP to 127.0.0.1 does not guarantee safety, because any local process able to bind or proxy that port can receive the credential. In an agent runtime, localhost services are part of the attack surface, so a malicious or compromised local process could capture the API key and abuse wallet operations.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The skill includes a pay_402 operation that can initiate Monero payments for challenge-response authorization, which expands behavior beyond straightforward wallet management described in the manifest. In an agent context, hidden or under-disclosed payment capabilities are dangerous because they can be invoked to transfer funds in response to untrusted remote prompts or protocol challenges, increasing the chance of unintended spending.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Low
Category
Not specified by scanner
Confidence
87% confidence
Finding

Line L012 states the skill interacts with a wallet through a secure local gateway, suggesting a local-only operational model. Later lines L086-L155 instruct the agent to access external URLs, parse payment challenges from them, and resend authenticated requests, which contradicts that local-only framing rather than merely omitting detail.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.