Три тысячи токенов на подпись — а вывели двести три миллиона. Именно так 21 июля хакеры обошли мост Wanchain, который связывает Cardano с BNB Chain, и забрали около 515 миллионов токенов NIGHT на сумму порядка $13 млн.
NIGHT — токен сети Midnight, приватного партнёрского блокчейна Cardano, который основатель Cardano Чарльз Хоскинсон запускал как ответ на растущий спрос на конфиденциальные транзакции. Мост Wanchain обеспечивал перенос активов, включая стейблкоин RLUSD, между Cardano и BNB Chain — и именно в его коде нашли дыру.
Команда безопасности BlockSec Phalcon разобрала атаку буквально по байтам. Валидатор моста под названием TreasuryCheck собирал подпись из 14 полей переменной длины, просто склеивая их подряд — без разделителей и без указания длины каждого поля. В итоге разные комбинации данных схлопывались в одну и ту же строку байт и один и тот же хеш. Легитимная подпись, разрешавшая вывод скромных 3 110 NIGHT, превратилась в пропуск на вывод более 203 миллионов токенов — рост в 65 000 раз. При этом нужная функция сериализации данных Cardano, которая решила бы проблему, в коде моста просто не использовалась при построении хеша подписи.
Цена NIGHT рухнула больше чем на 30%, обновив исторический минимум около $0,016–0,019. Похищенные токены — это примерно 2% от общего выпуска в 24 млрд NIGHT, но зато почти вся казна самого моста. Wanchain сразу остановил работу моста и занялся расследованием, а фонд Midnight поспешил успокоить держателей: инцидент, по их словам, полностью изолирован в стороннем мосте и никак не затронул валидаторов, консенсус и основной протокол сети.
Формально это правда — Midnight как сеть не взломана. Но именно мосты второй год подряд остаются самым слабым звеном мультичейн-инфраструктуры: похожая история в июне произошла с Humanity Protocol на $31 млн, а в июле — с оракулом Ostium на $18 млн. Атакующие всё реже ломают сами блокчейны и всё чаще ищут ошибку в стыковочном коде между ними — там, где разные системы должны договориться об одном и том же формате данных, но не всегда это делают правильно.



