Jarvis Network постраждала від атаки повторного входу в флеш-позики, втративши 660 000 токенів MATIC

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

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

Нещодавно випадок нападу на проект Jarvis Network привернув увагу галузі. Згідно з моніторингом даних у ланцюгу, напад відбувся 15 січня 2023 року, що призвело до втрати проектом 663,101 токенів MATIC.

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

Проаналізувавши стек викликів атакуючої транзакції, ми виявили, що зловмисник скористався комбінацією флеш-позик і вразливостей повторного входу. У процесі видалення ліквідності зловмисник успішно виконав атаку повторного входу, в результаті чого одна і та ж функція повертає дуже різні значення до і після повторного входу.

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

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

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

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

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

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

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

Атака підкреслює важливість кількох ключових принципів безпеки при розробці смарт-контрактів:

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

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

Ця подія ще раз нагадує нам, що у швидко розвиваючійся екосистемі блокчейну безпека завжди є першочерговим питанням. Команди розробників проекту повинні постійно стежити за останніми практиками безпеки та регулярно проводити перевірки коду і тестування на вразливості, щоб забезпечити безпеку активів користувачів.

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

Переглянути оригінал
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
  • Нагородити
  • 7
  • Поділіться
Прокоментувати
0/400
MidnightSnapHuntervip
· 07-18 10:01
Контракти-баги дійсно важко передбачити.
Переглянути оригіналвідповісти на0
StablecoinEnjoyervip
· 07-17 23:27
Ще один проект був зламаний!
Переглянути оригіналвідповісти на0
OnChainSleuthvip
· 07-17 00:48
Ще один проект був висмоктан до кінця.
Переглянути оригіналвідповісти на0
shadowy_supercodervip
· 07-17 00:40
Цц, знову атака повторного входу, не пам'ятаєш?
Переглянути оригіналвідповісти на0
DeFi_Dad_Jokesvip
· 07-17 00:37
Знову з'явився проект~
Переглянути оригіналвідповісти на0
DecentralizeMevip
· 07-17 00:30
Знову-но-но вторгнення!
Переглянути оригіналвідповісти на0
0xSherlockvip
· 07-17 00:24
Гей, знову обман для дурнів!
Переглянути оригіналвідповісти на0
  • Закріпити