Jarvis Network зазнав атаки повторного входу з терміновими позиками, втратив 66.3 тисячі MATIC

robot
Генерація анотацій у процесі

Аналіз атаки повторного входу на проект Jarvis Network за допомогою Термінові позики

15 січня 2023 року проект Jarvis_Network зазнав атаки в мережі Polygon, що призвело до втрат приблизно 663 000 MATIC. Аналіз показав, що зловмисник скористався Терміновими позиками та вразливістю повторного входу для здійснення атаки.

Jarvis NetworkТермінові позики повторного входу атака подія аналіз

Аналіз стека викликів атакуючої транзакції показує, що під час повторного виклику одного й того ж методу одного й того ж контракту параметри, що передаються, однакові, але значення, що повертаються, мають суттєві відмінності. Значення, що повертаються до і після повторного виклику, становлять:

  • Перед повторним входом: 1002157321772769944
  • Повторний вхід: 10091002696492234934

Аналіз події атаки повторного входу на Термінові позики Jarvis Network

Повторний вхід відбувається у функції remove_liquidity. Ця функція повертає токени, які користувач додав, під час видалення ліквідності. Оскільки Polygon сумісний з EVM, повторний вхід був спровокований під час переказу MATIC на контракт.

Аналіз події атаки повторного входу термінових позик Jarvis Network

Глибокий аналіз виявив, що проблема полягає в реалізації функції getUnderlyingPrice. Ця функція включає в себе ряд внутрішніх розрахунків і зовнішніх викликів, причому ключовим є значення, яке повертає функція get_virtual_price. Це значення залежить від змінної self.D, а оновлення self.D відбувається після переказу токенів.

Аналіз події атаки повторного входу в Термінові позики Jarvis Network

Атакуючи, під час видалення ліквідності, MATIC переноситься на контракт атаки, після чого через зворотний виклик спочатку запитується ціна токена. Оскільки self.D ще не оновлено, це призводить до помилки отримання ціни. Атакуючий використовує цю різницю в часі, під час повторного входу підвищуючи ціну позики приблизно в 10 разів.

Аналіз події атаки повторного входу на термінові позики Jarvis Network

Хоча функція remove_liquidity використовує декоратор @nonreentrant('lock') для запобігання повторним входам, зловмисник обійшов цей механізм захисту через повторний вхід між контрактами.

Аналіз події повторного атаки на термінові позики Jarvis Network

Ця атака виявила кілька ключових проблем:

  1. Логіка зміни змінних розташована після зовнішнього виклику, що призвело до аномалії отримання ціни.
  2. Крос-контрактний повторний вхід робить замок повторного входу неефективним.
  3. Не дотримано моделі "Перевірка-Ефекти-Взаємодії" (Checks-Effects-Interactions).

Аналіз події атаки повторного входу на термінові позики Jarvis Network

Щоб запобігти подібним атакам, рекомендується сторонам проекту:

  • Проведення суворого аудиту безпеки
  • Розмістіть зміни змінних перед зовнішнім викликом
  • Використання багатьох джерел даних для отримання ціни
  • Дотримуйтесь кодової специфікації "Перевірка - Дія - Взаємодія"

Завдяки цим заходам можна суттєво підвищити безпеку та стабільність проєкту.

Аналіз події атаки повторного входу на термінові позики Jarvis Network

Аналіз інциденту з повторним введенням термінової позики Jarvis Network

Аналіз інциденту повторної атаки за допомогою термінових позик Jarvis Network

Аналіз події атаки повторного входу на термінові позики Jarvis Network

! Аналіз інцидентів атаки повторного входу флеш-позики Jarvis Network

Переглянути оригінал
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
  • Нагородити
  • Прокоментувати
  • Репост
  • Поділіться
Прокоментувати
0/400
Немає коментарів
  • Закріпити