All vulnerabilities
CRITICALWeb3exploited in the wild

WEB3-PERMIT-PHISHING-2024

Web3 · Ethereum · EIP-2612 Permit and Uniswap Permit2 signature phishing

Summary

Gasless permit signatures are now the dominant phishing vector: Scam Sniffer found Permit-type signatures accounted for 56.7% of 2024 wallet-drainer attacks within $494M of total losses, with cases like an October 13, 2024 Permit2 phish that drained roughly $1.39M of PEPE, MSTR and APU from one victim. EIP-2612 adds a permit(owner, spender, value, nonce, deadline, v, r, s) function so an owner signs an off-chain EIP-712 Permit struct that sets an ERC-20 allowance; the standard explicitly allows any address to submit it on-chain. The phishing dApp prompts that off-chain signature with the attacker as spender and value set to the full balance or type(uint256).max; the victim never sends a transaction or pays gas, and the wallet often shows an opaque typed-data blob. The attacker then submits permit() to register the allowance and immediately calls transferFrom to sweep the tokens. Uniswap's Permit2 generalizes this to every ERC-20: a single PermitSingle/PermitTransferFrom signature authorizes the attacker as spender, and because Permit2 defaults to the entire balance, one careless signature empties the wallet.

How to avoid it in your code

  • Wallets must decode Permit and Permit2 (PermitSingle/PermitTransferFrom) typed data and display spender, token, exact amount, and deadline in plain language, never a raw hash.
  • Builders should warn loudly when a permit value equals the full balance or type(uint256).max and when the spender is an EOA or unverified contract.
  • Users must read the spender and value of any signature request and reject permits granting unlimited or full-balance allowances to unknown addresses.
  • Users should use a hardware wallet that renders EIP-712 permit fields and revoke existing Permit2 allowances via revoke.cash.
  • dApps should scope Permit2 approvals to exact amounts with short deadlines instead of the default uint160 max.

References

Related vulnerabilities

All Web3 →