Euler Finance зазнав флеш-атаки, втратили майже 200 мільйонів доларів
13 березня проєкт Euler Finance зазнав флеш-атаки через вразливість у контракті, що призвело до втрати близько 197 мільйонів доларів США. Зловмисник скористався вразливістю у функції donateToReserves, в якій відсутня перевірка ліквідності, здійснивши кілька операцій з різними валютами для отримання прибутку. Наразі вкрадені кошти все ще залишаються на рахунку атакуючого.
Аналіз процесу атаки
Зловмисник спочатку взяв у борг 30 мільйонів DAI за допомогою Термінові позики з певної платформи, а потім розгорнув два контракти: один для позики, а інший для ліквідації.
Залишити 20 мільйонів DAI в контракті Euler Protocol, отримати 19 мільйонів eDAI.
Використовуючи функцію 10-кратного кредитного плеча Euler Protocol, позичте 1,956 мільйона eDAI та 200 мільйонів dDAI.
Використати залишок 10 мільйонів DAI для часткового погашення боргу та знищити відповідну кількість dDAI, після чого знову позичити таку ж кількість eDAI та dDAI.
Через функцію donateToReserves пожертвувати 100 мільйонів eDAI, після чого викликати функцію liquidate для ліквідації, отримавши 310 мільйонів dDAI та 250 мільйонів eDAI.
Нарешті, вилучено 3890 мільйонів DAI, повернуто 3000 мільйонів Термінові позики, чистий прибуток становить приблизно 887 мільйонів DAI.
Аналіз причин уразливості
Основною причиною успішної атаки є те, що функція donateToReserves не має необхідної перевірки ліквідності. На відміну від інших ключових функцій, таких як mint, функція donateToReserves не викликає checkLiquidity для перевірки ліквідності користувача. Це дозволяє зловмиснику за допомогою певних дій перевести свій рахунок у стан, що підлягає ліквідації, а потім завершити ліквідацію та отримати прибуток.
У нормальних умовах функція checkLiquidity викликає модуль RiskManager, щоб забезпечити, що кількість Etoken у користувача завжди перевищує кількість Dtoken. Однак функція donateToReserves пропускає цей критичний крок, створюючи можливість для атаки.
Рекомендації з безпеки
Ця подія ще раз підкреслила важливість безпеки аудиту смарт-контрактів. Команда проекту повинна провести всебічну та детальну перевірку безпеки перед запуском, особливо для проектів, пов'язаних з кредитуванням, необхідно зосередитися на наступних аспектах:
Цілісність механізму повернення коштів
Повнота перевірки ліквідності
Безпека процесу ліквідації боргів
Тільки забезпечивши безпеку цих ключових етапів, можна ефективно запобігти виникненню подібних атак. З розвитком екосистеми Web3 безпека смарт-контрактів продовжуватиме залишатися в центрі уваги галузі.
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
12 лайків
Нагородити
12
6
Репост
Поділіться
Прокоментувати
0/400
LongTermDreamer
· 21год тому
Через три роки знову буде історія про зворотнє повернення вартості. Ті, хто розуміє, зрозуміють.
Переглянути оригіналвідповісти на0
GasBandit
· 21год тому
Знову виною смартконтрактів? Як проводиться аудит?
Переглянути оригіналвідповісти на0
RektCoaster
· 21год тому
Ще одна бомба, ще одна купа пір'я.
Переглянути оригіналвідповісти на0
AirdropHarvester
· 21год тому
Не очікував, що Euler також зазнає провалу... Тс-тс.
Euler Finance зазнав флеш-атаки, втративши 1.97 мільярда доларів США, вразливість контракту стала основною причиною.
Euler Finance зазнав флеш-атаки, втратили майже 200 мільйонів доларів
13 березня проєкт Euler Finance зазнав флеш-атаки через вразливість у контракті, що призвело до втрати близько 197 мільйонів доларів США. Зловмисник скористався вразливістю у функції donateToReserves, в якій відсутня перевірка ліквідності, здійснивши кілька операцій з різними валютами для отримання прибутку. Наразі вкрадені кошти все ще залишаються на рахунку атакуючого.
Аналіз процесу атаки
Зловмисник спочатку взяв у борг 30 мільйонів DAI за допомогою Термінові позики з певної платформи, а потім розгорнув два контракти: один для позики, а інший для ліквідації.
Залишити 20 мільйонів DAI в контракті Euler Protocol, отримати 19 мільйонів eDAI.
Використовуючи функцію 10-кратного кредитного плеча Euler Protocol, позичте 1,956 мільйона eDAI та 200 мільйонів dDAI.
Використати залишок 10 мільйонів DAI для часткового погашення боргу та знищити відповідну кількість dDAI, після чого знову позичити таку ж кількість eDAI та dDAI.
Через функцію donateToReserves пожертвувати 100 мільйонів eDAI, після чого викликати функцію liquidate для ліквідації, отримавши 310 мільйонів dDAI та 250 мільйонів eDAI.
Нарешті, вилучено 3890 мільйонів DAI, повернуто 3000 мільйонів Термінові позики, чистий прибуток становить приблизно 887 мільйонів DAI.
Аналіз причин уразливості
Основною причиною успішної атаки є те, що функція donateToReserves не має необхідної перевірки ліквідності. На відміну від інших ключових функцій, таких як mint, функція donateToReserves не викликає checkLiquidity для перевірки ліквідності користувача. Це дозволяє зловмиснику за допомогою певних дій перевести свій рахунок у стан, що підлягає ліквідації, а потім завершити ліквідацію та отримати прибуток.
У нормальних умовах функція checkLiquidity викликає модуль RiskManager, щоб забезпечити, що кількість Etoken у користувача завжди перевищує кількість Dtoken. Однак функція donateToReserves пропускає цей критичний крок, створюючи можливість для атаки.
Рекомендації з безпеки
Ця подія ще раз підкреслила важливість безпеки аудиту смарт-контрактів. Команда проекту повинна провести всебічну та детальну перевірку безпеки перед запуском, особливо для проектів, пов'язаних з кредитуванням, необхідно зосередитися на наступних аспектах:
Тільки забезпечивши безпеку цих ключових етапів, можна ефективно запобігти виникненню подібних атак. З розвитком екосистеми Web3 безпека смарт-контрактів продовжуватиме залишатися в центрі уваги галузі.