Согласно отчету компании Verichains, занимающейся безопасностью блокчейнов, эксплойт Ronin Bridge стоимостью 10 миллионов долларов, произошедший 6 августа, был вызван неисправным скриптом развертывания обновления.
По словам Verichains, обновление снизило порог голосования для валидаторов до нуля, по сути, позволив любому пользователю выйти из моста «без подписи».
Позже владелец бота вернул большую часть средств команде Ronin.
Анализ Verichains раскрывает риски, которым подвергаются пользователи при взаимодействии с обновляемыми смарт-контрактами. Протокол мог бы потерять всю сумму, если бы злоумышленник заплатил больше газа и, следовательно, избежал бы лидера.
Ronin — это блокчейн-сеть, предназначенная для хостинга игр Web3. Она наиболее известна как дом Axie Infinity, игры с разведением монстров, в которой, как утверждается, на пике популярности в 2022 году было более 2 миллионов игроков. Игроки в Ronin используют мост для перевода средств между Ethereum и Ronin.
Согласно отчету Verichains, мост использует переменную mimimumVoteWeight, чтобы не допустить вывода пользователями средств, которые им не принадлежат. Каждая транзакция должна быть авторизована минимальным количеством валидаторов, заданным этой переменной. Когда вычисляется minimumVoteWeight, он использует другую переменную, totalWeight, в качестве входных данных.
В более ранних версиях моста totalWeight существовал в отдельном контракте, который назывался «MainchainBridgeManager». Когда разработчики создавали новое обновление, они хотели переместить эту переменную во внутреннее хранилище моста, а не оставлять ее в другом контракте. Это означало, что им нужно было инициализировать переменную в момент развертывания, установив TotalWeight на значение, которое было в предыдущей версии.
К сожалению, именно здесь обновление пошло ужасно неправильно. По словам Verichains, разработчики Ronin написали несколько разных функций «инициализации», которые должны были вызываться в момент развертывания. У каждой из этих функций был свой номер версии. Третья версия содержала важную инициализацию totalWeight. Но когда разработчики писали скрипт развертывания, они вызвали только версию 4, оставив totalWeight равным нулевому значению по умолчанию.
После этого обновления пользователям больше не нужно было отправлять подписи валидаторам, чтобы доказать свое право на отзыв. Они могли снять «без подписи», поскольку «она соответствовала условию minimumVoteWeight (которое было равно 0 из-за неинициализации)».
В сообщении от 7 августа в X аудитор смарт-контрактов Composable Security Дамиан Русинек дал более подробную информацию о том, что позволило осуществить атаку. По словам Русинека, злоумышленник предоставил подпись с адреса, заканчивающегося на B849f. Однако этот адрес «не был в списке операторов моста». Он не должен был быть в списке операторов моста, потому что «минимальное количество голосов операторов было равно 0». Следовательно, «требовалась только ОДНА подпись, и это могла быть ЛЮБАЯ действительная подпись».
Хотя это и не вдавалось в такие подробности, как Verichains или Rusinek, Ronin подтвердил в сообщении X от 6 августа, что эксплойт был вызван, когда обновление «вызвало проблему, из-за которой мост неправильно интерпретировал требуемый порог голосования операторов моста для вывода средств».
Данные блокчейна показывают, что эта транзакция атаки была организована ботом MEV под названием «Frontrunner Yoink», который успешно слил криптовалюту на сумму более 10 миллионов долларов с моста. По словам Русинека, бот, скорее всего, «симулировал изменение адреса и суммы и использовал свою собственную подпись». Затем он отправил транзакцию, как только эта симуляция доказала, что эксплойт сработает.
По теме: Ronin Network взломали на $9,8 млн в ETH, подозревается хакер-убийца
Владелец лидера Yoink вернул большую часть средств в тот же день, а команда Ronin объявила, что им будет разрешено оставить себе 500 000 долларов в качестве вознаграждения за обнаружение ошибок.
Пользователи Ronin пострадали от атаки 6 августа. К счастью, атака была организована ботом MEV, владельцем которого был честный оператор white hat. Однако тот факт, что атака была так близка к успеху, раскрывает рискованную природу обновляемых мостов кросс-цепей.
Некоторые сети утверждают, что эта проблема будет устранена, когда Ethereum layer 2s достигнет «этапа 2», а все обновления будут отложены как минимум на семь дней после инициации. Однако критики утверждают, что процесс достижения этого этапа занимает слишком много времени и может никогда не быть завершен.
Журнал: Странный взлом iVest с «нулевым адресом», миллионы ПК по-прежнему уязвимы для вредоносного ПО «Sinkclose»: Crypto-Sec