A assinatura off-chain que custou 84 mil USDC

Dezembro 2024. Um titular em Brasília visita uma "nova DEX com taxa zero" promovida num grupo de alpha no Telegram. O site pede uma assinatura rotulada Permit — sem transação, sem gas, sem alerta do MetaMask. Ele assina.

Onze segundos depois, seus 84 mil USDC se vão. A assinatura Permit deu a um terceiro endereço o direito de gastar todo o saldo USDC dele, e o drainer chamou transferFrom no instante em que a assinatura foi retransmitida.

Por que EIP-2612 Permit é tão perigoso

O EIP-2612 foi desenhado para economizar gas: em vez de uma transação approve separada, o usuário pode assinar uma mensagem off-chain, e o spender inclui essa assinatura ao chamar o contrato. A assinatura é gasless e parece inofensiva — o MetaMask mostra um prompt de dados estruturados, não uma transação. Mas o efeito é o de um approve no valor que a mensagem define — e páginas de phishing preenchem o máximo. Como nada vai on-chain na hora em que você assina, o revoke.cash não enxerga a ameaça pendente, e sua carteira nunca enviou uma transação de aprovação que você pudesse notar. Cancelar um Permit já assinado é difícil na prática: você teria de consumir o nonce dele on-chain antes que o atacante o use.

Quatro coisas na tela da carteira que deveriam te paralisar

  • Permit — EIP-2612, aprovação gasless de ERC-20.
  • PermitSingle / PermitBatch — contrato Permit2 da Uniswap, que pode cobrir vários tokens numa única assinatura.
  • setApprovalForAll — aprovação para a coleção inteira de NFT. A rigor é uma transação, não uma assinatura, mas pertence à mesma lista.
  • Um bloco hexadecimal bruto no lugar de campos legíveis — a carteira não consegue te dizer o que você está assinando.

Se uma tela de carteira mostra qualquer um desses e o site não é um protocolo mainstream verificado que você já usou antes, rejeite a assinatura e feche a aba.

Os usos legítimos

Usos reais de Permit existem: Uniswap, 1inch, CowSwap e vários protocolos de lending importantes usam Permit e Permit2 para economizar gas. A defesa não é "nunca assine Permit" — é "só assine Permit na URL que você digitou, em protocolo que você já usou várias vezes antes".

Se você assinou e os fundos ainda estão lá

Você tem minutos, não horas. Abra a mesma carteira, envie todo o saldo do token para uma carteira nova sua. A assinatura Permit dá ao atacante o direito de transferir, mas não o impede de você transferir primeiro. Velocidade vence.