Офчейн-подпись стоимостью 84 000 USDC

Декабрь 2024. Владимирский холдер заходит на «новый DEX с нулевыми комиссиями», который рекламируют в Telegram-канале. Сайт просит подпись с меткой Permit — без транзакции, без газа, без предупреждений MetaMask. Он подписывает.

Через одиннадцать секунд 84 000 USDC исчезают. Подпись Permit дала чужому адресу право списать весь баланс USDC, и дрейнер вызвал transferFrom в ту же секунду, как сигнатура была передана.

Чем опасен EIP-2612 Permit

EIP-2612 придумали для экономии газа: вместо отдельной транзакции approve пользователь подписывает офчейн-сообщение, а спендер включает эту подпись при вызове контракта. Подпись без газа, выглядит безобидно — MetaMask показывает structured-data-промпт, а не транзакцию. Но эффект идентичен безлимитному одобрению. И поскольку при подписи ничего в блокчейн не пишется, revoke.cash не видит этой угрозы.

Четыре метки подписи, на которых стоит замереть

  • Permit — EIP-2612, безгазовое одобрение ERC-20.
  • PermitSingle / PermitBatch — контракт Permit2 от Uniswap, ещё мощнее.
  • setApprovalForAll — одобрение целой NFT-коллекции.
  • 0x1626ba7e или произвольный hex — generic typed-data, кошелёк не может объяснить, что вы подписываете.

Если кошелёк показывает любую из этих меток и сайт не верифицированный мейнстрим, которым вы уже пользовались — отклоняйте подпись и закрывайте вкладку.

Легитимные применения

Реальные Permit-использования существуют: Uniswap, 1inch, CowSwap, несколько крупных lending-протоколов экономят пользователям газ через Permit и Permit2. Защита — не «никогда не подписывать Permit», а «подписывать Permit только по URL, который вы набрали сами, в протоколе, которым уже пользовались много раз».

Если подписали и средства ещё на месте

У вас минуты. Откройте тот же кошелёк, переведите весь баланс токена на свежий адрес. Подпись Permit даёт атакующему право перевести — но не мешает вам перевести первыми. Скорость решает.