Address poisoning attack: how it works and how to stop it
By Al Jobson · 10 min read · September 2026
On 3 May 2024 a single Ethereum wallet sent 1,155 WBTC, worth $68 million at the time, to an attacker in a textbook address-poisoning attack[1]. The victim had just moved the same funds between two of their own wallets. The attacker watched the transaction, generated a vanity address whose first and last six characters matched the intended recipient, sent a $0 transfer from it to appear in the sender's history, and waited. The next transfer copied the wrong address out of history. Funds gone in one click. Here is how the attack works, why the UI makes it work, and what actually helps in 2026.
The mechanic, in one page
An Ethereum address is 42 characters: 0x plus 40 hex characters. No wallet UI shows all 40. Metamask, Trust, Rabby, Etherscan and every mobile explorer truncate to 0xABCD…1234 or similar. That truncation is the vulnerability. If an attacker generates a private key whose address matches the first 4 to 8 hex characters and the last 4 to 8 hex characters of your target, the two addresses look identical in every wallet UI shipping today[2].
Generating a vanity address that matches an 8-hex prefix and 8-hex suffix takes about 2^64 elliptic-curve keypair generations. Infeasible on a laptop, trivial on a rack of GPUs. Halborn put the cost at hundreds of dollars for an 8+8 match; commodity Profanity-style tools crank out 6+6 in minutes[3]. The economics work at that price because one successful hit pays back the entire GPU farm.
Once the attacker has the vanity address, they push a transaction into the victim's history. Three variants:
- Zero-value ETH / native transfer. The oldest variant. A 0-ETH tx from lookalike to victim. Appears in Etherscan's "Transactions" tab. Modern wallets started filtering these, but most Etherscan-derived UIs still show them.
- Zero-value ERC-20 transferFrom. Any address can emit a Transfer event from any other address using a zero-value
transferFromcall on some non-conforming tokens. The wallet's token history then shows the victim sending 0 tokens to the lookalike address, making it look like a recipient the victim already trusted[4]. This variant defeated even Metamask's filtering for months. - Fake token airdrop. The attacker deploys a token with the same ticker and 18 decimals as USDT or USDC, mints 1,000 of it to the victim, and uses it as the vehicle for the zero-value event. Victim's history shows an apparent "USDT" transaction to the lookalike; it copies clean.
Scale, 2023 to 2025
Address poisoning is high-volume and low-hit-rate. Bitrace and PeckShield indexed more than 270,000 unique poisoning senders on Tron alone by end of 2024[5]. Cyvers put cumulative EVM losses at $83M across 2022 to 2024, with a long tail of individual $1k to $5k victims and a small number of very large ones[6].
| Date | Chain | Amount | Notes |
|---|---|---|---|
| May 2024 | Ethereum | 1,155 WBTC ≈ $68M | Attacker returned funds after negotiation[1] |
| Jan 2024 | Arbitrum | $4.7M | USDC to lookalike, PeckShield alert[7] |
| Dec 2023 | Ethereum | $1.7M | Chainalysis timeline[8] |
| Sep 2024 | Ethereum | $32M | Institutional victim, 0-value ERC-20 variant |
| Q1 2025 | Tron | $1.8M / month avg | Bitrace quarterly report[5] |
Two patterns show in the data. First, the attack is chain-agnostic. EVM, Tron and Solana each have their own variant because each has a truncated-address UI. Second, retail loss is per-victim small and per-attacker high, exactly the profile that funds industrialised operation.
Why the UI is the vulnerability
The technical primitive, a 40-hex address, is not the problem. The problem is what wallet UIs did with it. Three UX shortcuts, each individually reasonable, combine into a class of attack:
- Truncated display. Users read the first and last few characters, never the middle. Vanity-address generation defeats prefix+suffix matching, not full-string matching.
- Transaction history as address book. The most common way retail users select a recipient is to scroll transaction history and tap. History includes anything on-chain, not just what the user chose.
- Zero-value events treated as normal. Explorers and wallets display every emitted Transfer event without distinguishing "value transferred" from "event fired." Attackers exploit this to make hostile transactions look like historical friendly ones.
The fix is on the client. Every technical mitigation below closes one of these three shortcuts.
Defenses that actually work
| Defense | What it fixes | Effort |
|---|---|---|
| Address book | Never copy from history | User discipline, one-time save |
| ENS / SNS names | Human-readable recipient | Sender + recipient both need it[9] |
| Full-address confirmation | Truncation attack | Wallet feature: show all 42 chars on send |
| Zero-value tx filtering | Poisoned history | Wallet feature: hide 0-value incoming |
| Spam-token filtering | Fake USDT/USDC variant | Wallet feature: verified token list |
| Lookalike warning | Recipient similar to prior use | Wallet feature: Levenshtein / prefix-suffix check |
| First-time-recipient flag | Attacker's fresh address | Wallet feature: hard-block or warn |
| Transaction simulation | Shows real transfer + recipient | Blockaid, Rabby, Wallet Guard[10] |
Wallet-by-wallet, where the mitigations are shipped
| Wallet | Address book | 0-value filter | Lookalike warn | 1st-time flag |
|---|---|---|---|---|
| MetaMask | Yes (Contacts) | Partial (2024 update)[11] | No native | No |
| Rabby | Yes (Whitelist) | Yes | Yes | Yes[12] |
| Trust Wallet | Yes | Partial | No | Warning banner |
| Phantom | Yes | Yes (Solana spam filter)[13] | No | Warning |
| Ledger Live | Yes | No | No | No |
| Coinbase Wallet | Yes | Yes | Yes | Yes |
| VEYRNOX | Yes | Yes (default) | Yes (Levenshtein + prefix-suffix) | Hard warn on unknown recipient |
The pattern is clear. Wallets that treat the send screen as a security surface (Rabby, Coinbase Wallet, VEYRNOX) ship real defenses. Wallets that inherit their history view straight from a chain explorer ship the attack surface with it.
Practical guidance for individual users
- Never copy a receiving address from your transaction history. Ever. Even once. Even for the person you sent to yesterday. Save the address to your wallet's contacts or address book once, verified end-to-end, and use that entry.
- For anything above a wire-transfer threshold, verify the middle of the address. Copy it, paste it into a text editor, read all 40 hex characters against the intended address. This takes 20 seconds and stops the attack in every documented case.
- Use ENS or SNS where both parties support it. A human-readable name that resolves to the current address cannot be poisoned. Watch for expired ENS names being re-registered by attackers.
- Turn on transaction simulation. Blockaid, Wallet Guard, Rabby's built-in check, or any wallet that ships one. They compute the real state change and show it before you sign.
- Send $1 first. For any first-time large transfer, send a test amount and verify receipt at the destination out of band before the main send.
- Watch for the specific pattern. If a recent tx shows a $0 transfer from your own address to somewhere you never sent to, you are being targeted. Stop, close the app, verify addresses out of band before your next transaction.
What the industry still needs to fix
Explorers should stop rendering zero-value events as identical to real transfers. Etherscan's 2024 filtering pass helped, but did not close the ERC-20 event variant. Wallets should default to hiding zero-value incoming transactions instead of making it a setting. Every send screen should show the full recipient address and flag first-time recipients above a value threshold. None of this is technically hard. Every wallet SDK team has known about the attack since at least the SafeMoon variant in 2022[14].
Chain-level answers have been proposed (EIP-3770 chain-specific addresses, payment request URIs, and account abstraction with signer-side allowlists[15]), but adoption is slow. The reliable defense in 2026 is client-side: use a wallet that ships the mitigations, and never trust an address you copied off a screen without reading every character.
Bottom line
Address poisoning is not a cryptographic failure. It is a UX failure the industry has known about for four years and shipped mitigations for unevenly. One $0 transfer, a truncated display, and a copied address is all that stands between a wallet and a total loss. The fix is boring: address book, full-address verification, first-time-recipient warning, transaction simulation. Every one of those exists in production wallets today. Use a wallet that ships them, and stop copying addresses from your history.
Address safety in VEYRNOX
VEYRNOX filters zero-value incoming events by default, flags recipients whose prefix or suffix matches a previously-used address, and requires an extra confirmation for first-time recipients above a user-set threshold. Download or read the security model.
Sources
- CertiK, "$68M WBTC address-poisoning post-mortem." certik.com
- Chainalysis, "Address Poisoning Explained." chainalysis.com
- Halborn, "Vanity address generation cost." halborn.com
- SlowMist, "Zero-value transferFrom poisoning technique." slowmist.medium.com
- Bitrace, "2024 Tron Poisoning Report." bitrace.io
- Cyvers, "Address Poisoning 2022-2024 Retrospective." cyvers.ai
- PeckShield alert stream, Twitter/X. x.com/peckshieldalert
- Chainalysis, "2024 Crypto Crime Timeline." chainalysis.com
- ENS Documentation. docs.ens.domains
- Blockaid, transaction simulation. blockaid.io
- MetaMask, "Address-poisoning mitigations." support.metamask.io
- Rabby, whitelist and first-time-recipient warnings. rabby.io
- Phantom, "Solana spam-token filtering." phantom.com
- Elliptic, "SafeMoon address-poisoning variant." elliptic.co
- EIP-3770, Chain-specific addresses. eips.ethereum.org
- Etherscan, "Zero-value transfer display policy." info.etherscan.com
- Coinbase Wallet, security features. help.coinbase.com
- Trail of Bits, "Address-poisoning threat model." blog.trailofbits.com
- Trust Wallet, address-verification docs. community.trustwallet.com
- Cointelegraph, coverage of $68M WBTC case. cointelegraph.com
- ScamSniffer, address-poisoning tracker. x.com/realScamSniffer
- Web3 Antivirus, wallet risk scoring. web3antivirus.io
Al Socrates Jobson, Co-Founder & CTO, Veyrnox LTD · ← Back to Blog