Офчейн-подпись стоимостью 84 000 USDC
Декабрь 2024. Пользователь из Владимира заходит на «новый DEX с нулевыми комиссиями», который рекламируют в Telegram-канале. Сайт просит подпись с меткой Permit — без транзакции, без газа, без предупреждений MetaMask. Он подписывает.
Через одиннадцать секунд 84 000 USDC исчезают. Подпись Permit дала чужому адресу право списать весь баланс USDC, и дрейнер вызвал transferFrom в ту же секунду, как сигнатура была передана.
Чем опасен EIP-2612 Permit
EIP-2612 придумали для экономии газа: вместо отдельной транзакции approve пользователь подписывает офчейн-сообщение, а спендер включает эту подпись при вызове контракта. Подпись без газа, выглядит безобидно — MetaMask показывает structured-data-промпт, а не транзакцию. Но по действию это тот же approve на сумму, указанную в сообщении, — а фишинговые страницы ставят туда максимум. Поскольку при подписи в блокчейн ничего не отправляется, revoke.cash этой угрозы не видит, а сам кошелёк жертвы так и не отправил ни одной транзакции одобрения, которую можно было бы заметить. Отменить уже подписанный Permit на практике трудно: нужно успеть израсходовать его nonce в сети раньше, чем атакующий отправит подпись.
Четыре метки подписи, на которых стоит замереть
Permit— EIP-2612, безгазовое одобрение ERC-20.PermitSingle/PermitBatch— контракт Permit2 от Uniswap, одной подписью может охватить сразу несколько токенов.setApprovalForAll— одобрение целой NFT-коллекции. Строго говоря, это транзакция, а не подпись, но место ей в том же списке.- Сырой hex вместо читаемых полей — кошелёк не может объяснить, что вы подписываете.
Если кошелёк показывает любую из этих меток и сайт не верифицированный мейнстрим, которым вы уже пользовались — отклоняйте подпись и закрывайте вкладку.
Легитимные применения
Честное применение у Permit тоже есть: Uniswap, 1inch, CoW Swap и несколько крупных кредитных протоколов экономят пользователям газ с помощью Permit и Permit2. Защита — не «никогда не подписывать Permit», а «подписывать Permit только по URL, который вы набрали сами, в протоколе, которым уже пользовались много раз».
Если подписали и средства ещё на месте
У вас минуты. Откройте тот же кошелёк, переведите весь баланс токена на свежий адрес. Подпись Permit даёт атакующему право перевести — но не мешает вам перевести первыми. Скорость решает.