Как неправильный порядок двух строк кода позволил украсть 56,73 ETH из NovaBox
10.06.2026 | CoinKyt Company

10 июня 2026 года злоумышленник несколько раз подряд получил дивиденды от контракта NovaBox, на которые не имел никакого права. Причина — не взлом и не хитрая схема обхода защиты. Просто две операции в коде стояли в неправильном порядке.

 


Введение


NovaBox — смарт-контракт на Ethereum, который работает по принципу общего пула: участники вносят ETH, контракт автоматически распределяет часть входящих средств между всеми вкладчиками в виде дивидендов. Чем больше доля участника в пуле — тем больше он получает при каждом новом пополнении.


Логика проста и понятна. Но в реализации закралась ошибка, которая позволяла получать дивиденды ещё до того, как твой вклад был официально засчитан.

 


Ход инцидента


1️⃣ Мгновенный кредит. Злоумышленник взял флэш-лоан — мгновенный кредит в блокчейне, который выдаётся и возвращается в рамках одной транзакции, без залога. Сумма займа составила около 427 ETH (примерно $1,1 млн).


2️⃣ Пополнение контракта. Злоумышленник отправил эти ETH в контракт NovaBox. По правилам контракта, при каждом пополнении 4% от суммы автоматически распределяются между всеми текущими участниками пула.


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


4️⃣ Вывод и повтор. Сразу после получения незаконных дивидендов злоумышленник выводил средства и повторял цикл заново. Несколько таких итераций — и контракт потерял 56,73 ETH сверх того, что атакующий вносил.


5️⃣ Возврат кредита. В конце злоумышленник вернул 427 ETH кредитору. Оставшиеся ~57 ETH — его незаконно полученные средства.

 


Почему это стало возможным


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


В NovaBox порядок был обратным: сначала распределение, потом фиксация вклада. Из-за этого в момент распределения контракт «видел» большой вклад атакующего и включал его в расчёт — хотя по факту вклад ещё не должен был учитываться.


Такой тип ошибки называется проблемой учёта при повторном входе (reentrancy-like accounting issue) — контракт принимает решение о распределении, не успев правильно обновить внутреннее состояние. Флэш-лоан позволил многократно усилить эффект: с большой суммой «незасчитанного» вклада каждая итерация приносила атакующему больше незаконных дивидендов.

 


Детали расследования: движение средств


Злоумышленник получил займ ~427 ETH на контракт 0x118383515125695ef5168390113E13d4628c1760, откуда средства были направлены на эксплойт-контракт 0x2ed422B177FAb294e3cdfC3bC8b1B48ed6c6F617.


После нескольких циклов взаимодействия с NovaBox на эксплойт-контракт вернулось ~484 ETH двумя транзакциями. Долг в размере ~427 ETH был возвращён кредитору, оставшиеся средства прошли через промежуточный адрес 0xB50bE385f6EB02aE379DA3D3A1BB58a0dc260858 и осели на двух конечных адресах:


0x3690c5EFc63eeA1167c4d92a3f2dD8afdb85C294 около 47 ETH

0x0e614C73446957A6ceCFe0Df2855E979E4792D4a около 9 ETH


На момент расследования средства остаются на этих адресах без движения.


Основная транзакция: 0x0cfa357e9e4db1540246f17cb6bfa0634ff8727d7cf241b63fb22605021c8844

 


Заключение


Атака на NovaBox обошлась проекту в 56,73 ETH — и всё это из-за того, что в коде контракта две операции стояли в неправильном порядке. Никакого сложного взлома, никаких уязвимостей нулевого дня. Просто логическая ошибка, которую не заметили при аудите.


Флэш-лоан позволил злоумышленнику многократно использовать эту ошибку в рамках нескольких транзакций, превратив небольшой изъян в ощутимый ущерб. Похищенные средства на момент расследования остаются на известных адресах и не выведены в миксер.


Команда «КоинКит» продолжает отслеживать движение средств.