Address Poisoning Attacks: How They Work and How to Avoid Them

14 mins read

Address Poisoning Attacks: How They Work and How to Avoid Them

Home>Industry Insights>Address Poisoning Attacks: How They Work and How to Avoid Them
Share

A strange zero-value transfer or a tiny unexpected deposit appears in your wallet history, and the other address looks almost exactly like one you used last week. That is often an address poisoning attack. The attacker generates a lookalike wallet address that matches the first and last characters of a real counterparty, plants it in your history, and waits for you to copy the truncated lookalike the next time you send funds.

The attack does not steal private keys or break the cryptography that protects a wallet. The loss happens when you, or an operator on a withdrawal desk, send funds to the wrong destination. A confirmed send usually cannot be reversed by the sender.

What Address Poisoning Is

Address poisoning is a scam that exploits how wallets and explorers display long hexadecimal addresses. Most interfaces shorten an address to a prefix and a suffix, so people learn to recognise the start and the end, and treat recent history as a convenient address book.

The attacker needs three things: a lookalike address, a planted history entry, and a mistaken send that the victim makes themselves. Until that send happens, the planted entry is clutter. It does not give the attacker control of the wallet.

How an Address Poisoning Attack Works

First, the attacker watches the chain for a real transfer, often of a widely used stablecoin, and notes the sender and the intended recipient.

Second, the attacker brute-forces a vanity address. They generate private keys until they produce an address whose first and last characters match the intended recipient, or sometimes the sender. They cannot edit the hex string of an existing address. The only practical way to get a chosen prefix and suffix is to keep generating keys, and each extra matching character makes that work much harder.

Third, they plant that lookalike in the victim's history, usually within minutes of the original transfer, so it sits next to a legitimate entry. Many wallets and mobile screens still hide the middle of the address, which is exactly the part that differs.

Fourth, the victim copies the lookalike from history, or selects it from a recent-activity list, and sends a real transfer. Once that transaction confirms, the funds are with the attacker.

People fall for this when they are moving quickly, especially after a small test transfer, and when they only check the characters the screen already shows. Research also finds that attackers disproportionately target active, high-balance wallets rather than brand-new ones.

Three Ways Attackers Plant a Lookalike in History

Tsuchiya, Dong, Soska and Christin document three planting methods. Elliptic and Etherscan describe the same pattern.

A Tiny Transfer of a Real Token

The attacker sends a very small amount of a genuine token, such as USDT or USDC, from the lookalike address to the victim. The transfer is real, so it appears in ordinary incoming history. This is the original form of the attack. It costs the attacker the tokens they send, plus the network fee, so cheaper variants are now more common.

A Zero-Value Transfer

On Ethereum-style tokens, a public transferFrom function can record a transfer of zero tokens even when the wallet owner did not initiate it. Popular stablecoin implementations allow that zero-value case. The attacker logs a transfer that appears to go from the victim to the lookalike, for zero of the same token the victim just sent. No funds move, and the attacker does not gain access to the wallet. The entry is there to be copied. Etherscan hides zero-value transfers by default; many wallet interfaces still show them.

A Counterfeit-Token Transfer

The attacker creates a token with a name or symbol that resembles a familiar asset and records a transfer of a realistic amount from the victim to the lookalike. Because they control the token contract, they can emit that event without the victim's approval. The amount looks right, which can make the poisoned row harder to dismiss than a zero. This is a different problem from being offered a fake token to hold or trade, which is covered in CoinsDo's guide to verifying a token and avoiding fakes.

These methods are sometimes combined. A single transaction can plant entries against many wallets at once.

How Address Poisoning Differs from Dusting, Key Theft and Approval Phishing

Dusting and poisoning can both put a tiny, unsolicited transfer in a wallet's history, which is why the terms get mixed up. A dusting attack sends small amounts to many addresses so the attacker can later watch how that dust moves and cluster or deanonymise wallets. The aim is tracking and privacy, not a mistaken payout. Address poisoning uses a lookalike address, delivered by dust, a zero-value event or a fake token, to induce a copy-paste error. Tiny transfers appear in both, but the goals and the defences differ.

Key theft is a different failure. If someone has your seed phrase, private key or a malicious approval that lets them move tokens, they can drain the wallet without tricking you into a send. Address poisoning leaves those secrets untouched. Approval phishing and wallet drainers work by getting you to sign a token approval or a malicious contract call. Poisoning waits for you to paste the wrong destination into an ordinary transfer.

Clipboard malware is also separate: it replaces an address you have already copied with an attacker address before you paste. Poisoning hopes you will copy the wrong entry yourself.

What the Research Shows, and One Documented Case

A peer-reviewed measurement of the attack is "Blockchain Address Poisoning," a USENIX Security 2025 paper by Taro Tsuchiya, Jin-Dong Dong, Kyle Soska and Nicolas Christin (PDF). The authors ran their own detector on Ethereum and Binance Smart Chain (BSC) from 1 July 2022 to 30 June 2024. They recorded about 270 million on-chain attack attempts that targeted more than 17 million addresses.

