Офчейн-підпис вартістю 84 000 USDC

Грудень 2024. Користувач із Дніпра заходить на «новий DEX з нульовими комісіями», який рекламують у Telegram-каналі. Сайт просить підпис із позначкою Permit: без транзакції, без газу, без попереджень MetaMask. Він підписує.

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

Чим небезпечний EIP-2612 Permit

EIP-2612 придумали, щоб заощадити газ: замість окремої транзакції approve користувач підписує повідомлення поза блокчейном, а отримувач дозволу додає цей підпис, коли викликає контракт. Підпис безкоштовний і виглядає безпечно: MetaMask показує запит на підпис структурованих даних, а не транзакцію. Але наслідок той самий, що й в approve на суму, вписану в повідомлення, — а фішингові сторінки вписують максимум. Оскільки в момент підпису в блокчейн нічого не потрапляє, revoke.cash цієї загрози не бачить, а ваш гаманець не надсилав жодної транзакції з дозволом, яку можна було б помітити. Скасувати вже підписаний Permit на практиці важко: треба встигнути використати його nonce в мережі раніше, ніж зловмисник надішле підпис.

Чотири позначки в запиті гаманця, на яких варто зупинитися

  • Permit — EIP-2612, дозвіл на токен ERC-20 без газу.
  • PermitSingle / PermitBatch — контракт Permit2 від Uniswap; один підпис може охопити одразу кілька токенів.
  • setApprovalForAll — дозвіл на всю NFT-колекцію. Строго кажучи, це транзакція, а не підпис, але їй теж місце в цьому списку.
  • Сирий hex замість зрозумілих полів — гаманець не може пояснити, що саме ви підписуєте.

Якщо гаманець показує будь-яку з цих позначок, а сайт не є відомим перевіреним сервісом, яким ви вже користувалися, відхиляйте підпис і закривайте вкладку.

Законне використання

Permit справді використовують чесно: Uniswap, 1inch, CowSwap і кілька великих протоколів кредитування заощаджують користувачам газ через Permit і Permit2. Захист полягає не в тому, щоб ніколи не підписувати Permit, а в тому, щоб підписувати його лише на сайті, адресу якого ви набрали самі, і в протоколі, яким уже не раз користувалися.

Якщо підписали, а кошти ще на місці

У вас лічені хвилини. Відкрийте той самий гаманець і переведіть весь баланс токена на нову адресу. Підпис Permit дає зловмисникові право переказати кошти, але не заважає вам зробити це першим. Усе вирішує швидкість.