23 июля 2026 года из смарт-контракта моста Verus в сети Ethereum вывели активы почти на $7,54 млн. Взлома кода в привычном смысле не было: злоумышленник предъявил мосту доказательство перевода, которое внешне прошло проверку, — и тот выплатил миллионы, хотя реального обеспечения на другой стороне не было. Полученные токены он тут же перевел в Ethereum и «утопил» след в миксере. Тревожнее всего, что этот же мост уже грабили похожим способом двумя месяцами ранее.
Аналитики BitOK выяснили, как мошенник устроил атаку. Рассказываем, как хакеру удалось получить $7,5 млн из «воздуха».
Содержание:
Как из моста Verus вывели около $ 7,54 млн
Что именно похитили
Этапы атаки
Тайминг
Ключевые адреса
Ключевые транзакции
Не первый случай
Общая картина
Какой урок нужно извлечь
Как из моста Verus вывели около $7,54 млн
Чтобы понять эту атаку, сперва о главном простыми словами. Мост между блокчейнами не создает «настоящих» монет. Чтобы получить актив в одной сети, нужно запереть равноценный актив в другой и предъявить мосту доказательство, что это сделано. Мост Verus переносил активы между своим блокчейном и сетью Ethereum: пользователь запирал обеспечение на одной стороне и получал эквивалент на другой.
У этого моста есть важная особенность: он некастодиальный. Это значит, что средствами не распоряжается ни одна компания или администратор с ключами. Переносы подтверждаются криптографическими доказательствами, которые проверяет сама сеть Verus (майнеры и стейкеры). Это объясняет характер атаки: «взламывать» было нечего — вся защита держится на проверке доказательства, и злоумышленник ударил по ней.
Заметка инвестигейтора: злоумышленник сформировал импорт токенов, который мост принял как подтвержденный перевод из сети Verus. Контракт в Ethereum выплатил активы, хотя соответствующего обеспечения на стороне Verus, по предварительной оценке, не было. Точная техническая первопричина пока не подтверждена официальным разбором команды Verus и остается рабочей гипотезой.
Простая аналогия, чтобы понять суть взлома. Представьте контейнер из двух отделений: одно — Verus, другое — Ethereum. Чтобы забрать что-то из отделения Ethereum, клиент должен сдать равноценный обмен в Verus и принести «накладную», которая это подтверждает. Злоумышленник принес накладную и печать, на которой выглядела настоящей. Охранник проверил печать, но не сверил, сколько коробок на самом деле поместили в другой контейнер. Будучи уверенным, что все законно, он выдал товар.
Вот главное:
Ущерб — около $7,53–7,54 млн в разных токенах, выведенных из моста.
Как действовал хакер — злоумышленник подал мосту доказательство импорта, которое прошло формальную проверку, но не было надежно привязано к реальному обеспечению на стороне Verus. Контракт исполнил заложенные правила и выплатил активы.
Что стало со средствами — разные токены быстро обменяли на один, Ethereum (ETH), и внесли 3 916,1 ETH в Tornado Cash — миксер, разрывающий связь между отправителем и получателем.
Вот в чем суть гипотезы BitOK: прежде чем выплатить активы, мост должен был сам проверить, что список получателей и сумм действительно пришел из подтвержденного перевода на стороне Verus. Похоже, эту проверку удалось обмануть — например, мост доверился данным, которые подставил сам злоумышленник, вместо того чтобы сверить их с настоящим переводом. Тогда доказательство выглядит подлинным, хотя за ним ничего не стоит. Судя по всему, брешь системы безопасности оказалась именно в том, как мост связывает доказательство с реальным переводом.
Что именно похитили
Мост выплатил злоумышленнику целый набор активов. Обратите внимание на последнюю строку: DAI не выводили из резервов, а «выпустили» (сминтили) прямо внутри вредоносной транзакции.
Актив;Количество;Механика
ETH;1 137,45281584;Перевод из контракта моста
tBTC;71,5045915;Перевод из контракта моста
USDC;149 275,074098;Перевод из контракта моста
USDT;78 300,537681;Перевод из контракта моста
EURC;31 475,664323;Перевод из контракта моста
MKR;59,42954384;Перевод из контракта моста
scrvUSD;92 784,36027725;Перевод из контракта моста
DAI;220 357,02707298;Выпуск (mint) внутри вредоносной транзакции
Здесь tBTC — это «обернутый» биткоин в сети Ethereum, EURC — стейблкоин, привязанный к евро, а scrvUSD и MKR — токены экосистемы децентрализованных финансов.
Появление среди «добычи» именно DAI и MKR — не случайность: вместе с ETH и монетой самого протокола (VRSC) они входят в резервы моста, которыми на 100% обеспечен его внутренний актив.
Кучу разных монет прятать неудобно. Поэтому мошенник перевел их в одну криптовалюту.
Этапы атаки
Вот как действовал хакер:
Подготовка и финансирование. За два дня до атаки, 21 июля, служебный кошелек (funding wallet) получил 0,09607 ETH из пула Tornado Cash на 0,1 ETH. Через 29 минут он отправил 0,07 ETH на отдельный адрес-исполнитель (executor) — на оплату газа, то есть комиссий сети.
Подготовительные вызовы. 23 июля executor дважды обратился к служебной функции setLatestData (в 03:23 и 03:41 UTC), как бы подготавливая почву, а в 03:45:59 отправил главную транзакцию — submitImports, тот самый поддельный импорт.
Вывод средств. Контракт моста перевел активы на отдельный кошелек-получатель (loot wallet), указанный в параметрах атаки. Разделение executor и loot wallet — прием для маскировки: так труднее напрямую связать операции между собой.
Конвертация. С 03:57 до 04:13 UTC похищенные токены продали за ETH через торговую инфраструктуру Relay (Relay Router V3). Все полученные USDC, USDT, EURC, DAI, MKR, scrvUSD и tBTC были выведены из loot wallet.
Отмывание через Tornado Cash. С 04:45 до 05:29 UTC loot wallet сделал 47 депозитов на общую сумму 3 916,1 ETH — круглыми порциями: 39 по 100, 1 по 10, 6 по 1 и 1 по 0,1 ETH. Дробление круглыми суммами затрудняет последующее сопоставление входов и выходов миксера.
Тайминг
Время;Событие
21 июля;Служебный кошелек получает 0,09607 ETH из пула Tornado Cash
21 июля, +29 мин;Служебный кошелек отправляет 0,07 ETH на адрес-исполнитель (на газ)
23 июля, 03:23:35;Первый вызов setLatestData
23 июля, 03:41:47;Второй вызов setLatestData
03:45:59;Основная транзакция submitImports — поддельный импорт
~03:46;Мост переводит активы на кошелек-получатель
03:57:59–04:13:47;Продажа похищенных токенов за ETH через Relay
04:45:11–05:29:59;47 депозитов на 3 916,1 ETH в Tornado Cash
Для проверки в обозревателе блокчейна — хэши основных транзакций атаки:
Событие;Хэш
Tornado Cash → пополнение кошелька;0x8ac3b8e7bcce943a87bdacd1326d7fc097ec22419d73fbbd966450da5d31d7f0
Пополнение кошелька → адрес-исполнитель;0x681c03b59a709f7a1d64d93af1e2a382bf7f5d14990feeb0afc55682b3772a2f
Первый setLatestData;0x8f21bd8f0fce72ac959caa93a9923d85f902dfc6eddac2785ac5bc49c3b28d8f
Второй setLatestData;0x51b1c8341da4092b7d1e0e4865f7b318de4e96245358b05b2bff2df50adaf0c9
Основной submitImports;0xa1f1e65c1cea4dba4ae439cd4dcdba6cc2dbda0ed1228e61f29ae9c9324eb099
Как мошенник переводил деньги. Граф построен при помощи инструмента Graph от BitOK.
Не первый случай
Отдельно стоит подчеркнуть: это уже второй удар по мосту. В мае 2026 года этот же контракт-посредник потерял около $11,6 млн в атаке на тот же механизм импорта. Июльский инцидент использовал новый набор адресов, но задействовал тот же контракт, тот же вход submitImports и похожий класс ошибки.
Заметка инвестигейтора: злоумышленник не воспользовался забытой старой версией кода. На момент атаки работала обновленная реализация обработки импортов, включенная 12 июля — более чем за десять дней до атаки. Сравнение версий показывает, что обновление почти не затронуло основную логику создания импортов. Похоже, корневую причину взлома после майской атаки так и не устранили.
Общая картина
Хакер заранее подготовил газ через миксер и развел роли по разным кошелькам. После он отправил мосту «доказательство», которое тот счел законным, и вывел разнородные активы почти на $7,54 млн. Дальше — быстрая распродажа всего в ETH и 47 заходов в Tornado Cash меньше чем за час.
В отличие от некоторых других инцидентов, здесь деньги не осели на прозрачном адресе для наблюдения, а сразу ушли в миксер: похоже, отмывание было спланировано с самого начала.
Заметка инвестигейтора: ончейн-данные надежно подтверждают последовательность транзакций и движение средств. А вот точная первопричина ошибки проверки остается гипотезой до официального разбора команды Verus. Связь майской и июльской атак с одним и тем же лицом пока не доказана.
Какой урок нужно извлечь
Главный вывод этой истории в том, что мост безопасен ровно настолько, насколько надежно он проверяет чужие доказательства.
Проверять надо суть, а не «печать». Контракт исполнил выплату, потому что доказательство прошло формальную проверку. Но безопасность моста, судя по всему, была скомпрометирована еще в период первого взлома.
Нет работы над ошибками. Один и тот же мост дважды попался на одну и ту же уловку. Это говорит о том, что после первой атаки корневую причину, вероятно, не устранили до конца, а лишь прикрыли самые явные бреши.
Перемещая активы между сетями, вы полагаетесь не только на две сети, но и на корректность контракта-моста и его проверок. Стоит заранее выяснить, кто отвечает за мост, проходил ли он аудит и что известно о прошлых инцидентах.
В этом кейсе деньги ушли в миксер сразу — а значит, шанс вернуть их стремится к нулю.