Targeted is not the same as robbed. Of those attempts, the authors confirmed 6,633 successful transfers, with losses of at least $83.8 million. Those loss figures cover the major stablecoins in the study, on those two chains, in that two-year window. They are not a worldwide total, and they are a lower bound even on the chains studied. The authors captured a widely reported May 2024 WBTC transfer as an attack attempt, but they excluded that loss from the $83.8 million because WBTC was outside their stablecoin scope.

Chainalysis reconstructed that case in a 23 October 2024 report. On 3 May 2024 at 09:14 UTC, a high-balance Ethereum wallet sent a transfer to a counterparty beginning 0xd9A1b, which Chainalysis describes as likely a test payment. Minutes later, the same wallet sent about $68 million in WBTC to a lookalike beginning 0xd9A1c. As Chainalysis notes, the two addresses look the same if you only check the first six characters, 0xd9A1. The attacker later moved a larger dollar amount as the price of bitcoin rose. After on-chain negotiation, the attacker returned the original $68 million on 9 May, and kept about $3 million from that appreciation. Recovery in this case was unusual. Most mistaken sends are not returned.

CoinsDo's August 2025 Crypto Roundup flagged address poisoning as a wallet-interface problem rather than a protocol bug.

How to Avoid Address Poisoning Attacks

The defence is to verify the intended recipient before funds move, from a source you already trust, not from recent activity.

Save frequent counterparties in a contact list or address book and copy from there, or from an out-of-band confirmation such as a known-good message or invoice. Do not copy a destination from wallet history, an explorer activity tab or a "send to recent" list, including when you are paying yourself.

When you do check an address, read the middle characters as well as the start and the end. The lookalike is built to survive a glance at a truncated display. Some wallets now show more of the address and warn you when a destination closely resembles one you have used before. MetaMask's help centre describes a blocking lookalike warning, plus a first-time-send alert for addresses you have never interacted with. Those warnings help. They are not perfect, and they are not present in every wallet.

A small test transaction can limit the loss if you have already pasted the wrong address, because the mistake shows up while the amount is still small. Chainalysis found hundreds of $1 to $100 payments in one campaign that, in its reconstruction, were likely tests that never reached the intended address and so were not followed by a larger send. A test is not a substitute for independently verifying the recipient. In the May 2024 WBTC case, the likely test went to the genuine counterparty, and the large transfer still went to the lookalike. Elliptic also notes that attackers watch for test transfers as a signal that a larger payment may follow, and can plant a lookalike within minutes so it sits next to the test in history. Confirm the full destination from a trusted source, then send the test, then confirm the same full destination again before the main amount.

A hardware wallet that displays the destination on its screen adds a useful pause. It does not catch a lookalike you have already chosen.

If a zero-value or tiny unexpected transfer appears, leave it alone. Do not try to return it, approve a related token, or copy any address from that row.

How Exchange, PSP and Withdrawal Operations Teams Reduce the Risk

For a withdrawal desk, the destination is a controlled input, not a convenience field.

Keep a verified list of known counterparties and require a second person to approve any new or high-value destination, with the full address visible on the reviewer screen. Treat "paste from explorer activity" or "reuse the last paid address from history" as a runbook violation. If your withdrawal interface offers send-to-recent, turn it off for staff flows, or reserve it for destinations that have already been verified.

Dual control does not detect lookalikes. It gives a second set of eyes a chance to catch a rushed paste before it is signed. Tiered approval workflows are the usual place to put that rule: low-value payouts to known destinations can move automatically, while new destinations and large amounts wait for a person who is checking the full string.

Know Your Transaction (KYT) screening also has a different job. It flags counterparties for risk. It does not confirm that a destination is the address you meant to pay. A freshly generated lookalike can have little or no risk history. When KYT runs, relative to a sweep, matters for incoming funds. It still will not catch a typo or a poisoned paste on the way out.

Address format validation is narrower still. It tells you the string is well formed for the network you selected. It does not tell you that the address belongs to the intended recipient.

CoinsDo does not automatically detect or block address poisoning. What a withdrawal stack can do is make a hasty paste harder to complete. CoinSend's custom approval flows let a platform set reviewer tiers, thresholds and expiry times so a second approver reviews the destination and the amount. CoinSign, the approval feature inside CoinSend, signs those approvals with RSA or HMAC-SHA256. That is an authorization trail. It is not a lookalike detector.

Frequently Asked Questions

Can Address Poisoning Drain a Wallet by Itself?

No. The planted transfer does not move your funds or expose your keys. The attacker is paid only if you later send a genuine transfer to the lookalike.

Is a Zero-Value Transfer Dangerous on Its Own?

No. A spoofed zero-value transfer is clutter in the event log and the interface. Do not interact with it, and do not copy an address from it. Hide zero-value rows if your explorer or wallet allows it.

The Habit to Remember

If you remember one habit, make it this: treat transaction history as a record of what happened, not as an address book. Confirm the recipient independently, then send. For teams that move customer funds, put that confirmation into the withdrawal process so it still happens when someone is in a hurry.

CoinsDo Team

The Author

CoinsDo Team

business@coinsdo.com