The fake Uniswap that drained everything
November 2024. A holder in Los Angeles searches "uniswap" on Google. The top sponsored ad is uniswap-app[.]org — looks identical to the real app.uniswap.org. He connects his wallet to swap ETH for USDC. The site requests a PermitBatch signature for "gasless token approval." He signs.
The Permit2 batch covered USDC, USDT, DAI, WBTC, and four other tokens — every token he had already approved to Permit2 during earlier swaps. Total drained over the next eight minutes: $312,000.
Why Permit2 is uniquely dangerous when phished
Permit2 is Uniswap's universal approval contract. One contract address holds approval rights that many integrated dApps draw on. Sign a malicious PermitBatch and you grant a single attacker address the right to drain every token in the list, in one signature. There is no per-token review — the wallet shows a typed-data prompt with a list of token symbols and a single "Sign" button.
The four-step verification before any Uniswap signature
- The URL is
app.uniswap.org. Notuniswap-app[.]org, notuniswap-dapp[.]net, notuniswap[.]fi. Bookmark the real one and never use search. - Check the spender, not the contract. Open the full details of the request. The Permit2 contract,
0x000000000022D473030F116dDEE9F6B43aC78BA3on Ethereum mainnet, appears in a phishing signature exactly as it does in a real one, so it proves nothing. The field that matters is the spender: for a real Uniswap swap it is a Uniswap router contract listed in Uniswap's official documentation. If you cannot match the spender to those docs, reject. - The token list matches what you are swapping. Swapping ETH for USDC spends native ETH, which needs no token permit at all. A swap that starts from one token should cover that one token, not eight.
- The expiration is not years away. A permit that stays valid for a year or more, paired with a spender you cannot identify, is the drainer's "until I get around to it" signature.
If you signed
You have minutes. Open the wallet, send every token in the Permit list to a fresh wallet you control, in descending order of dollar value. Skip the small ones — gas matters. Then, on revoke.cash, revoke each token's approval to Permit2 along with any Permit2 allowances still listed. Revoking the approval to Permit2 cuts off every spender that works through it, including the attacker.
The bookmark rule
I do not use Google to navigate to any DeFi protocol. Bookmark on first visit, verified through Twitter cross-check, and never deviate. Search engines are an attack vector now, not a tool.