Краткий ответ

Подписи Permit (EIP-2612) и Permit2 — ведущий вектор крипто-кражи в 2025-2026 годах. Опасность: Permit-подпись выглядит как бессмысленная строка в UI вашего кошелька, но подписание её предоставляет атакующему разрешение перевести до специфицированной суммы конкретного токена из вашего кошелька, бессрочно или до deadline. Атакующему не нужно, чтобы вы отправили средства — у них есть разрешение их взять. Permit2 ухудшает это, позволяя cross-token, multi-asset approval в одной подписи.

Технический механизм

Стандартный ERC-20 approval требует on-chain транзакции (видимой вам, стоит газа). EIP-2612 ввёл "Permit" как gas-saving альтернативу: вместо on-chain транзакции, пользователь подписывает typed data сообщение (EIP-712), авторизующее spender. Подпись валидна on-chain — любой, держащий её, может submit к контракту токена, и контракт распознаёт авторизацию.

С точки зрения пользователя: popup появляется, прося подписать структурированное сообщение с полями вроде "owner: 0xYOU, spender: 0xATTACKER, value: max, deadline: 2099". Если подпишете, атакующий теперь держит доказательство, что вы авторизовали их перевести до "max" этого токена. Они могут submit доказательство on-chain в любой момент до deadline.

Permit2 ухудшает это

Uniswap запустил Permit2 в конце 2022 года как унифицированный approval-контракт. Permit2 подписи могут авторизовать несколько токенов одновременно, с гранулярными per-token суммами. Одна Permit2 подпись может предоставить доступ к вашим USDC, USDT, WETH, stETH и больше — между многими токенами сразу.

Permit2 также добавляет batched transfer способность, поэтому атакующий может слить несколько активов в одном Permit2 выполнении, а не одной транзакцией на токен.

Почему это сложно обнаружить

Popup подписи выглядит как:

Sign typed data?
Type: Permit
Owner: 0xYourAddress
Spender: 0x... (длинная hex-строка)
Value: 115792089237316195423570985008687907853269984665640564039457584007913129639935
Deadline: 99999999999

Для не-эксперта это нечитабельно. Огромное value — это фактически 2^256-1 — unlimited. Огромный deadline — эффективно "никогда не истекает". Многие кошельки отображают это как просто "Confirm signature?" без объяснения последствий.

Что делают современные кошельки

Rabby Wallet отображает Permit подписи с human-readable резюме: "Вы авторизуете 0xSpender перевести unlimited USDC из вашего кошелька, без истечения. ВНИМАНИЕ: это то же, что дать им прямой доступ к вашему USDC балансу." Pre-2024 MetaMask не отображал; post-2024 MetaMask добавил похожие предупреждения.

Аппаратные кошельки (Trezor Safe 3+, Ledger с обновлённой прошивкой) отображают распарсенные Permit-поля on-device, требуя физического подтверждения.

Защита

Три правила:

Никогда не подписывайте Permit, кроме как используя известный dApp, требующий это (Uniswap, 1inch с Permit2-enabled режимом). Если случайная "airdrop claim" или "wallet verification" страница prompts Permit подпись, откажитесь.

Читайте spender адрес. Это должен быть контракт dApp (видимый в Etherscan как verified), не случайный wallet-адрес.

Запускайте revoke.cash ежеквартально и отзывайте Permit2 allowances, которые не распознаёте.

Дополнительное чтение: EIP-2612 Permit, Фишинг.