All vulnerabilities
HIGHWeb3exploited in the wild

WEB3-ADDRESS-POISONING-2024

Web3 · Wallets · Address poisoning / transaction-history spoofing

Summary

Address poisoning exploits the human habit of verifying only the first and last few characters of a wallet address; on May 3, 2024 a whale lost roughly $68M in WBTC after copying a poisoned look-alike address, the single largest recorded case. Attackers brute-force a vanity address whose leading and trailing characters match an address the victim recently transacted with, then seed it into the victim's history. They do this cheaply by emitting a Transfer event the victim did not authorize: a zero-value ERC-20 transferFrom, or a fake-token contract that emits Transfer logs, so the look-alike address appears in the wallet's recent-activity list at essentially gas-only cost (the $68M poisoning transaction carried 0 ETH value and about $0.65 gas). Later, the victim copies the recipient from their own transaction history, pastes the attacker's near-identical address, and sends funds directly to it. No signature exploit is involved; the attack is pure UI deception of the wallet's transaction-history display.

How to avoid it in your code

  • Wallets must hide or clearly flag zero-value and unsolicited spam transfers and never surface unverified look-alike addresses as copyable history entries.
  • Builders should display full addresses or middle-character checksums in send flows, not truncated forms that enable look-alike matching.
  • Users must verify the entire destination address character-by-character, not just the prefix and suffix, before every send.
  • Users should send from a saved address book or whitelist and never copy a recipient from raw transaction history.
  • Wallets should support address labeling or a tiny test transfer so users confirm intended recipients.

References

Related vulnerabilities

All Web3 →