Анализ инцидента с уязвимостью Euler Finance: флеш-атака займа привела к убыткам в 197 миллионов долларов
13 марта 2023 года проект Euler Finance столкнулся с серьезным инцидентом безопасности. Согласно данным мониторинга в блокчейне, проект подвергся флеш-атаке займа из-за уязвимости в функции donateToReserves в Etoken, связанной с проверкой ликвидности. Атакующий, проводя множество операций с различными монетами, в конечном итоге нанес ущерб на сумму до 197 миллионов долларов, затронув 6 различных токенов. В настоящее время эти средства по-прежнему находятся на счету злоумышленника.
Анализ процесса атаки
Атакующий сначала получил 30 миллионов Dai через Срочные займы на одной из платформ кредитования, затем развернул два контракта: один для заимствования, другой для ликвидации.
Злоумышленник заложил 20 миллионов Dai в контракте Euler Protocol и получил около 19,5 миллионов eDAI.
Используя функционал 10-кратного плеча Euler Protocol, злоумышленник занял 195,6 миллиона eDAI и 200 миллионов dDAI.
Атакующий использует оставшиеся 10 миллионов DAI для погашения части долга и уничтожает соответствующее количество dDAI, после чего снова занимает 195.6 миллионов eDAI и 200 миллионов dDAI.
Ключевые шаги: злоумышленник вызывает функцию donateToReserves и жертвует сумму, равную 10-кратному объему погашенных средств, то есть 100 миллионов eDAI. Затем злоумышленник запускает функцию ликвидации и получает 310 миллионов dDAI и 250 миллионов eDAI.
В конце концов, злоумышленник вывел 38,9 миллиона Dai, вернул 30 миллионов Срочных займов и в итоге получил прибыль около 8,87 миллиона Dai.
Анализ причин уязвимости
Основная проблема этой атаки заключается в функции donateToReserves. В отличие от других ключевых функций (таких как функция mint), функция donateToReserves не содержит одного важного шага: checkLiquidity.
Функция checkLiquidity предназначена для вызова модуля RiskManager, чтобы проверить пользователя и гарантировать, что Etoken больше Dtoken, тем самым обеспечивая ликвидность пользователя. В нормальных условиях каждое действие должно проходить эту проверку. Однако функция donateToReserves не включает этот шаг, что позволяет злоумышленнику сначала привести себя в состояние, подлежащее ликвидации, а затем завершить операцию ликвидации.
Рекомендации по безопасности
В связи с такими уязвимостями, мы рекомендуем разработчикам проектов обязательно проводить всесторонний аудит безопасности перед запуском, чтобы обеспечить безопасность контрактов. Для проектов в области кредитования особенно важно обратить внимание на следующие аспекты:
Целостность механизма возврата средств
Полнота проверки ликвидности
Безопасность процесса ликвидации долгов
Только через строгую проверку безопасности и всестороннюю оценку рисков можно максимально снизить вероятность возникновения подобных инцидентов с безопасностью и обеспечить безопасность средств проектов и пользователей.
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
14 Лайков
Награда
14
3
Поделиться
комментарий
0/400
AirdropChaser
· 6ч назад
又 разыгрывайте людей как лохов又 разыгрывайте людей как лохов 天天被割
Посмотреть ОригиналОтветить0
DefiSecurityGuard
· 6ч назад
*вздыхает* еще один день, еще один Протокол, разрушенный базовой уязвимостью donateToReserves... предсказывал это месяц назад, если честно. критическое напоминание: ВСЕГДА очищайте проверки ликвидности, черт возьми. эти любительские ошибки продолжают стоить 9 цифр, смх.
Посмотреть ОригиналОтветить0
GasGrillMaster
· 6ч назад
Брат, эта базовая защита не соответствует требованиям, совсем некомпетентно.
Euler Finance подвергся флеш-атаке займа на сумму 197 миллионов долларов, уязвимость функции donateToReserves стала причиной бедствия.
Анализ инцидента с уязвимостью Euler Finance: флеш-атака займа привела к убыткам в 197 миллионов долларов
13 марта 2023 года проект Euler Finance столкнулся с серьезным инцидентом безопасности. Согласно данным мониторинга в блокчейне, проект подвергся флеш-атаке займа из-за уязвимости в функции donateToReserves в Etoken, связанной с проверкой ликвидности. Атакующий, проводя множество операций с различными монетами, в конечном итоге нанес ущерб на сумму до 197 миллионов долларов, затронув 6 различных токенов. В настоящее время эти средства по-прежнему находятся на счету злоумышленника.
Анализ процесса атаки
Атакующий сначала получил 30 миллионов Dai через Срочные займы на одной из платформ кредитования, затем развернул два контракта: один для заимствования, другой для ликвидации.
Злоумышленник заложил 20 миллионов Dai в контракте Euler Protocol и получил около 19,5 миллионов eDAI.
Используя функционал 10-кратного плеча Euler Protocol, злоумышленник занял 195,6 миллиона eDAI и 200 миллионов dDAI.
Атакующий использует оставшиеся 10 миллионов DAI для погашения части долга и уничтожает соответствующее количество dDAI, после чего снова занимает 195.6 миллионов eDAI и 200 миллионов dDAI.
Ключевые шаги: злоумышленник вызывает функцию donateToReserves и жертвует сумму, равную 10-кратному объему погашенных средств, то есть 100 миллионов eDAI. Затем злоумышленник запускает функцию ликвидации и получает 310 миллионов dDAI и 250 миллионов eDAI.
В конце концов, злоумышленник вывел 38,9 миллиона Dai, вернул 30 миллионов Срочных займов и в итоге получил прибыль около 8,87 миллиона Dai.
Анализ причин уязвимости
Основная проблема этой атаки заключается в функции donateToReserves. В отличие от других ключевых функций (таких как функция mint), функция donateToReserves не содержит одного важного шага: checkLiquidity.
Функция checkLiquidity предназначена для вызова модуля RiskManager, чтобы проверить пользователя и гарантировать, что Etoken больше Dtoken, тем самым обеспечивая ликвидность пользователя. В нормальных условиях каждое действие должно проходить эту проверку. Однако функция donateToReserves не включает этот шаг, что позволяет злоумышленнику сначала привести себя в состояние, подлежащее ликвидации, а затем завершить операцию ликвидации.
Рекомендации по безопасности
В связи с такими уязвимостями, мы рекомендуем разработчикам проектов обязательно проводить всесторонний аудит безопасности перед запуском, чтобы обеспечить безопасность контрактов. Для проектов в области кредитования особенно важно обратить внимание на следующие аспекты:
Только через строгую проверку безопасности и всестороннюю оценку рисков можно максимально снизить вероятность возникновения подобных инцидентов с безопасностью и обеспечить безопасность средств проектов и пользователей.