Аналіз атаки повторного входу на проект Jarvis Network через Термінові позики
Нещодавно випадок нападу на проект Jarvis Network привернув увагу галузі. Згідно з моніторингом даних у ланцюгу, напад відбувся 15 січня 2023 року, що призвело до втрати проектом 663,101 токенів MATIC.
Проаналізувавши стек викликів атакуючої транзакції, ми виявили, що зловмисник скористався комбінацією флеш-позик і вразливостей повторного входу. У процесі видалення ліквідності зловмисник успішно виконав атаку повторного входу, в результаті чого одна і та ж функція повертає дуже різні значення до і після повторного входу.
Глибоке дослідження показало, що проблема полягає у функції remove_liquidity. Ця функція відповідає за видалення ліквідності та повернення токенів користувачу. Оскільки ланцюг Polygon сумісний з EVM, під час процесу переказу спрацювала логіка повторного входу контракту.
Ключова вразливість полягає в використанні змінної self.D у розрахунках ціни. У нормальних умовах self.D повинна оновлюватися вчасно під час видалення ліквідності. Однак через дефект логіки коду оновлення self.D було відкладено до зовнішнього виклику. Це дало можливість зловмисникам вставити операції в процес, використовуючи неоновлене значення self.D для арбітражу.
Хоча функція remove_liquidity використовує декоратор @nonreentrant('lock') для запобігання повторним входам, зловмисник хитро обійшов цей механізм захисту. Вони обійшли обмеження блокування повторних входів, повторно входячи в інші контракти, замість безпосереднього повторного входу у функцію remove_liquidity.
Атака підкреслює важливість кількох ключових принципів безпеки при розробці смарт-контрактів:
Суворо дотримуйтесь моделі "Перевірка-Ефекти-Взаємодії" (Checks-Effects-Interactions).
Переконайтеся, що оновлення ключових змінних завершено до будь-яких зовнішніх викликів.
Використання кількох джерел даних для отримання цін з метою підвищення надійності системи.
Комплексний аудит безпеки є надзвичайно важливим для виявлення та виправлення потенційних вразливостей.
Ця подія ще раз нагадує нам, що у швидко розвиваючійся екосистемі блокчейну безпека завжди є першочерговим питанням. Команди розробників проекту повинні постійно стежити за останніми практиками безпеки та регулярно проводити перевірки коду і тестування на вразливості, щоб забезпечити безпеку активів користувачів.
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
Jarvis Network постраждала від атаки повторного входу в флеш-позики, втративши 660 000 токенів MATIC
Аналіз атаки повторного входу на проект Jarvis Network через Термінові позики
Нещодавно випадок нападу на проект Jarvis Network привернув увагу галузі. Згідно з моніторингом даних у ланцюгу, напад відбувся 15 січня 2023 року, що призвело до втрати проектом 663,101 токенів MATIC.
! Аналіз інцидентів атаки повторного входу в флеш-позику Jarvis Network
Проаналізувавши стек викликів атакуючої транзакції, ми виявили, що зловмисник скористався комбінацією флеш-позик і вразливостей повторного входу. У процесі видалення ліквідності зловмисник успішно виконав атаку повторного входу, в результаті чого одна і та ж функція повертає дуже різні значення до і після повторного входу.
Глибоке дослідження показало, що проблема полягає у функції remove_liquidity. Ця функція відповідає за видалення ліквідності та повернення токенів користувачу. Оскільки ланцюг Polygon сумісний з EVM, під час процесу переказу спрацювала логіка повторного входу контракту.
! Аналіз інцидентів атаки повторного входу флеш-позики Jarvis Network
Ключова вразливість полягає в використанні змінної self.D у розрахунках ціни. У нормальних умовах self.D повинна оновлюватися вчасно під час видалення ліквідності. Однак через дефект логіки коду оновлення self.D було відкладено до зовнішнього виклику. Це дало можливість зловмисникам вставити операції в процес, використовуючи неоновлене значення self.D для арбітражу.
Хоча функція remove_liquidity використовує декоратор @nonreentrant('lock') для запобігання повторним входам, зловмисник хитро обійшов цей механізм захисту. Вони обійшли обмеження блокування повторних входів, повторно входячи в інші контракти, замість безпосереднього повторного входу у функцію remove_liquidity.
! Аналіз інциденту атаки повторного входу в флеш-позику Jarvis Network
Атака підкреслює важливість кількох ключових принципів безпеки при розробці смарт-контрактів:
Ця подія ще раз нагадує нам, що у швидко розвиваючійся екосистемі блокчейну безпека завжди є першочерговим питанням. Команди розробників проекту повинні постійно стежити за останніми практиками безпеки та регулярно проводити перевірки коду і тестування на вразливості, щоб забезпечити безпеку активів користувачів.
! Аналіз інцидентів атаки повторного входу в флеш-позику Jarvis Network