Resposta curta

Assinaturas Permit (EIP-2612) e Permit2 são o vetor líder de roubo de cripto em 2025-2026. O perigo: uma assinatura Permit parece uma string sem sentido na UI da sua wallet, mas assiná-la concede ao atacante permissão para transferir até uma quantia específica de um token específico da sua wallet, indefinidamente ou até um deadline. O atacante não precisa que você envie fundos — ele tem permissão para pegá-los. Permit2 piora isto permitindo approval cross-token, multi-ativo em uma única assinatura.

O mecanismo técnico

Approval ERC-20 padrão requer uma transação on-chain (visível para você, custa gas). EIP-2612 introduziu "Permit" como uma alternativa gas-saving: em vez de uma transação on-chain, o usuário assina uma mensagem typed-data (EIP-712) autorizando um spender. A assinatura é válida on-chain — qualquer um detendo-a pode submetê-la ao contrato do token, e o contrato reconhece a autorização sem requerer uma transação approve prévia.

Da perspectiva do usuário: um popup aparece pedindo para assinar uma mensagem estruturada com campos como "owner: 0xVOCÊ, spender: 0xATACANTE, value: max, deadline: 2099". Se você assinar, o atacante agora detém prova de que você autorizou-os a transferir até "max" desse token. Eles podem submeter a prova on-chain a qualquer momento antes do deadline.

Permit2 piora isto

Uniswap lançou Permit2 no final de 2022 como um contrato approval unificado. Assinaturas Permit2 podem autorizar múltiplos tokens de uma vez, com quantidades granulares per-token. Uma única assinatura Permit2 pode conceder acesso ao seu USDC, USDT, WETH, stETH, e mais — entre muitos tokens de uma vez.

Permit2 também adiciona capacidade de transfer batched, então o atacante pode drenar múltiplos ativos em uma execução Permit2 em vez de uma transação por token.

Por que isto é difícil de detectar

O popup de assinatura parece:

Sign typed data?
Type: Permit
Owner: 0xSeuEndereço
Spender: 0x... (uma longa string hex)
Value: 115792089237316195423570985008687907853269984665640564039457584007913129639935
Deadline: 99999999999

Para um usuário não-expert, isto é ilegível. O valor enorme é na verdade 2^256-1 — unlimited. O deadline enorme é efetivamente "nunca expira". Ainda assim muitas wallets exibem isto como apenas "Confirm signature?" sem explicar as consequências.

O que wallets modernas fazem

Rabby Wallet exibe assinaturas Permit com resumos human-readable: "Você está autorizando 0xSpender a transferir USDC unlimited da sua wallet, sem expiração. AVISO: isto é o mesmo que dar a eles acesso direto ao seu saldo USDC." MetaMask pré-2024 não exibia; MetaMask pós-2024 adicionou avisos similares.

Hardware wallets (Trezor Safe 3+, Ledger com firmware atualizado) exibem os campos Permit parseados on-device, requerendo confirmação física.

A defesa

Três regras:

Nunca assine um Permit a menos que esteja usando uma dApp conhecida que o requer (Uniswap, 1inch com modo Permit2-enabled). Se uma página aleatória de "airdrop claim" ou "wallet verification" solicita uma assinatura Permit, recuse.

Leia o endereço spender. Deve ser o contrato da dApp (visível no Etherscan como verificado), não um endereço de wallet aleatório.

Rode revoke.cash quartralmente e revogue allowances Permit2 que você não reconhece.

Leitura adicional: EIP-2612 Permit, Phishing.