Constatum
Гайды

Дрейнеры EIP-7702: подпись, которая ждёт

Constatum Team5 мин чтения
Сетка одинаковых фрезерованных металлических блоков на тёмном бетоне, один приподнят, под ним виден тонкий оранжевый канал

14 октября кошелёк с ENS-именем sven.eth потерял 9,12 ETH, около 22 770 долларов, плюс небольшую горсть токенов TAPEETH. Владелец не отправлял ни одной транзакции. Компания ExVul, занимающаяся безопасностью, в тот же день сообщила о краже в X и свела её к одному действию, которое владелец совершил когда-то раньше: он подписал авторизацию EIP-7702. Как атакующий получил эту подпись, неизвестно. Известно, что он с ней сделал. Сохранил, подождал, затем сам отправил её в сеть и заплатил за газ.

В этом весь трюк. И именно поэтому это семейство дрейнеров отличается от мошенничества с разрешениями на токены, о котором вы читали раньше.

Что на самом деле делает EIP-7702

После обновления Pectra в Ethereum 7 мая 2025 года обычный кошелёк может «одолжить» код смарт-контракта. Вы подписываете короткую авторизацию с адресом контракта, она попадает в сеть в транзакции типа 4 «set code», и с этого момента ваш аккаунт выполняет код этого контракта всякий раз, когда к нему обращаются. Адрес не меняется. Приватный ключ по-прежнему работает. У этой функции есть разумные применения: оплата газа за пользователя, объединение нескольких действий в один клик, восстановление аккаунта. MetaMask, Rabby и другие выпускают её как переключатель «смарт-аккаунт».

Для безопасности важны три детали.

Авторизация крошечная. ID сети, адрес контракта, nonce, ваша подпись. В ней нет ни слова о том, что контракт будет делать.

Отправить её может кто угодно. Подписанная авторизация может ехать внутри транзакции, которую отправляет атакующий, и комиссию платит он. Вы никогда не увидите ожидающую транзакцию в своём кошельке. Когда вы посмотрите, баланса уже не будет.

Она остаётся. Один раз установленное делегирование висит на вашем аккаунте, пока вы его не замените или не очистите. Каждый токен, который после этого попадает на адрес, сначала проходит через код атакующего.

Свипер, который ждёт

Исследовательская команда Wintermute в мае 2025 года изучила первые недели делегирований 7702 и обнаружила, что больше 97% из них указывали на копии одного короткого контракта. Его прозвали CrimeEnjoyor. Работа у него скучная: сидеть на адресе и пересылать атакующему любой входящий ETH. Эти ранние свиперы в основном прикручивали к кошелькам, чьи ключи уже утекли, и Wintermute отметила, что атакующие потратили около 2,88 ETH на авторизацию примерно 79 000 адресов, получив взамен почти ничего.

Деньги — в фишинговой версии. В августе 2025 года один человек подписал то, что выглядело как своп на Uniswap, и за один пакет потерял 1,54 миллиона долларов в wstETH, cbBTC и NFT, по данным Scam Sniffer. Второй случай в том же месяце стоил 1,00 миллиона долларов. Отчёт Scam Sniffer за 2025 год насчитал 83,85 миллиона долларов фишинговых потерь у 106 106 пострадавших за год и отметил пакетные подписи 7702 как вектор, пришедший вместе с Pectra.

Академическое исследование, представленное на USENIX Security в августе 2026 года, зафиксировало масштаб. Исследователи из HKUST, Нанькайского университета, Университета Сунь Ятсена и Университета Линнань каталогизировали 924 вредоносных контракта для делегирования в семи сетях. Больше 63% всех транзакций авторизации 7702 в их наборе данных были связаны с атаками на обычные кошельки, а почти половина самых часто авторизуемых контрактов контролировалась атакующими. Они насчитали больше 2,3 миллиона долларов подтверждённых потерь и свыше 10 миллионов аккаунтов под угрозой.

Тем временем дашборд BundleBear на конец октября показывает около 67 миллионов смарт-аккаунтов, то есть адресов с установленным делегированием. Большинство из них легитимны. Снаружи не отличить, какие именно.

Почему «потом» — самая опасная часть

Случай sven.eth показывает схему в розничном масштабе. В делегированном коде был зашит фиксированный адрес контроллера. Этот контроллер вызвал функцию получения наград PodMining, забрал TAPEETH и вывел ETH. ExVul подтвердила: в протоколе не было ни бага, ни флеш-займа. Была только подпись, использованная в момент, который выбрал атакующий. На блоке 26 188 153 делегирование всё ещё было активно.

