Проект Euler Finance стал жертвой флеш-атаки займа, понес убытки почти в 200 миллионов долларов
13 марта проект Euler Finance стал жертвой флеш-атаки займа из-за уязвимости в смарт-контракте, в результате чего убытки составили до 197 миллионов долларов. Злоумышленники использовали уязвимость функции donateToReserves контракта Etoken, которая не имела проверки ликвидности, и осуществили несколько атак с использованием различных криптовалют.
Анализ процесса атаки
Атакующий сначала получил срочные займы на сумму 30 миллионов DAI с одной из платформ кредитования, затем развернул два контракта: для заемов и для ликвидации. Процесс атаки примерно следующий:
Залог 20 миллионов DAI в контракте Euler Protocol, получение 19,5 миллиона eDAI.
Используя функцию 10-кратного плеча протокола Euler, займите 195,6 миллиона eDAI и 200 миллионов dDAI.
Использовать оставшиеся 10 миллионов DAI для частичного погашения долга и сжечь соответствующее dDAI.
Снова занять такое же количество eDAI и dDAI.
Пожертвуйте 100 миллионов eDAI через функцию donateToReserves, затем вызовите функцию liquidate для ликвидации, получив 310 миллионов dDAI и 250 миллионов eDAI.
В конце извлечено 3890 тысяч DAI, после погашения Срочных займов получена прибыль в 887 тысяч DAI.
Анализ причин уязвимости
Ядро этой атаки заключается в том, что функция donateToReserves проекта Euler Finance не содержит необходимых проверок ликвидности. В отличие от других ключевых функций, таких как mint, функция donateToReserves не вызывает checkLiquidity для проверки ликвидности пользователя. Это позволило злоумышленникам манипулировать состоянием своих учетных записей, чтобы оно соответствовало условиям ликвидации, что привело к неправомерной выгоде.
В нормальных условиях функция checkLiquidity вызывает модуль RiskManager, чтобы гарантировать, что количество Etoken у пользователя всегда больше количества Dtoken. Однако из-за того, что функция donateToReserves пропускает этот шаг, злоумышленник смог обойти механизм безопасности.
Рекомендации по безопасности
Это событие снова подчеркивает важность аудита безопасности смарт-контрактов. Для проектов, связанных с кредитованием, особенно необходимо уделить внимание следующим аспектам:
Целостность механизма возмещения средств
Всеобъемлющая проверка ликвидности
Безопасность процесса ликвидации долгов
Перед развертыванием контракта, проектная команда должна провести всеобъемлющий и тщательный аудит безопасности, чтобы предотвратить появление аналогичных уязвимостей. В то же время, постоянный мониторинг безопасности и своевременное исправление уязвимостей также являются ключевыми для обеспечения долгосрочной безопасной работы проекта.
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
7 Лайков
Награда
7
2
Поделиться
комментарий
0/400
WhaleMinion
· 07-25 11:58
Снова пришел нарушитель.
Посмотреть ОригиналОтветить0
DefiEngineerJack
· 07-25 11:45
*вздыхает* любительский час в проектировании смарт-контрактов... покажите мне формальную верификацию или проваливайте
Euler Finance遭флеш-атака займа损失近2亿美元
Проект Euler Finance стал жертвой флеш-атаки займа, понес убытки почти в 200 миллионов долларов
13 марта проект Euler Finance стал жертвой флеш-атаки займа из-за уязвимости в смарт-контракте, в результате чего убытки составили до 197 миллионов долларов. Злоумышленники использовали уязвимость функции donateToReserves контракта Etoken, которая не имела проверки ликвидности, и осуществили несколько атак с использованием различных криптовалют.
Анализ процесса атаки
Атакующий сначала получил срочные займы на сумму 30 миллионов DAI с одной из платформ кредитования, затем развернул два контракта: для заемов и для ликвидации. Процесс атаки примерно следующий:
Залог 20 миллионов DAI в контракте Euler Protocol, получение 19,5 миллиона eDAI.
Используя функцию 10-кратного плеча протокола Euler, займите 195,6 миллиона eDAI и 200 миллионов dDAI.
Использовать оставшиеся 10 миллионов DAI для частичного погашения долга и сжечь соответствующее dDAI.
Снова занять такое же количество eDAI и dDAI.
Пожертвуйте 100 миллионов eDAI через функцию donateToReserves, затем вызовите функцию liquidate для ликвидации, получив 310 миллионов dDAI и 250 миллионов eDAI.
В конце извлечено 3890 тысяч DAI, после погашения Срочных займов получена прибыль в 887 тысяч DAI.
Анализ причин уязвимости
Ядро этой атаки заключается в том, что функция donateToReserves проекта Euler Finance не содержит необходимых проверок ликвидности. В отличие от других ключевых функций, таких как mint, функция donateToReserves не вызывает checkLiquidity для проверки ликвидности пользователя. Это позволило злоумышленникам манипулировать состоянием своих учетных записей, чтобы оно соответствовало условиям ликвидации, что привело к неправомерной выгоде.
В нормальных условиях функция checkLiquidity вызывает модуль RiskManager, чтобы гарантировать, что количество Etoken у пользователя всегда больше количества Dtoken. Однако из-за того, что функция donateToReserves пропускает этот шаг, злоумышленник смог обойти механизм безопасности.
Рекомендации по безопасности
Это событие снова подчеркивает важность аудита безопасности смарт-контрактов. Для проектов, связанных с кредитованием, особенно необходимо уделить внимание следующим аспектам:
Перед развертыванием контракта, проектная команда должна провести всеобъемлющий и тщательный аудит безопасности, чтобы предотвратить появление аналогичных уязвимостей. В то же время, постоянный мониторинг безопасности и своевременное исправление уязвимостей также являются ключевыми для обеспечения долгосрочной безопасной работы проекта.