13 марта проект Euler Finance пострадал от флеш-атаки займа из-за уязвимости в контракте, что привело к потере средств в размере около 197 миллионов долларов. Злоумышленники воспользовались уязвимостью в функции donateToReserves, которая не имела проверки ликвидности, и осуществили прибыльные операции с различными криптовалютами. В настоящее время украденные средства по-прежнему находятся на счету злоумышленника.
Анализ процесса атаки
Злоумышленник сначала взял в долг 30 миллионов DAI с помощью Срочных займов на одной из платформ кредитования и развернул два контракта: займ и ликвидацию.
Заложите 20 миллионов DAI в контракт Euler Protocol и получите 19.5 миллиона eDAI.
Используя функцию 10-кратного плеча Euler Protocol, одолжите 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. В отличие от других ключевых функций, таких как mint, функция donateToReserves не вызывает checkLiquidity для проверки ликвидности пользователя. Это позволило злоумышленникам выполнить определенные действия, чтобы привести свои счета в состояние, подлежащее ликвидации, а затем завершить ликвидацию с прибылью.
В нормальных условиях функция checkLiquidity вызывает модуль RiskManager, чтобы гарантировать, что количество Etoken у пользователя всегда больше количества Dtoken. Однако функция donateToReserves пропускает этот ключевой шаг, создавая возможность для атаки.
Рекомендации по безопасности
Данное событие вновь подчеркивает важность аудита безопасности смарт-контрактов. Проектам следует проводить всестороннюю и тщательную проверку безопасности перед запуском, особенно для кредитных проектов, необходимо уделить особое внимание следующим аспектам:
Целостность механизма погашения средств
Комплексность проверки ликвидности
Безопасность процесса ликвидации долгов
Только обеспечив безопасность этих ключевых этапов, можно эффективно предотвратить подобные атаки. С развитием экосистемы Web3 безопасность смарт-контрактов будет оставаться в центре внимания отрасли.
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
12 Лайков
Награда
12
6
Репост
Поделиться
комментарий
0/400
LongTermDreamer
· 22ч назад
Через три года снова увидим историю обратного возврата ценности. Понимающие поймут.
Посмотреть ОригиналОтветить0
GasBandit
· 22ч назад
Снова из-за смарт-контрактов? Как проводился аудит?
Посмотреть ОригиналОтветить0
RektCoaster
· 22ч назад
Еще одна бомба, еще одна куча перьев
Посмотреть ОригиналОтветить0
AirdropHarvester
· 23ч назад
Не ожидал, что Euler тоже потерпит неудачу... Тьфу-тьфу.
Euler Finance понесла убытки в 197 миллионов долларов из-за флеш-атаки займа, основной причиной стали уязвимости в контракте.
Euler Finance遭遇 флеш-атака займа,损失近2亿美元
13 марта проект Euler Finance пострадал от флеш-атаки займа из-за уязвимости в контракте, что привело к потере средств в размере около 197 миллионов долларов. Злоумышленники воспользовались уязвимостью в функции donateToReserves, которая не имела проверки ликвидности, и осуществили прибыльные операции с различными криптовалютами. В настоящее время украденные средства по-прежнему находятся на счету злоумышленника.
Анализ процесса атаки
Злоумышленник сначала взял в долг 30 миллионов DAI с помощью Срочных займов на одной из платформ кредитования и развернул два контракта: займ и ликвидацию.
Заложите 20 миллионов DAI в контракт Euler Protocol и получите 19.5 миллиона eDAI.
Используя функцию 10-кратного плеча Euler Protocol, одолжите 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. В отличие от других ключевых функций, таких как mint, функция donateToReserves не вызывает checkLiquidity для проверки ликвидности пользователя. Это позволило злоумышленникам выполнить определенные действия, чтобы привести свои счета в состояние, подлежащее ликвидации, а затем завершить ликвидацию с прибылью.
В нормальных условиях функция checkLiquidity вызывает модуль RiskManager, чтобы гарантировать, что количество Etoken у пользователя всегда больше количества Dtoken. Однако функция donateToReserves пропускает этот ключевой шаг, создавая возможность для атаки.
Рекомендации по безопасности
Данное событие вновь подчеркивает важность аудита безопасности смарт-контрактов. Проектам следует проводить всестороннюю и тщательную проверку безопасности перед запуском, особенно для кредитных проектов, необходимо уделить особое внимание следующим аспектам:
Только обеспечив безопасность этих ключевых этапов, можно эффективно предотвратить подобные атаки. С развитием экосистемы Web3 безопасность смарт-контрактов будет оставаться в центре внимания отрасли.