Ошибка возврата 10 ETH заморозила торговлю THORChain на 10 сетях
Ключевые выводы
- •Реорганизация одного блока Ethereum 31 октября позволила одному депозиту в 10 ETH в THORChain вызвать выплаты на 20 ETH: был возвращён как зачисленный своп, так и сам депозит.
- •Каждый узел THORChain зарегистрировал реорганизацию, но автоматическая перепроверка депозита не успела завершиться до финализации наблюдения в цепочке THORChain и отправки возврата.
- •Автоматическая проверка платёжеспособности остановила свопы ETH, операторы узлов прекратили подписание транзакций примерно за две минуты, а торговля была приостановлена в качестве меры предосторожности на десяти сетях, включая ATOM, BCH, BSC, BTC, DOGE, ETH, LTC, SOL, TRON и ZEC.
- •Получатель добровольно вернул лишние 10 ETH, однако THORChain предупреждал, что злоумышленник, повторно использующий nonce транзакции во время реорганизации, может получить выплату из хранилищ без всякого повода вернуть средства.
- •Остановка непреднамеренно задержала отмывание средств от кражи 6,4 млрд долларов у Binance, связываемой с северокорейской группой TraderTraitor; THORChain не назвал дату возобновления, отметив, что после майского эксплойта на 10,7 млн долларов аналогичное исправление и возобновление заняли более пяти недель.

