Как 300 случайных людей украли 190 миллионов из Nomad за 4 часа

В августе 2022 года произошёл один из самых нелепых взломов в истории криптовалют. Чтобы вывести 190 миллионов долларов, не нужно было знать ассемблер, писать эксплойт или арендовать ботнет. Достаточно было открыть Etherscan, скопировать чужую транзакцию и подменить адрес кошелька на свой.

В этот момент кросс-чейн мост Nomad перестал быть инфраструктурным проектом и превратился в общественную кассу самообслуживания. За четыре часа из контракта вынесли 152 миллиона долларов, и сделали это 300 разных кошельков, многие из которых никогда раньше не взаимодействовали с протоколом.

Как это вообще стало возможно

Nomad устроен как классический lock-and-mint мост. Вы блокируете токены на одном блокчейне, а мост чеканит обёрнутые версии на другом. Чтобы получить оригиналы обратно, нужно сжечь обёрнутую версию, после чего смарт-контракт разблокирует залог.

Вся безопасность держалась на одном поле в контракте, trusted root. Каждый запрос на вывод сверялся с этим значением. Если хеш сообщения совпадал с trusted root, запрос проходил. Если нет, отклонялся.

21 июня 2022 года команда выкатила рутинный апдейт контракта и при инициализации записала trusted root в ноль. На первый взгляд безобидно: устанавливать значение в ноль при инициализации вполне нормальная практика. На деле эта строка превратила любое непроверенное сообщение в валидное. Хеш пустого, не сохранённого сообщения тоже равен нулю, а значит, любой кошелёк мог запросить любую сумму, и контракт её подтверждал.

Эта дыра жила в основной сети шесть недель. Никто не трогал код, никто не запускал внутренний аудит, никто не отследил, что флаг доверия стоит в положении on по умолчанию.

Транзакция за 2 300 долларов, которая принесла 2,3 миллиона

1 августа 2022 года Александр Гуревич отправил в мост 0,01 wrapped Bitcoin и забрал 100 WBTC на 2,3 миллиона долларов. Возврат 10 000x с одного клика, без флеш-займа и без сложной логики.

Транзакция появилась в Etherscan через несколько секунд и моментально разошлась по криптотвиттеру и Discord. Дальше начинается главное, ради чего этот кейс стоит изучать любому, кто пишет смарт-контракты или работает с публичной инфраструктурой.

Люди начали копировать транзакцию Гуревича прямо из блок-эксплорера. Они открывали её во вкладке raw input, меняли только адрес получателя на свой и нажимали submit. Никакого кода, никакого скрипта, никакого реверса байткода. Атака, исполняемая мышкой.

Исследователь samczsun позже назвал это a frenzied free for all, и термин прижился. За следующие четыре часа 300 разных кошельков повторили манёвр. 41 из них вынес 152 миллиона долларов, примерно 80% всей суммы. Часть участников оказалась white hat и потом вернула средства. Большинство просто оставили деньги себе.

Когда команда Nomad поставила контракт на паузу, мост был уже пуст. Mandiant в официальном отчёте назвал событие Decentralized Robbery, потому что классические признаки взлома здесь не работают. Это не один атакующий и не группа. Это толпа, синхронизированная публичным блок-эксплорером.

Что в итоге стало с Гуревичем

Из 190 миллионов в протокол вернулось около 36 миллионов. ФБР открыло дело и охотилось за Гуревичем с 2023 года. Триггером стало его собственное сообщение в Telegram, которое он отправил CTO Nomad сразу после эксплойта, оно и легло в основу обвинения.

В мае 2025 года израильская полиция задержала Гуревича в аэропорту Бен-Гурион. Он пытался улететь в Россию по поддельному паспорту, за два дня до этого официально сменив имя на Alexander Block.

Он признал факт эксплойта, извинился, попросил bug bounty в 500 000 долларов. Nomad предложил 10%. После этого Гуревич замолчал. Сейчас ему грозит до 20 лет в федеральной тюрьме США по восьми пунктам: мошенничество с использованием средств связи, отмывание денег и транспортировка похищенного имущества. Остальные 299 кошельков до сих пор помечены в Etherscan как участники атаки.

Какие уроки тут важны для разработчиков

Кейс Nomad полезен не тем, что в смарт-контракте была ошибка. Ошибки случаются у всех. Полезен он структурой инцидента.

Инициализация по умолчанию опаснее, чем кажется. Значение ноль для критичного поля доверия превращает контракт в открытую дверь, если логика проверки не делает явного исключения для нулевого хеша. Любая константа, которая означает доверяй этому, должна валидироваться отдельно, а не сравниваться через равенство.

Публичность блокчейна означает не только аудит, но и копипаст. Если эксплойт можно повторить, скопировав calldata и заменив один адрес, то после первой удачной транзакции у вас не один атакующий, а вся аудитория Etherscan.

Шесть недель без ревизии продакшен-контракта с миллионами долларов внутри это не редкость. Code freeze после деплоя не равен безопасности. Continuous monitoring и постдеплой-аудиты должны быть частью пайплайна, а не разовой активностью перед релизом.

Социальная динамика инцидента важна не меньше технической. Когда 300 человек одновременно решают «почему бы и нет», это уже не баг и не атака в классическом смысле. Это сигнал, что у инфраструктуры нет ни rate limiting, ни circuit breaker, ни механизма паузы по аномальному оттоку.

Источник: пост @0xSweep в X, https://x.com/0xSweep/status/2055785861141413958

+1
0
+1
0
+1
0
+1
0
+1
0

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *