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