Згідно зі звітом фірми з безпеки блокчейну Verichains, 6 серпня експлойт мосту Ronin, який коштує 10 мільйонів доларів, був спричинений несправним сценарієм розгортання оновлення.
Оновлення знизило поріг голосування для валідаторів до нуля, фактично дозволивши будь-якому користувачеві вийти з мосту «без підпису», заявили у Verichains.
Зловмисник спробував скористатися цією вадою, щоб спустошити міст, але він був на передньому плані бота MEV, який фактично здійснив атаку, ймовірно, ненавмисно. Пізніше власник бота повернув більшу частину коштів команді Ronin.
Аналіз Verichains розкриває ризики, на які наражаються користувачі, коли вони взаємодіють зі смарт-контрактами, які можна оновлювати. Протокол міг би втратити всю суму, якби зловмисник заплатив більше за газ і, отже, уникнув лідера.
Ronin — це блокчейн-мережа, призначена для розміщення ігор Web3. Він найбільш відомий тим, що є домом для Axie Infinity, гри для розведення монстрів, яка, як стверджується, мала понад 2 мільйони гравців під час свого піку в 2022 році. Гравці Ronin використовують міст для переказу коштів між Ethereum і Ronin. .
Відповідно до звіту Verichain, міст покладається на змінну mimimumVoteWeight, щоб запобігти виведенню користувачами коштів, які їм не належать. Кожна транзакція має бути авторизована мінімальною кількістю валідаторів, встановлених цією змінною. Коли обчислюється minimumVoteWeight, він використовує іншу змінну, totalWeight, як вхідні дані.
У попередніх версіях мосту totalWeight існував в окремому контракті під назвою «MainchainBridgeManager». Коли розробники створювали нове оновлення, вони хотіли перемістити цю змінну у власну внутрішню пам’ять мосту, а не залишати її в іншому контракті. Це означало, що їм потрібно було ініціалізувати змінну в момент розгортання, встановивши TotalWeight на значення, яке було в попередній версії.
На жаль, саме тут оновлення пішло жахливо не так. За словами Verichain, розробники Ronin написали кілька різних функцій «ініціалізації», які повинні були викликатися в момент розгортання. Кожна з цих функцій мала інший номер версії. Третя версія містила важливу ініціалізацію totalWeight. Але коли розробники писали сценарій розгортання, вони викликали лише версію 4, залишивши totalWeight нульовим значенням за замовчуванням.
Після цього оновлення користувачам більше не потрібно було надсилати підписи валідаторам, щоб підтвердити своє право на відмову. Вони могли відкликати «без підпису», оскільки «вона відповідала умові minimumVoteWeight (яка була 0 через неініціалізацію)».
У дописі 7 серпня для X аудитор смарт-контрактів Composable Security Деміан Русінек надав додаткові подробиці про те, що стало причиною атаки. За словами Русінека, зловмисник надав підпис з адреси, яка закінчується на B849f. Однак ця адреса «[не] була в списку операторів мосту». Йому не потрібно було бути в списку операторів мосту, оскільки «мінімальна кількість голосів операторів була 0». Тому «потрібен був лише ОДИН підпис, і це міг [бути] БУДЬ-ЯКИЙ дійсний підпис».
Незважаючи на те, що вони не вдавалися в такі деталі, як Verichains або Rusinek, Ронін підтвердив у дописі X від 6 серпня, що експлойт був спричинений, коли оновлення «виявило проблему, через яку міст неправильно тлумачив необхідний поріг голосування операторів мосту для виведення коштів .”
Дані блокчейну показують, що ця транзакція атаки була ініціатором бота MEV на ім’я «Frontrunner Yoink», який успішно викачав з мосту криптовалюту на суму понад 10 мільйонів доларів. За словами Русінека, бот, швидше за все, «симулював зміну адреси та суми та використовував власний підпис». Потім він відправив транзакцію, коли симуляція довела, що експлойт спрацює.
Пов’язане: Мережа Ronin використана на 9,8 млн доларів ETH, підозрюється хакер
Власник Frontrunner Yoink повернув більшу частину коштів того ж дня, і команда Ronin оголосила, що їм буде дозволено залишити 500 000 доларів США як винагороду за багів.
Користувачі Ronin постраждали від експлойту 6 серпня. На щастя, авангардом атаки був бот MEV, власником якого був чесний оператор білого капелюха. Однак той факт, що атака була настільки близька до успіху, викриває ризиковану природу перехресних ланцюгових мостів, які можна оновлювати.
Деякі мережі стверджують, що цю проблему буде усунено, коли рівень 2 Ethereum досягне «стадії 2», а всі оновлення відкладено принаймні на сім днів після ініціації. Однак критики стверджують, що процес досягнення цієї стадії триває надто довго і може ніколи не завершитися.
Журнал: дивна «нульова адреса» зламала iVest, мільйони комп’ютерів все ще вразливі до зловмисного програмного забезпечення «Sinkclose»: Crypto-Sec