Проект Euler Finance стал жертвой флеш-атаки займа, убытки составили почти 200 миллионов долларов
13 марта 2023 года проект Euler Finance подвергся флеш-атака займа из-за уязвимости в контракте, что привело к убыткам в размере до 197 миллионов долларов. Атакующий воспользовался уязвимостью в функции donateToReserves контракта проекта, в которой отсутствовала проверка ликвидности, и получил огромную прибыль за счет многократных операций.
Анализ процесса атаки
Нападающий сначала взял в долг 30 миллионов DAI через Срочные займы на одной из платформ, а затем развернул два контракта: контракт займа и контракт ликвидации.
Атакующий заложил заимствованные 20 миллионов DAI в контракт Euler Protocol и получил 195000 eDAI.
Используя функцию 10-кратного кредитного плеча протокола Euler, злоумышленник занял 1,956,000 eDAI и 2,000,000 dDAI.
Нападающий использует оставшиеся 10 миллионов DAI для частичного погашения долга, уничтожает соответствующее количество dDAI, а затем снова занимает эквивалентное количество eDAI и dDAI.
Ключевые шаги: злоумышленник вызывает функцию donateToReserves, жертвует 1 миллион eDAI, а затем через функцию liquidate ликвидирует, получая 3,1 миллиона dDAI и 2,5 миллиона eDAI.
В конце концов, злоумышленник извлек 389000 DAI, вернул 300000 DAI по Срочным займам и в конечном итоге получил прибыль в 88700 DAI.
Причины уязвимости
Основной уязвимостью данной атаки является отсутствие необходимых проверок ликвидности в функции donateToReserves контракта Euler Finance. В отличие от других ключевых функций, таких как mint, функция donateToReserves не выполняет операцию checkLiquidity. Это позволяет злоумышленникам обходить обычные проверки ликвидности, искусственно создавая состояние, которое можно ликвидировать, а затем завершать ликвидацию с прибылью.
В нормальных условиях функция checkLiquidity вызывает модуль RiskManager, чтобы обеспечить, что количество Etoken у пользователя больше, чем количество Dtoken, для поддержания безопасности контракта. Однако из-за отсутствия этого ключевого шага в функции donateToReserves злоумышленник смог воспользоваться этой уязвимостью для атаки.
Рекомендации по безопасности
В связи с такими атаками мы рекомендуем проектам на блокчейне:
Провести полную безопасность аудит перед запуском контракта, чтобы гарантировать его безопасность.
Для кредитных проектов необходимо особое внимание уделять таким ключевым аспектам, как погашение средств, ликвидность и ликвидация долгов.
Убедитесь, что все функции, которые могут повлиять на состояние активов пользователей, содержат необходимые проверки безопасности, такие как проверка ликвидности.
Регулярно проводить проверку и обновление кода, своевременно устранять обнаруженные уязвимости.
Создание механизма экстренного реагирования, чтобы быстро реагировать и справляться с безопасностными инцидентами.
Приняв эти меры, проектная команда может значительно снизить риск遭受类似攻击 и повысить общую безопасность контракта.
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
9 Лайков
Награда
9
5
Репост
Поделиться
комментарий
0/400
WhaleWatcher
· 08-11 16:40
Снова пришли неудачники.
Посмотреть ОригиналОтветить0
Lonely_Validator
· 08-10 08:22
Блокчейн безопасность сейчас такая плохая? Без слов.
Посмотреть ОригиналОтветить0
StakeWhisperer
· 08-10 08:10
Еще одна ловушка для токенов
Посмотреть ОригиналОтветить0
GweiWatcher
· 08-10 07:58
Снова запускают без проверки контракта?
Посмотреть ОригиналОтветить0
HalfBuddhaMoney
· 08-10 07:54
Еще один проект с падением до нуля… собака в поводке
Euler Finance подвергся флеш-атаке займа, потеряв почти 200 миллионов долларов.
Проект Euler Finance стал жертвой флеш-атаки займа, убытки составили почти 200 миллионов долларов
13 марта 2023 года проект Euler Finance подвергся флеш-атака займа из-за уязвимости в контракте, что привело к убыткам в размере до 197 миллионов долларов. Атакующий воспользовался уязвимостью в функции donateToReserves контракта проекта, в которой отсутствовала проверка ликвидности, и получил огромную прибыль за счет многократных операций.
Анализ процесса атаки
Нападающий сначала взял в долг 30 миллионов DAI через Срочные займы на одной из платформ, а затем развернул два контракта: контракт займа и контракт ликвидации.
Атакующий заложил заимствованные 20 миллионов DAI в контракт Euler Protocol и получил 195000 eDAI.
Используя функцию 10-кратного кредитного плеча протокола Euler, злоумышленник занял 1,956,000 eDAI и 2,000,000 dDAI.
Нападающий использует оставшиеся 10 миллионов DAI для частичного погашения долга, уничтожает соответствующее количество dDAI, а затем снова занимает эквивалентное количество eDAI и dDAI.
Ключевые шаги: злоумышленник вызывает функцию donateToReserves, жертвует 1 миллион eDAI, а затем через функцию liquidate ликвидирует, получая 3,1 миллиона dDAI и 2,5 миллиона eDAI.
В конце концов, злоумышленник извлек 389000 DAI, вернул 300000 DAI по Срочным займам и в конечном итоге получил прибыль в 88700 DAI.
Причины уязвимости
Основной уязвимостью данной атаки является отсутствие необходимых проверок ликвидности в функции donateToReserves контракта Euler Finance. В отличие от других ключевых функций, таких как mint, функция donateToReserves не выполняет операцию checkLiquidity. Это позволяет злоумышленникам обходить обычные проверки ликвидности, искусственно создавая состояние, которое можно ликвидировать, а затем завершать ликвидацию с прибылью.
В нормальных условиях функция checkLiquidity вызывает модуль RiskManager, чтобы обеспечить, что количество Etoken у пользователя больше, чем количество Dtoken, для поддержания безопасности контракта. Однако из-за отсутствия этого ключевого шага в функции donateToReserves злоумышленник смог воспользоваться этой уязвимостью для атаки.
Рекомендации по безопасности
В связи с такими атаками мы рекомендуем проектам на блокчейне:
Провести полную безопасность аудит перед запуском контракта, чтобы гарантировать его безопасность.
Для кредитных проектов необходимо особое внимание уделять таким ключевым аспектам, как погашение средств, ликвидность и ликвидация долгов.
Убедитесь, что все функции, которые могут повлиять на состояние активов пользователей, содержат необходимые проверки безопасности, такие как проверка ликвидности.
Регулярно проводить проверку и обновление кода, своевременно устранять обнаруженные уязвимости.
Создание механизма экстренного реагирования, чтобы быстро реагировать и справляться с безопасностными инцидентами.
Приняв эти меры, проектная команда может значительно снизить риск遭受类似攻击 и повысить общую безопасность контракта.