Критический взлом моста Wanchain для Cardano: украдено 515 млн токенов NIGHT
Эксплойт кроссчейн-моста Wanchain, связывающего Cardano с BNB Chain, потряс сообщество. В результате атаки из пула ликвидности было выведено порядка 515 миллионов токенов NIGHT. По моим оценкам, на момент инцидента эта сумма составляла от $9 до $13 миллионов, в зависимости от рыночных условий.
Это событие — очередное суровое напоминание о том, что кроссчейн-мосты остаются наиболее уязвимым звеном в экосистеме DeFi. Давайте разберем технические детали и последствия.
Причина инцидента: баг в валидаторе TreasuryCheck
Первичное расследование, проведенное специалистами по безопасности из BlockSec, выявило корень проблемы — неинъективное кодирование подписанного сообщения в валидаторе TreasuryCheck. Валидатор — это смарт-контракт, отвечающий за проверку легитимности операций. Термин «неинъективное кодирование» означает, что различные входные наборы данных могут приводить к одному и тому же выходному значению. Проще говоря, система теряет способность различать разные операции, что открывает путь для атаки.
Механизм уязвимости выглядел следующим образом:
- Подписанное сообщение формировалось путем «сырой» конкатенации 14 полей переменной длины (redeemer) через функцию AppendByteString, без использования разделителей и префиксов длины. Redeemer — это набор данных, прилагаемый к транзакции для подтверждения ее правомерности.
- Из-за этого разные наборы значений полей могли давать идентичную байтовую строку.
- Одинаковая строка приводила к одинаковому хешу (цифровому отпечатку) и, как следствие, к одной и той же подписи, пригодной для повторного использования.
BlockSec подтвердила это, декомпилировав ончейн-байткод Plutus V2 и раскодировав redeemer из транзакции эксплойта. В коде присутствовала встроенная функция SerialiseData, но она применялась только при сопоставлении output-datum, а не при построении хеша для подписи. Использование Sha3_256(SerialiseData(...)) обеспечило бы однозначные границы полей в кодировке CBOR и предотвратило бы атаки данного класса.
Представьте: директор одобряет цифровую комбинацию «12345» и заверяет ее подписью. Проверяющая программа делит комбинацию на поля: «кому» = 12, «сколько» = 345. Но в самой комбинации нет разделителя. Злоумышленник не подделывает подпись, а лишь сдвигает невидимую границу: «кому» = 123, «сколько» = 45. Подпись остается действительной, а получатель и сумма меняются. Именно на этом и была построена атака.
Последствия и реакция рынка
Злоумышленники, используя эту уязвимость, сфабриковали сообщения для нелегитимной эмиссии токенов, после чего конвертировали украденные NIGHT в ADA в сети Cardano. Команда Wanchain оперативно отключила мост для проведения расследования и пообещала полную прозрачность.
Токен NIGHT — нативный актив проекта Midnight, ориентированного на приватность и развиваемого при поддержке Input Output (IO), стоящей за Cardano. Реакция рынка была молниеносной и жестокой: цена NIGHT обрушилась более чем на 30% за сутки, обновив исторический минимум около $0,016.
В Midnight Foundation поспешили заверить сообщество, что инцидент изолирован в пределах моста Wanchain и не затрагивает саму сеть Midnight, ее протокол, валидаторов и ключевую инфраструктуру. Они подчеркивают, что проблема — в сторонней инфраструктуре, а не в активе NIGHT или блокчейне Midnight.
Аналитический вывод: Данный инцидент — это классический пример «атаки повторного использования подписи», ставший возможным из-за пренебрежения стандартами безопасного кодирования. Он не ставит крест на Cardano или Midnight, но служит критическим сигналом для всех разработчиков кроссчейн-решений. Безопасность мостов должна быть на порядок выше, иначе мы будем наблюдать подобные коллапсы и дальше. Восстановление доверия к Wanchain и токену NIGHT теперь будет долгим и болезненным процессом.