Задержку делают возможной две вещи. Авторизация содержит nonce вашего кошелька, поэтому остаётся действительной, пока вы сами не отправите транзакцию. Кошелёк, который вы не трогаете неделями, — это ровно тот кошелёк, который остаётся уязвимым. А свиперу, раз установленному, спешить некуда. Он забирает то, что придёт следующим.

У этого второго свойства есть жестокий побочный эффект. Пострадавшие, узнав, что их кошелёк делегирован, часто отправляют на него немного ETH, чтобы оплатить исправление. Свипер забирает их раньше, чем исправление уходит в сеть.

Как проверить свой кошелёк

Откройте свой адрес на Etherscan. У обычного кошелька кода нет. У делегированного видно поле кода длиной 23 байта, которое начинается с 0xef0100, а дальше идёт контракт, на который он указывает. Если вы никогда не включали функцию смарт-аккаунта, это и есть ваш ответ.

У Revoke.cash есть вкладка Delegations, где то же самое показано простым языком. Снять делегирование за вас он не может, и никакой другой сайт тоже. Большинство кошельков не пускают сторонние приложения к этой настройке, и это правильное решение.

Удаление происходит внутри кошелька. В MetaMask оно находится на экране данных аккаунта в виде переключателя смарт-аккаунта, который выключается для каждой сети отдельно, хотя название меняется от версии к версии. Rabby показывает его рядом с разрешениями. На уровне протокола исправление — это новая авторизация, указывающая на нулевой адрес. Она стирает указатель на код, хотя всё, что контракт атакующего записал в хранилище, остаётся.

Когда очистить недостаточно

Если вы установили делегирование сами и узнаёте контракт, оставьте его. Если нет, считайте кошелёк скомпрометированным, а не неправильно настроенным. Неизвестное делегирование означает, что вы подписали то, чего не должны были, и тот же фишинговый набор может попросить вас снова завтра. Переведите то, что осталось, на новую сид-фразу и спишите адрес. Не отправляйте на старый газ перед этим.

Та же логика работает в обратную сторону, когда адрес не ваш. У кошелька, который обчистили, есть узнаваемая форма в сети: средства приходят и уходят почти сразу, всегда на одно и то же назначение. Если незнакомый человек собирается заплатить вам, или вы ему, прогоните адрес через проверку, прежде чем деньги сдвинутся с места. Адреса сбора дрейнеров — одно из первого, что аналитические компании помечают, как только пострадавшие о них сообщают, и контрагент, чьи средства проходят через такой адрес, — это проблема, которую лучше найти до перевода, а не после.

О чём молчит окно подписи

Аппаратные кошельки защищают ключ. Они не оценивают, хорошая ли это идея — отдать код своего аккаунта незнакомцу, а окно, которое просит вас это сделать, построено так, чтобы выглядеть как обычное получение награды или своп. Любой запрос, в котором упоминаются делегирование, авторизация, смарт-аккаунт или пакетное выполнение, читайте дважды. Бесплатное, безгазовое или «спонсируемое» действие на незнакомом сайте — повод закрыть вкладку.

Держите деньги, которые вам дороги, в кошельке, который никогда не подписывал авторизацию 7702 и никогда не заходит в dApps. Для остального используйте отдельный горячий кошелёк. Правило старое, а это — самая свежая причина ему следовать.

Владелец sven.eth потерял около 22 000 долларов из-за подписи, которую никто не помнит. Проверка, которая бы это поймала, занимает тридцать секунд и ничего не стоит.

Источники

  1. 1.EIP-7702: Set Code for EOAs — Ethereum Improvement Proposals
  2. 2.Prague-Electra (Pectra) upgrade — ethereum.org
  3. 3.Wintermute's 'CrimeEnjoyor' to flag Ethereum's wallet-draining contracts — Cointelegraph
  4. 4.Scam Sniffer 2025: Crypto Phishing Losses Fall 83% to $84 Million — Scam Sniffer
  5. 5.Revealing the Dark Side of Smart Accounts: An Empirical Study of EIP-7702 Incurred Risks in Blockchain Ecosystem — USENIX Security '26
  6. 6.EIP-7702 Metrics — BundleBear
  7. 7.Ethereum user loses $22K in EIP-7702 wallet attack — crypto.news
  8. 8.How to switch to or revert from a smart account in MetaMask — MetaMask Support

Эта статья носит общий информационный характер и не является юридической, налоговой, финансовой или инвестиционной консультацией. Криптовалюты связаны с риском — проверяйте информацию самостоятельно и консультируйтесь со специалистом перед принятием решений. Constatum не гарантирует точность и полноту и не несёт ответственности за решения, принятые на её основе.

Эта статья переведена с помощью ИИ и может содержать неточности. Оригинал — английская версия.

Читать дальше