Проект Euler Finance зазнав флеш-атаки, втрати склали майже 200 мільйонів доларів
13 березня 2023 року проект Euler Finance зазнав флеш-атаки через уразливість у контракті, внаслідок чого було втрачено до 197 мільйонів доларів. Зловмисник скористався уразливістю відсутності перевірки ліквідності у функції donateToReserves проекту, здійснивши кілька операцій, щоб отримати величезний прибуток.
Аналіз процесу атаки
Зловмисник спочатку позичає 30 мільйонів DAI з певної платформи Термінові позики та розгортає два контракти: контракт позики та контракт ліквідації.
Зловмисник заставляє запозичені 20 мільйонів DAI в контракті Euler Protocol, отримуючи 195 тисяч eDAI.
Використовуючи функцію 10-кратного кредитного плеча протоколу Euler, зловмисник позичив 195,6 тисяч eDAI та 200 тисяч dDAI.
Атакуючий використовує залишок 10000000 DAI для часткового погашення боргу, знищує відповідну кількість dDAI, а потім знову позичає таку ж кількість eDAI та dDAI.
Ключовий крок: зловмисник викликає функцію donateToReserves, жертвує 1 мільйон eDAI, а потім через функцію liquidate ліквідує, отримуючи 3,1 мільйона dDAI та 2,5 мільйона eDAI.
Нарешті, атакуючий вилучив 389000 DAI, повернув 300000 DAI Термінові позики, в результаті чого отримав прибуток у 88800 DAI.
Причини уразливості
Основна вразливість цієї атаки полягає в тому, що у контракті Euler Finance функція donateToReserves не має необхідної перевірки ліквідності. На відміну від інших ключових функцій, таких як mint, функція donateToReserves не виконує операцію checkLiquidity. Це дозволяє зловмисникам обійти нормальну перевірку ліквідності, штучно створити стан, який може бути ліквідований, а потім завершити ліквідацію з прибутком.
У нормальних умовах функція checkLiquidity викликає модуль RiskManager, щоб забезпечити, що кількість Etoken у користувача більша за кількість Dtoken, щоб підтримувати безпеку контракту. Однак через відсутність цього ключового кроку у функції donateToReserves зловмисник зміг скористатися цією уразливістю для атаки.
Рекомендації з безпеки
У зв'язку з такими атаками, ми рекомендуємо командам блокчейн-проектів:
Проведення всебічного аудиту безпеки перед запуском контракту, щоб забезпечити його безпеку.
Для кредитних проектів необхідно особливо звернути увагу на ключові етапи, такі як погашення коштів, перевірка ліквідності та ліквідація боргів.
Забезпечте, щоб усі функції, які можуть вплинути на стан активів користувача, містили необхідні перевірки безпеки, такі як перевірка ліквідності.
Регулярно проводити перевірку коду та оновлення, своєчасно виправляти виявлені вразливості.
Встановити механізм реагування на надзвичайні ситуації, щоб мати можливість швидко реагувати та вирішувати проблеми у разі виникнення безпекових інцидентів.
Вживаючи ці заходи, команда проекту може значно знизити ризик зазнати подібних атак і підвищити загальну безпеку контракту.
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
Euler Finance зазнав флеш-атаки, втратили майже 200 мільйонів доларів
Проект Euler Finance зазнав флеш-атаки, втрати склали майже 200 мільйонів доларів
13 березня 2023 року проект Euler Finance зазнав флеш-атаки через уразливість у контракті, внаслідок чого було втрачено до 197 мільйонів доларів. Зловмисник скористався уразливістю відсутності перевірки ліквідності у функції donateToReserves проекту, здійснивши кілька операцій, щоб отримати величезний прибуток.
Аналіз процесу атаки
Зловмисник спочатку позичає 30 мільйонів DAI з певної платформи Термінові позики та розгортає два контракти: контракт позики та контракт ліквідації.
Зловмисник заставляє запозичені 20 мільйонів DAI в контракті Euler Protocol, отримуючи 195 тисяч eDAI.
Використовуючи функцію 10-кратного кредитного плеча протоколу Euler, зловмисник позичив 195,6 тисяч eDAI та 200 тисяч dDAI.
Атакуючий використовує залишок 10000000 DAI для часткового погашення боргу, знищує відповідну кількість dDAI, а потім знову позичає таку ж кількість eDAI та dDAI.
Ключовий крок: зловмисник викликає функцію donateToReserves, жертвує 1 мільйон eDAI, а потім через функцію liquidate ліквідує, отримуючи 3,1 мільйона dDAI та 2,5 мільйона eDAI.
Нарешті, атакуючий вилучив 389000 DAI, повернув 300000 DAI Термінові позики, в результаті чого отримав прибуток у 88800 DAI.
Причини уразливості
Основна вразливість цієї атаки полягає в тому, що у контракті Euler Finance функція donateToReserves не має необхідної перевірки ліквідності. На відміну від інших ключових функцій, таких як mint, функція donateToReserves не виконує операцію checkLiquidity. Це дозволяє зловмисникам обійти нормальну перевірку ліквідності, штучно створити стан, який може бути ліквідований, а потім завершити ліквідацію з прибутком.
У нормальних умовах функція checkLiquidity викликає модуль RiskManager, щоб забезпечити, що кількість Etoken у користувача більша за кількість Dtoken, щоб підтримувати безпеку контракту. Однак через відсутність цього ключового кроку у функції donateToReserves зловмисник зміг скористатися цією уразливістю для атаки.
Рекомендації з безпеки
У зв'язку з такими атаками, ми рекомендуємо командам блокчейн-проектів:
Проведення всебічного аудиту безпеки перед запуском контракту, щоб забезпечити його безпеку.
Для кредитних проектів необхідно особливо звернути увагу на ключові етапи, такі як погашення коштів, перевірка ліквідності та ліквідація боргів.
Забезпечте, щоб усі функції, які можуть вплинути на стан активів користувача, містили необхідні перевірки безпеки, такі як перевірка ліквідності.
Регулярно проводити перевірку коду та оновлення, своєчасно виправляти виявлені вразливості.
Встановити механізм реагування на надзвичайні ситуації, щоб мати можливість швидко реагувати та вирішувати проблеми у разі виникнення безпекових інцидентів.
Вживаючи ці заходи, команда проекту може значно знизити ризик зазнати подібних атак і підвищити загальну безпеку контракту.