BlockSec: Аналіз принципів атаки GMX

DeepFlowTech
GMX2,65%

Автор: BlockSec

GMX зазнав хакерської атаки, внаслідок якої було втрачено понад 40 мільйонів доларів. Зловмисники скористалися вразливістю повторного входу і здійснили атаку, відкривши короткі позиції за умов активізації функції кредитного плеча в контракті.

Корінь проблеми полягає в неправильному використанні функції executeDecreaseOrder. Першим параметром цієї функції повинен бути зовнішній обліковий запис (EOA), але зловмисник передав адресу смарт-контракту. Це дозволило зловмиснику повторно увійти в систему під час процесу викупу, маніпулюючи внутрішнім станом, в результаті чого викуплені активи значно перевищили фактичну вартість GLP, що ним володіє.

Нормальний механізм викупу GLP

У GMX GLP є токеном постачальника ліквідності, який представляє частку активів сховища (такі як USDC, ETH, WBTC). Коли користувач викликає unstakeAndRedeemGlp, система використовує наступну формулу для розрахунку кількості активів, які підлягають поверненню:

викупити_amount = (user_GLP / всього_GLP_supply) * АУМ

У рахунку AUM (загальний обсяг керованих активів) виконується наступним чином:

AUM = загальна вартість всіх токенів у пулі + глобальні невиконані збитки - глобальні невиконані прибутки - зарезервована сума - попередньо визначене зменшення (aumDeduction)

Цей механізм гарантує, що власники GLP отримують пропорційну частку реальних активів скарбниці.

Проблеми після відкриття важеля

Коли enableLeverage увімкнено, користувач може відкривати позиції з використанням важелів (довгі або короткі). Зловмисник відкрив велику коротку позицію WBTC перед викупом GLP.

Оскільки коротка позиція одразу збільшує загальний обсяг коротких позицій, а ціна ще не змінилася, система за замовчуванням вважає цю коротку позицію збитковою, і ця частина нереалізованого збитку буде зарахована як «актив» кошика, що призводить до штучного зростання AUM. Хоча кошик насправді не отримав додаткової вартості, розрахунок викупу базуватиметься на цьому завищеному AUM, що дозволяє зловмиснику отримати активів значно більше, ніж він заслуговує.

Процес атаки

атака на транзакцію

Написано в кінці

Ця атака виявила серйозні недоліки GMX в механізмі кредитного плеча та дизайні захисту від повторних викликів. Основною проблемою є надмірна довіра до логіки викупу активів щодо AUM, яка недостатньо ретельно перевіряє його складові частини (такі як нереалізовані збитки). Одночасно, ключові функції не мають обов’язкової перевірки припущень щодо особи виконавця (EOA проти контракту). Ця подія ще раз нагадує розробникам, що при здійсненні фінансово чутливих операцій необхідно забезпечити, щоб стан системи не міг бути маніпульованим, особливо при впровадженні складної фінансової логіки (такої як кредитне плече, деривативи), необхідно суворо запобігати системним ризикам, пов’язаним з повторними викликами та забрудненням стану.

Переглянути оригінал
Застереження: Інформація на цій сторінці може походити від третіх осіб і не відображає погляди або думки Gate. Вміст, що відображається на цій сторінці, є лише довідковим і не є фінансовою, інвестиційною або юридичною порадою. Gate не гарантує точність або повноту інформації і не несе відповідальності за будь-які збитки, що виникли в результаті використання цієї інформації. Інвестиції у віртуальні активи пов'язані з високим ризиком і піддаються значній ціновій волатильності. Ви можете втратити весь вкладений капітал. Будь ласка, повністю усвідомлюйте відповідні ризики та приймайте обережні рішення, виходячи з вашого фінансового становища та толерантності до ризику. Для отримання детальної інформації, будь ласка, зверніться до Застереження.
Прокоментувати
0/400
Немає коментарів