Проект Euler Finance став жертвою флеш-атаки, втратили майже 200 мільйонів доларів
13 березня проект Euler Finance зазнав флеш-атаки через вразливість у смарт-контракті, внаслідок чого було втрачено до 197 мільйонів доларів. Зловмисники використали уразливість функції donateToReserves контракту Etoken, у якій не було перевірки ліквідності, здійснивши багато атак за допомогою різних криптовалют.
Аналіз процесу атаки
Атакуючий спочатку отримав термінові позики на 30 мільйонів DAI з певної платформи кредитування, після чого розгорнув два контракти: один для позики, а інший для ліквідації. Процес атаки виглядає приблизно так:
Залишити 20 мільйонів DAI в заставі в контракті Euler Protocol, отримати 19,5 мільйонів eDAI.
Використовуючи функцію 10-кратного кредитного плеча Euler Protocol, позичити 1.956 мільярда eDAI та 2 мільярди dDAI.
Використати залишок 10 мільйонів DAI для часткового погашення боргу, знищити відповідну кількість dDAI.
Знову позичте таку ж кількість eDAI і dDAI.
Через функцію donateToReserves пожертвувати 100 мільйонів eDAI, після чого викликати функцію liquidate для ліквідації, отримати 310 мільйонів dDAI та 250 мільйонів eDAI.
Нарешті, витягнули 38900000 DAI, повернувши Термінові позики, отримали прибуток у 8870000 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
*sigh* аматорська година в дизайні смарт-контрактів... покажіть мені формальну верифікацію або йдіть геть
Euler Finance зазнала флеш-атаки, втратила майже 2 мільярди доларів
Проект Euler Finance став жертвою флеш-атаки, втратили майже 200 мільйонів доларів
13 березня проект Euler Finance зазнав флеш-атаки через вразливість у смарт-контракті, внаслідок чого було втрачено до 197 мільйонів доларів. Зловмисники використали уразливість функції donateToReserves контракту Etoken, у якій не було перевірки ліквідності, здійснивши багато атак за допомогою різних криптовалют.
Аналіз процесу атаки
Атакуючий спочатку отримав термінові позики на 30 мільйонів DAI з певної платформи кредитування, після чого розгорнув два контракти: один для позики, а інший для ліквідації. Процес атаки виглядає приблизно так:
Залишити 20 мільйонів DAI в заставі в контракті Euler Protocol, отримати 19,5 мільйонів eDAI.
Використовуючи функцію 10-кратного кредитного плеча Euler Protocol, позичити 1.956 мільярда eDAI та 2 мільярди dDAI.
Використати залишок 10 мільйонів DAI для часткового погашення боргу, знищити відповідну кількість dDAI.
Знову позичте таку ж кількість eDAI і dDAI.
Через функцію donateToReserves пожертвувати 100 мільйонів eDAI, після чого викликати функцію liquidate для ліквідації, отримати 310 мільйонів dDAI та 250 мільйонів eDAI.
Нарешті, витягнули 38900000 DAI, повернувши Термінові позики, отримали прибуток у 8870000 DAI.
Аналіз причин уразливостей
Ядро цієї атаки полягає в тому, що функція donateToReserves проекту Euler Finance не має необхідної перевірки ліквідності. На відміну від інших ключових функцій, таких як mint, функція donateToReserves не викликає checkLiquidity для перевірки ліквідності користувача. Це дозволяє зловмиснику маніпулювати станом свого рахунку, щоб він відповідав умовам ліквідації, що призводить до неправомірного отримання прибутку.
У нормальних умовах функція checkLiquidity викликає модуль RiskManager, щоб забезпечити, що кількість Etoken завжди перевищує кількість Dtoken. Однак через те, що функція donateToReserves пропускає цей крок, зловмисник зміг обійти механізм безпеки.
Рекомендації щодо безпеки
Ця подія ще раз підкреслила важливість аудиту безпеки смарт-контрактів. Для проектів, пов'язаних з кредитуванням, особливо слід звернути увагу на такі аспекти:
Команда проекту повинна провести всебічний і детальний аудит безпеки перед розгортанням контракту, щоб запобігти появі подібних вразливостей. Одночасно постійний моніторинг безпеки та своєчасне виправлення вразливостей є ключовими для забезпечення довгострокової безпечної роботи проекту.