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