On May 3, 2024, an Ethereum user sent 1,155 WBTC — about $68 million — to an attacker in a single transfer. Cases like it routinely get labeled “signature phishing” in headlines. The chain tells a different story: as CertiK and Cointelegraph documented, the victim had copied a lookalike address planted in their own transaction history, and signed an ordinary, gas-paying transfer to it.
That was address poisoning — not a Permit2 attack. The distinction matters because the two defenses share nothing: address poisoning attacks where you paste, signature phishing attacks what you sign.
This guide is about the second one — how a single free signature on a scam site can hand over every token you’ve routed through Uniswap’s Permit2 router.
BLUF: Permit2 is a universal approval router created by Uniswap Labs. If you’ve ever used Uniswap, SushiSwap, or any protocol that integrates Permit2, you may have already granted it permission to move your tokens. A single Permit2 signature can authorize transfers of any token you’ve approved through Permit2 — not just one. A scam site can dress a Permit2 approval up as a harmless “verification” — the signature is a spending authorization, not a login. Defense: (1) Check revoke.cash for Permit2 approvals, (2) use a wallet that simulates signatures like Rabby, (3) never sign messages on unfamiliar sites — even if they say “no gas needed.”
What Is Permit2?
Permit2 is an on-chain approval router developed by Uniswap Labs. It solves a real UX problem: traditional ERC-20 approvals require a separate on-chain transaction (paying gas) before you can swap tokens. Permit2 eliminates that step.
Here’s how it works:
Traditional ERC-20 Flow (Pre-Permit2)
- You approve the DEX to spend your USDC → on-chain transaction, pay gas
- You swap USDC for ETH → on-chain transaction, pay gas
- Total: 2 transactions, 2 gas payments
Permit2 Flow
- You approve Permit2 to spend ALL your tokens → one-time on-chain transaction
- For each future swap, you sign an off-chain Permit2 message → free, no gas
- The protocol uses your Permit2 signature + their Permit2 allowance to execute the swap → protocol pays gas
Permit2 acts as a middleman: you approve Permit2 once (on-chain), then authorize specific protocols to use Permit2’s allowance via off-chain signatures (free).
Why Permit2 Is More Dangerous Than Standard Approvals
The efficiency gain is also the security risk:
| Feature | Standard ERC-20 Approval | Permit2 Approval |
|---|---|---|
| Scope | One token, one spender | All approved tokens, one router |
| Authorization method | On-chain transaction (paid gas) | Off-chain signature (free) |
| User awareness | Wallet shows clear approval prompt | Wallet may show unreadable EIP-712 data |
| Revocation | revoke.cash, clear per-token | Must revoke at Permit2 contract level |
| Expiry | Often indefinite (unless time-limited) | Can be time-limited, but often set far out |
The critical difference: one Permit2 signature can authorize transfers of every token you’ve ever approved through Permit2. A standard approval limits exposure to one token. Permit2 creates a universal surface area.
Case Study: The $68M WBTC Loss Was Not a Permit2 Attack
The most-quoted “signature phishing” loss of 2024 is worth dissecting precisely because it wasn’t one.
What actually happened. The victim had just moved funds between two of their own wallets. An attacker generated a vanity address whose first and last characters matched the intended recipient, sent a zero-value transfer from it so it landed in the victim’s history, and waited. When the victim next copied the recipient address from that history, they grabbed the lookalike. The 1,155 WBTC (~$68 million) left in a normal transfer the victim signed themselves and paid gas for — as CertiK and Cointelegraph reported at the time.
Why it wasn’t Permit2. No phishing site, no EIP-712 message, no gasless signature. The victim initiated the transfer from their own wallet. That is the fingerprint of address poisoning — a different attack class with different defenses.
The epilogue. Chain-analytics firms Match Systems and Cryptex traced the stolen funds, and the attacker ultimately returned them — a rare reversal that Unchained covered as it unfolded. It worked because the movement was traced on-chain fast; most victims are not so lucky.
How to tell the two apart:
| Permit2 phishing | Address poisoning | |
|---|---|---|
| Where it happens | A fake site requesting a signature | Your own wallet’s send flow |
| What you sign | An EIP-712 Permit2 message (no gas) | Your own transfer (you pay gas) |
| How the attacker cashes out | Calls permitTransferFrom() with your signature | You send funds to their lookalike address |
| Core defense | Never sign on unfamiliar sites; simulate signatures | Verify the full destination address; test-send first |
How Big Is the Permit2 Problem?
The best public accounting of signature phishing comes from anti-scam firm Scam Sniffer. Its annual reports counted roughly $295 million stolen from about 324,000 victims by wallet drainers in 2023, rising to about $494 million across more than 300,000 targeted addresses in 2024 — with rented drainer kits like Inferno Drainer and Angel Drainer doing the stealing (Scam Sniffer 2023 report). Permit2 signatures are one of the standard surfaces these kits request, which is why an approval you don’t remember making deserves a second look.
How Attackers Exploit Permit2
The Technical Mechanism
Permit2 has two main permit functions attackers exploit:
permit() — Grants a spender ongoing allowance for a specific token:
function permit(address owner, PermitSingle calldata permitSingle, bytes calldata signature) external
permitTransferFrom() — Authorizes a one-time transfer of a specific token amount:
function permitTransferFrom(PermitTransferFrom calldata permit, SignatureData calldata signature, address spender, uint256 requestedAmount) external
Both require only the owner’s signature — no on-chain transaction from the owner. The attacker (or anyone) can call these functions with a valid signature.
Why Wallets Don’t Always Warn You
EIP-712 typed data is designed to be human-readable, but only if the wallet implements decoding for Permit2’s specific message structure. Many wallets:
- Show the raw EIP-712 fields without context (“What does ‘spender: 0x7a3f…’ mean?”)
- Don’t simulate the outcome of the Permit2 call
- Don’t check whether the spender address is a known malicious contract
This is why blind signing — confirming without understanding — is so dangerous with Permit2.
How to Check Your Permit2 Exposure
Method 1: revoke.cash
Go to revoke.cash, connect your wallet, and filter by the Permit2 contract (0x000000000022D473030F116dDEE9F6B43aC78BA3):
- Any active approvals to Permit2 mean your tokens are at risk if you sign a malicious Permit2 message
- You can revoke individual token approvals to Permit2
Method 2: Etherscan
- Go to your address on Etherscan
- Check your token approvals for the Permit2 contract address
- Look for any approvals with infinite allowance
Method 3: Use Our Risk API
Use our address risk scoring API to check if any contract requesting your signature has been flagged as malicious.
Defense: The Permit2 Security Checklist
-
Audit your Permit2 approvals: Visit revoke.cash and review all tokens approved to Permit2. Revoke any you don’t actively need.
-
Never sign on unfamiliar sites: Permit2 signatures are free — that’s what makes them dangerous. “No gas” doesn’t mean “no risk.”
-
Use a simulation wallet: Rabby Wallet, Pocket Universe, and Blockaid-powered wallets simulate signatures and show “You will lose X tokens” before you confirm.
-
Separate wallets: Keep your main holdings in a wallet that has never approved Permit2. Use a separate wallet for DeFi interactions.
-
Revoke after use: After using Uniswap or other Permit2-integrated protocols, revoke the Permit2 approval if you don’t plan to use it again soon.
-
Time-limit your approvals: Permit2 allows time-limited permits. When available, choose short expirations (1 hour, 1 day) instead of indefinite.
-
Be suspicious of “verification” prompts: Legitimate SIWE (Sign In With Ethereum) uses
personal_sign, notsignTypedData. If a site asks you to sign typed data (EIP-712) for “verification,” that’s a red flag.
Related Terms
- Signature Scam Explained
- Address Poisoning Attacks
- ETH Sign Phishing
- Blind Signing
- Infinite Approval
- Permit2
- ERC-20
- Token Approval Safety
- Wallet Drainer
Frequently Asked Questions
I've used Uniswap. Am I already at risk?
If you've used Uniswap V3+ or any Permit2-integrated protocol, you likely have active Permit2 approvals. This doesn't mean you've been hacked — it means your tokens are vulnerable if you sign a malicious Permit2 message in the future. Check revoke.cash to see your current exposure.
Should I stop using Uniswap?
No. Permit2 is a legitimate and useful protocol. The risk isn't in using Permit2 — it's in signing messages on phishing sites. The solution is vigilance, not avoidance.
How is Permit2 different from [infinite approval](/articles/infinite-approval-explained/)?
Infinite approval is an ERC-20 concept — you approve a spender for the maximum uint256 amount. Permit2 is a routing layer that can hold infinite approvals for multiple tokens simultaneously. An attacker exploiting Permit2 can access all tokens you've approved through it, not just one.
Can I revoke Permit2 approval without paying gas?
No. Revoking an approval requires an on-chain transaction, which costs gas. But the gas cost (typically $2-10) is far less than the potential loss.
Does Ledger/Trezor protect me from Permit2 attacks?
Only if you read the data carefully. Hardware wallets force physical confirmation, but if you're using blind signing (required for many DeFi interactions), the device shows raw hex data that's nearly impossible to interpret. Always verify on a trusted screen what you're signing before confirming on your hardware wallet.
"Is Permit2 itself safe?"
Yes — Permit2 is Uniswap's legitimate and audited contract. The risk is how scammers abuse its UX: Permit2 lets a single signature authorize token spending, so a fake site can ask you to 'verify' with what is actually a Permit2 approval. The protocol is safe; the phishing site asking for the signature is not.
"How does a Permit2 phishing attack work?"
You connect a wallet on a lookalike site (often a fake airdrop claim) and are shown a seemingly harmless verification message. Signing it grants the attacker's contract spending allowance via Permit2 — no separate on-chain approval needed. Funds can then be pulled directly from your wallet.
"How do I check my Permit2 approvals?"
Use revoke.cash or Etherscan's token approval tool and filter for the Permit2 contract as the spender. Revoke anything you do not actively use. Doing this after any interaction with an unfamiliar site is cheap insurance.