Euler Finance подвергся флеш-атаке займа, убытки составили до 197 миллионов долларов
13 марта 2023 года проект Euler Finance стал жертвой флеш-атаки займа из-за уязвимости в контракте, что привело к огромным потерям. Злоумышленники использовали уязвимость в функции donateToReserves контракта, в которой отсутствовала проверка ликвидности, чтобы многократно получить значительные средства. В этом инциденте было задействовано 6 токенов, общие потери составили 197 миллионов долларов.
Анализ процесса атаки
Злоумышленник сначала берет в долг 30 миллионов DAI через Срочные займы на одной из платформ, а затем развертывает два контракта: контракт займа и контракт ликвидации.
Атакующий заложил 20 миллионов DAI в контракт Euler Protocol и получил 195000 eDAI.
Используя функцию 10-кратного кредитного плеча Euler Protocol, злоумышленник занял 1,956,000 eDAI и 2,000,000 dDAI.
Нападающий использует оставшиеся 10 миллионов DAI для частичного погашения долга и уничтожает соответствующее количество dDAI, после чего снова берет в долг 1,956,000 eDAI и 2,000,000 dDAI.
Ключевые шаги: злоумышленник вызывает функцию donateToReserves, жертвуя 1 миллион eDAI (это в 10 раз больше суммы возврата). Затем злоумышленник вызывает функцию liquidate для ликвидации, получая 3,1 миллиона dDAI и 2,5 миллиона eDAI.
Наконец, злоумышленник вывел 389000 DAI и вернул Срочные займы в 30000000 DAI, в конечном итоге заработав 8870000 DAI.
Анализ причин уязвимости
Основная проблема этой атаки заключается в том, что в контракте Euler Finance функция donateToReserves не содержит необходимых проверок ликвидности. В отличие от функции mint, функция donateToReserves не выполняет шаг checkLiquidity, что позволяет злоумышленнику обойти нормальную проверку ликвидности.
В нормальных условиях функция checkLiquidity вызывает модуль RiskManager, чтобы убедиться, что количество eToken у пользователя больше, чем количество dToken. Однако из-за отсутствия этого ключевого шага в функции donateToReserves злоумышленник смог воспользоваться этой уязвимостью, сначала приведя себя в состояние, подлежащее ликвидации, а затем завершив операцию ликвидации.
Рекомендации по безопасности
В связи с подобными атаками, мы рекомендуем командам DeFi проектов:
Проведение全面 аудита безопасности перед запуском контракта, чтобы гарантировать безопасность контракта.
Для кредитных проектов особое внимание следует уделить ключевым аспектам, таким как погашение средств, проверка ликвидности и ликвидация долгов.
В каждой функции, которая может повлиять на состояние средств пользователя, должны быть реализованы строгие проверки ликвидности.
Регулярно проводить аудит кода и обновления, своевременно исправлять обнаруженные уязвимости.
Рассмотрите возможность внедрения дополнительных мер безопасности, таких как многофакторная подпись или временная блокировка.
Это событие еще раз напоминает нам о том, что безопасность контрактов всегда имеет решающее значение в быстро развивающейся области DeFi. Команды проектов должны постоянно повышать свою осведомленность о безопасности и принимать многоуровневые меры защиты для обеспечения безопасности активов пользователей.
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
15 Лайков
Награда
15
7
Поделиться
комментарий
0/400
HodlVeteran
· 07-13 01:44
Ещё одна яма, опытный водитель наступает на неё уже десять лет.
Посмотреть ОригиналОтветить0
DiamondHands
· 07-13 01:36
Снова взорвалось
Посмотреть ОригиналОтветить0
GasFeeCrier
· 07-12 00:27
Контракт слишком небрежен.
Посмотреть ОригиналОтветить0
NftMetaversePainter
· 07-10 03:38
еще одна примитивная эксплуатация из-за недостаточной алгоритмической верификации...сочувствую, web3 буквально плачет сейчас
Euler Finance подвергся флеш-атаке займа, убытки составили 197 миллионов долларов.
Euler Finance подвергся флеш-атаке займа, убытки составили до 197 миллионов долларов
13 марта 2023 года проект Euler Finance стал жертвой флеш-атаки займа из-за уязвимости в контракте, что привело к огромным потерям. Злоумышленники использовали уязвимость в функции donateToReserves контракта, в которой отсутствовала проверка ликвидности, чтобы многократно получить значительные средства. В этом инциденте было задействовано 6 токенов, общие потери составили 197 миллионов долларов.
Анализ процесса атаки
Злоумышленник сначала берет в долг 30 миллионов DAI через Срочные займы на одной из платформ, а затем развертывает два контракта: контракт займа и контракт ликвидации.
Атакующий заложил 20 миллионов DAI в контракт Euler Protocol и получил 195000 eDAI.
Используя функцию 10-кратного кредитного плеча Euler Protocol, злоумышленник занял 1,956,000 eDAI и 2,000,000 dDAI.
Нападающий использует оставшиеся 10 миллионов DAI для частичного погашения долга и уничтожает соответствующее количество dDAI, после чего снова берет в долг 1,956,000 eDAI и 2,000,000 dDAI.
Ключевые шаги: злоумышленник вызывает функцию donateToReserves, жертвуя 1 миллион eDAI (это в 10 раз больше суммы возврата). Затем злоумышленник вызывает функцию liquidate для ликвидации, получая 3,1 миллиона dDAI и 2,5 миллиона eDAI.
Наконец, злоумышленник вывел 389000 DAI и вернул Срочные займы в 30000000 DAI, в конечном итоге заработав 8870000 DAI.
Анализ причин уязвимости
Основная проблема этой атаки заключается в том, что в контракте Euler Finance функция donateToReserves не содержит необходимых проверок ликвидности. В отличие от функции mint, функция donateToReserves не выполняет шаг checkLiquidity, что позволяет злоумышленнику обойти нормальную проверку ликвидности.
В нормальных условиях функция checkLiquidity вызывает модуль RiskManager, чтобы убедиться, что количество eToken у пользователя больше, чем количество dToken. Однако из-за отсутствия этого ключевого шага в функции donateToReserves злоумышленник смог воспользоваться этой уязвимостью, сначала приведя себя в состояние, подлежащее ликвидации, а затем завершив операцию ликвидации.
Рекомендации по безопасности
В связи с подобными атаками, мы рекомендуем командам DeFi проектов:
Проведение全面 аудита безопасности перед запуском контракта, чтобы гарантировать безопасность контракта.
Для кредитных проектов особое внимание следует уделить ключевым аспектам, таким как погашение средств, проверка ликвидности и ликвидация долгов.
В каждой функции, которая может повлиять на состояние средств пользователя, должны быть реализованы строгие проверки ликвидности.
Регулярно проводить аудит кода и обновления, своевременно исправлять обнаруженные уязвимости.
Рассмотрите возможность внедрения дополнительных мер безопасности, таких как многофакторная подпись или временная блокировка.
Это событие еще раз напоминает нам о том, что безопасность контрактов всегда имеет решающее значение в быстро развивающейся области DeFi. Команды проектов должны постоянно повышать свою осведомленность о безопасности и принимать многоуровневые меры защиты для обеспечения безопасности активов пользователей.