Monero Isn’t Bulletproof: Meet XMRPot - The Honeypot Proxy for Passive Surveillance
Most people treat Monero like it’s a black box. They assume once they hit "send", it’s all invisible. Anonymous. Untouchable.
But Monero’s privacy guarantees start at the protocol level - not the network level. And that’s where most people get exposed.
We built a tool to show how.
🔥 Enter XMRPot - a honeypot proxy designed to look like a public Monero remote node.
Except it’s not.
- It doesn’t mine.
- It doesn’t broadcast honestly.
- It doesn’t care about helping the network.
What it does do is log every connection that comes through:
- IP address
- Endpoint requested
- Raw POST data
- Response returned
- Timestamps
All of it - Base 64 encoded and archived.
In short: it’s a silent observer.
🎯 What Does It Do?
XMRPot acts as a fake Monero node that forwards requests to a real upstream node while recording everything in the middle.
It exposes two hidden routes (secured via UUID):
- /monitor/ - dumps all logged request data
- /statistics/ - returns summarized analytics:
- Total requests.
- Unique IP's.
- Per-route usage breakdown.
- No authentication. No complexity. Just spin it up and watch.
🧠 How It Works (Technical Breakdown)
- Proxy Handling
- It proxies any whitelisted Monero RPC endpoint to an upstream node.
- It supports both GET and POST methods.
- Unsupported routes return 404.
- It proxies any whitelisted Monero RPC endpoint to an upstream node.
2. Logging
- IP (Via X-Forwarded-For or remote address).
- Requested endpoint.
- Sent data.
- Received data.
- Status code.
- Timestamp.
Logs are stored in a flat "request_log.json" file (JSON array of entries).
All data is Base64 encoded to preserve binary payload integrity.
3. Monitoring and Statistics
- /monitor/ - Dumps full log of actions.
- /statistics/ - see below...
- Unique IP count.
- Request counts per route.
- Total request volume.
- Deployment.
- /monitor/ - Dumps full log of actions.
4. Runing the Tool
- Run with: "python3 xmrpot.py" and that's it.
- Listens on 0.0.0.0:18081 by default.
- You get a randomized UUID for accessing sensitive routes on startup.
🧨 Why This Matters
Monero’s protocol is strong - no question.
But the network layer is full of holes.
If you connect to a malicious remote node (like this one), your metadata is exposed:
- Home IP's.
- Timing correlation.
- Potential to fingerprint wallet behavior.
Most users never verify what node they’re talking to. They trust random ones. And trust, in a privacy system, is the biggest vulnerability.
🔗 Source
Tool source code:
👉 github.com/covertsecurity/xmrpot
If you care about privacy, run your own node.
If you're curious what people leak when they don’t pay attention - now you can watch.