Кроссчейн-протокол ликвидности THORChain заморозил торговлю на десяти блокчейнах после реорганизации одного блока Ethereum, из-за которой его хранилища дважды выплатили средства по одному депозиту в 10 ETH. Протокол позволяет пользователям обменивать активы между подключёнными блокчейнами: депозиты поступают в его хранилища, а операторы узлов подписывают выплаты из них. Последовательность событий протокол изложил в посте в X 1 ноября, сообщив, что пользователь вернул лишние 10 ETH и что основные разработчики работают над необходимыми изменениями.
Что удалила реорганизация
В 11:34 UTC 31 октября Ethereum заменил один недавний блок конкурирующей версией. Отброшенный блок содержал депозит в 10 ETH в хранилище THORChain, который наблюдатели протокола уже увидели и зачислили.
Настолько недавние блоки всё ещё могут быть заменены. Ethereum считает блок финализированным только примерно через две эпохи, около 13 минут, и ничто в отчёте THORChain не указывает на изменение финализированной истории. Сбой произошёл внутри THORChain, который отработал депозит до того, как Ethereum его подтвердил.
Затем последовали две выплаты. Своп, привязанный к зачисленному депозиту, не достиг лимита цены, поэтому THORChain вернул 10 ETH. Затем депозит отправителя был возвращён и в принятой цепочке Ethereum. В хранилище поступил один депозит в 10 ETH, а покинули его 20 ETH.
Собственное предупреждение THORChain показывает, как один депозит мог быть учтён дважды. Каждая учётная запись Ethereum нумерует свои транзакции с помощью nonce. Когда исходный перевод исчез вместе с блоком, этот nonce можно было использовать повторно в принятой цепочке. THORChain писал, что при любой внешней реорганизации «злоумышленник может выполнить новую транзакцию с тем же nonce» и получить выплату из его хранилищ.
Каждый узел увидел реорганизацию. Возврат всё равно был отправлен.
Проблема была не в обнаружении. По словам THORChain, каждый узел зарегистрировал реорганизацию, но автоматическая перепроверка, предназначенная для подтверждения статуса депозита, не успела завершиться до того, как THORChain финализировал наблюдение в своей цепочке. Документация Bifrost описывает, как наблюдения отменяются при исчезновении внешней транзакции. 31 октября эта отмена не произошла до отправки возврата.
В посте не говорится, почему перепроверке не хватило времени и что изменит исправление. Возврат состоялся только потому, что получатель добровольно вернул средства. Как описал уязвимость THORChain, протокол платит тому, кто её использует, и тот, кто рассчитает транзакции вокруг будущей реорганизации, вряд ли вернёт что-либо обратно.
Почему уязвимость в 10 ETH заморозила десять сетей
Автоматическая проверка платёжеспособности THORChain обнаружила нехватку средств и остановила свопы ETH. Примерно за две минуты операторы узлов также остановили подписание транзакций ETH, что блокирует выплаты из хранилищ. Затем в качестве меры предосторожности они приостановили торговлю на других сетях, поскольку предупреждение о nonce касается реорганизаций любой подключённой цепочки, а не только Ethereum.
Состояние сервисов THORChain на момент поста от 1 ноября:
- Торговля приостановлена: ATOM, BCH, BSC, BTC, DOGE, ETH, LTC, SOL, TRON, ZEC
- Торговля активна: AVAX, BASE, RUNE, XRPL
- Исходящие платежи: данные статуса от 31 октября показывали, что подписание всё ещё включено на большинстве приостановленных сетей, поэтому ожидающие выплаты могли выходить, пока новые свопы оставались заблокированными.
Статус торговли указан по посту THORChain от 1 ноября; статус подписания — по API статуса THORChain по состоянию на 31 октября.
Список уже менялся однажды. Вечером 31 октября The Defiant сообщило, что API статуса THORChain показывал приостановленную торговлю на 12 из 13 внешних сетей. К посту от 1 ноября три из них были повторно включены. THORChain не объяснил, почему именно эти три были включены первыми.
Ничто из этого не останавливает базовые сети. Bitcoin, Ethereum и другие цепочки продолжают создавать блоки; приостановки лишь ограничивают то, что THORChain будет обрабатывать для каждой из них.
В одном прочтении инцидент показывает, что средства защиты работают. Проверка сработала без участия человека, выплаты остановились в течение минут, а ущерб остался на уровне 10 ETH. В мае та же проверка должна была остановить торговлю и подписание после эксплойта, похитившего из хранилища около 10,7 млн долларов. Чего проверка не может, так это исправить логику наблюдения, поэтому приостановки расширились, а не ослабли после восстановления хранилища.
Три голоса для остановки, четыре для отмены
Подобные приостановки — это операционные настройки, и документация по управлению THORChain позволяет небольшой группе узлов их менять. Настройка требует минимум трёх голосов активных узлов и должна набрать больше голосов, чем любое конкурирующее значение; при равенстве сохраняется текущая настройка.
Этот порог уже проверяли публично. В феврале 2025 года, при отмывании средств, украденных у Bybit, три валидатора проголосовали за остановку торговли ETH, но другие операторы узлов почти сразу отменили голосование. В отчёте THORChain от 1 ноября также отмечается, что остановка цепочки не даёт узлам контроля над активами хранилищ. Прекращение активности и подписание переводов — отдельные полномочия.
Остановка, которую THORChain не применял против отмывальщиков
28 сентября, столкнувшись с призывами заморозить средства от взлома Bitget, THORChain написал в X, что остановка сети — это чрезвычайная мера безопасности для защиты протокола, и отказался применять её к этим средствам. Уязвимость реорганизации — именно такой случай, и вызванная ею остановка всё равно задержала отмывальщиков.
Chainalysis, которая связывает кражу 6,4 млрд долларов у Binance с северокорейской группой TraderTraitor, сообщила 1 ноября, что THORChain «непреднамеренно задержал отмывание значительной части средств, украденных у Binance». Задержка возникла из-за той же функции, которая мешает обычным пользователям: приостановленная цепочка не обрабатывает ничьи свопы. Освещение запроса FBI к операторам криптоинфраструктуры в Coindoo охватывает усилия по прямой блокировке этих транзакций.
Что должно произойти до возвращения свопов
Документация для разработчиков THORChain предупреждает об отправке средств в приостановленную цепочку, так как транзакции могут оставаться необработанными до снятия остановки. Пост от 1 ноября не содержал даты возобновления. Операторы узлов включат каждую цепочку, когда сочтут её безопасной.
Три признака того, что уязвимость закрыта, а не приостановлена: публикация THORChain изменений в обработке внешних реорганизаций, обновление операторами узлов и возвращение подписания ETH вместе с торговлей на приостановленных цепочках. После майского эксплойта этот путь занял от экстренного патча до полного исправления и возобновления торговли более пяти недель. Это ориентир для процесса, а не график для текущего случая.
Возвращённые 10 ETH закрыли выплату от 31 октября. Возобновление подписания ETH станет первым публичным признаком того, что операторы доверяют THORChain обработку следующей реорганизации.