Протокол DeFi Abracadabra теряет $1.8 миллиона
Протокол DeFi Abracadabra потерял $1.8 миллиона после того, как злоумышленник использовал простую логическую ошибку в его пакетной функции. Аналитики из Hacken сообщают, что злоумышленник уже отмыл средства через Tornado Cash.
Обзор инцидента
В начале октября Abracadabra, протокол DeFi для кредитования, который позволяет пользователям занимать его стейблкоин MIM, используя депонированные токены в качестве залога, уже подвергался множественным атакам хакеров. В этот раз он снова потерял около $1.8 миллиона, когда злоумышленник использовал логическую ошибку в пакетной функции протокола, чтобы занять средства без предоставления залога.
Это произошло аналогично инциденту с форкнутым проектом всего за несколько дней до этого, как сообщается в исследовательской записке аналитиков блокчейн-безопасности Hacken, опубликованной на crypto.news.
Как работает Abracadabra
Abracadabra был запущен как способ для пользователей использовать токены с процентами в качестве залога и занимать токен, привязанный к доллару США, называемый Magic Internet Money (MIM). Система построена вокруг двух компонентов: Cauldrons, которые обрабатывают правила кредитования, и DegenBox, общий кошелек, который фактически хранит токены.
Проще говоря, вы предоставляете залог в Cauldron, а DegenBox отслеживает деньги за кулисами.
Что пошло не так
Кратко о том, что пошло не так: флаг безопасности, который должен был заставить провести окончательную проверку наличия залога у заемщика, был отключен внутри одной транзакции. Как указывает отчет Hacken, злоумышленник «воспользовался логическим недостатком в функции cook Abracadabra, где они могли занять токены MIM и затем немедленно сбросить флаг проверки, который должен был удостовериться, что у них есть достаточный залог.» Это позволило осуществить однократный займ без залога через несколько Cauldrons.
Механизм атаки
Вот как это работало, простыми словами. Abracadabra использует пакетную функцию, называемую cook, чтобы пользователи могли выполнять несколько действий в одной транзакции. Например, внести залог и занять в один клик. Одно из этих действий, например, шаг «занять», устанавливает флаг с именем needsSolvencyCheck в значение true, что означает «в конце этой транзакции проверьте, что заемщик безопасен.» Но другое действие, которое может быть выполнено внутри того же пакета, вызывает _additionalCookAction(…).
Как указывает Hacken, эта функция была объявлена как «виртуальная» и никогда не была реализована, поэтому по умолчанию она возвращала пустой объект, где все было установлено в false, включая флаг needsSolvencyCheck. В результате злоумышленник вызвал действие займа, затем вызвал действие по умолчанию, которое сбросило флаг, и в конце протокол никогда не проверял платежеспособность.
Последствия атаки
Аналитики сообщают, что злоумышленник атаковал шесть Cauldrons за один раз, забрав примерно 1.79 миллиона MIM и обменяв их на ETH. Злоумышленники использовали уязвимость и систематически прошли через шесть различных Cauldrons, опустошив каждый из них «с использованием той же техники с вызовом специальной функции cook», объяснили аналитики.
После обмена злоумышленник направил средства через Tornado Cash, протокол смешивания криптовалют, в основном по 10 ETH каждый, постепенно отправляя их в течение следующего дня.
История уязвимостей
Это не первый раз, когда код CauldronV4 Abracadabra оказался в центре проблем. Ранее в этом году произошли другие инциденты, использующие различные крайние случаи в той же группе контрактов. Интересно, как быстро отреагировала форкнутая версия.
Согласно отчету, форк под названием Synnax приостановил или убрал из белого списка свой мастер CauldronV4 на своем собственном DegenBox за несколько дней до утечки Abracadabra, что предполагает, что команда форка заметила тот же слабый паттерн и приняла меры, если не была устранена уязвимость.