Критичний злам мосту 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 тепер буде довгим і болючим процесом.