Euler Finance подвергся флеш-атаке займа, потеряв почти 200 миллионов долларов
13 марта 2023 года проект Euler Finance подвергся серьезной флеш-атаке займа. Согласно данным мониторинга в блокчейне, злоумышленник использовал уязвимость в контракте проекта и успешно украл около 197 миллионов долларов, затронув 6 различных токенов.
Анализ процесса атаки
Атакующий сначала получил срочные займы на сумму 30 миллионов DAI с одной из платформ кредитования, а затем развернул два ключевых контракта: один для операций с займами, другой для ликвидации.
Основные шаги атаки следующие:
Заложите 20 миллионов DAI в контракт Euler Protocol, чтобы получить 19.5 миллионов eDAI.
Используя функцию кредитного плеча 10x протокола Euler, взять в долг 195,6 миллиона eDAI и 200 миллионов dDAI.
Используйте оставшиеся 10 миллионов DAI для частичного погашения долга и уничтожьте соответствующее количество dDAI.
Снова займитесь выдачей такого же количества eDAI и dDAI.
Пожертвовать 100 миллионов eDAI через функцию donateToReserves, затем вызвать функцию liquidate для ликвидации и получить 310 миллионов dDAI и 250 миллионов eDAI.
В конце извлечено 38,9 миллиона DAI, возвращено 30 миллионов Срочных займов, чистая прибыль составила около 8,87 миллиона DAI.
Анализ причин уязвимости
Основной уязвимостью этой атаки является отсутствие необходимых проверок ликвидности в функции donateToReserves контракта Euler Finance. В отличие от других ключевых функций, таких как функция mint, функция donateToReserves не выполняет операцию checkLiquidity, что позволяет злоумышленнику манипулировать состоянием своего аккаунта, чтобы оно соответствовало условиям ликвидации.
В нормальных условиях функция checkLiquidity вызывает модуль RiskManager, чтобы гарантировать, что количество eToken у пользователя всегда больше, чем количество dToken. Однако из-за отсутствия этого ключевого шага в функции donateToReserves злоумышленник смог обойти механизм безопасности и добиться неправомерной прибыли.
Рекомендации по безопасности
В ответ на такие атаки проектам блокчейна следует:
Провести полную безопасность аудита перед запуском контракта, чтобы гарантировать качество и безопасность кода.
Особое внимание следует уделить ключевым этапам, таким как возврат средств, проверка ликвидности и ликвидация долгов в проектах, связанных с займами.
Убедитесь, что все функции, которые могут повлиять на состояние активов пользователей, содержат необходимые шаги проверки безопасности.
Регулярно проводить код-ревью и сканирование на уязвимости, своевременно устранять потенциальные риски.
Рассмотрите возможность введения механизма мультиподписей или временной блокировки и других дополнительных мер безопасности для резервирования буферного времени на случай чрезвычайных ситуаций.
Данный инцидент еще раз подчеркивает важность безопасности смарт-контрактов. Проектные команды должны всегда ставить безопасность на первое место, через постоянные практики безопасности и технические инновации совместно строить более безопасную и надежную экосистему Web3.
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
19 Лайков
Награда
19
5
Поделиться
комментарий
0/400
liquidation_surfer
· 07-11 22:36
Срочные займы снова попали в беду
Посмотреть ОригиналОтветить0
ZKSherlock
· 07-11 21:59
Аудит контрактов слишком нестрогий
Посмотреть ОригиналОтветить0
ResearchChadButBroke
· 07-10 21:58
Действительно сложно защититься от уязвимостей в контрактах.
Euler Finance подвергся флеш-атаке займа на 197 миллионов долларов, функция donateToReserves содержит уязвимость
Euler Finance подвергся флеш-атаке займа, потеряв почти 200 миллионов долларов
13 марта 2023 года проект Euler Finance подвергся серьезной флеш-атаке займа. Согласно данным мониторинга в блокчейне, злоумышленник использовал уязвимость в контракте проекта и успешно украл около 197 миллионов долларов, затронув 6 различных токенов.
Анализ процесса атаки
Атакующий сначала получил срочные займы на сумму 30 миллионов DAI с одной из платформ кредитования, а затем развернул два ключевых контракта: один для операций с займами, другой для ликвидации.
Основные шаги атаки следующие:
Заложите 20 миллионов DAI в контракт Euler Protocol, чтобы получить 19.5 миллионов eDAI.
Используя функцию кредитного плеча 10x протокола Euler, взять в долг 195,6 миллиона eDAI и 200 миллионов dDAI.
Используйте оставшиеся 10 миллионов DAI для частичного погашения долга и уничтожьте соответствующее количество dDAI.
Снова займитесь выдачей такого же количества eDAI и dDAI.
Пожертвовать 100 миллионов eDAI через функцию donateToReserves, затем вызвать функцию liquidate для ликвидации и получить 310 миллионов dDAI и 250 миллионов eDAI.
В конце извлечено 38,9 миллиона DAI, возвращено 30 миллионов Срочных займов, чистая прибыль составила около 8,87 миллиона DAI.
Анализ причин уязвимости
Основной уязвимостью этой атаки является отсутствие необходимых проверок ликвидности в функции donateToReserves контракта Euler Finance. В отличие от других ключевых функций, таких как функция mint, функция donateToReserves не выполняет операцию checkLiquidity, что позволяет злоумышленнику манипулировать состоянием своего аккаунта, чтобы оно соответствовало условиям ликвидации.
В нормальных условиях функция checkLiquidity вызывает модуль RiskManager, чтобы гарантировать, что количество eToken у пользователя всегда больше, чем количество dToken. Однако из-за отсутствия этого ключевого шага в функции donateToReserves злоумышленник смог обойти механизм безопасности и добиться неправомерной прибыли.
Рекомендации по безопасности
В ответ на такие атаки проектам блокчейна следует:
Провести полную безопасность аудита перед запуском контракта, чтобы гарантировать качество и безопасность кода.
Особое внимание следует уделить ключевым этапам, таким как возврат средств, проверка ликвидности и ликвидация долгов в проектах, связанных с займами.
Убедитесь, что все функции, которые могут повлиять на состояние активов пользователей, содержат необходимые шаги проверки безопасности.
Регулярно проводить код-ревью и сканирование на уязвимости, своевременно устранять потенциальные риски.
Рассмотрите возможность введения механизма мультиподписей или временной блокировки и других дополнительных мер безопасности для резервирования буферного времени на случай чрезвычайных ситуаций.
Данный инцидент еще раз подчеркивает важность безопасности смарт-контрактов. Проектные команды должны всегда ставить безопасность на первое место, через постоянные практики безопасности и технические инновации совместно строить более безопасную и надежную экосистему Web3.