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

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

15 січня 2023 року проект Jarvis_Network зазнав хакерської атаки, внаслідок якої було втрачено 663101 MATIC. Через аналіз даних транзакцій було виявлено, що ця атака включала Термінові позики та вразливість повторного входу.

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

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

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

Зосередьтеся на процесі виклику функції getUnderlyingPrice. Ця функція пов'язана з взаємодією кількох контрактів, деякі з яких не є відкритими. В аналізі виявлено, що проблема полягає в значенні, яке повертає функція get_virtual_price. Це значення має значні відмінності до та після повторного входу.

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

Конкретно, оновлення змінної self.D відбувається після переказу токенів. Коли зловмисник видаляє ліквідність, MATIC передається на контракт зловмисника. Під час виклику функції fallback зловмисник спочатку запитує ціну певного токена. Оскільки оновлення self.D відстає від переказу, це призводить до помилки в отриманні попередньої ціни.

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

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

Процес видалення ліквідності включає: 1) знищення LP-токенів користувача; 2) надсилання користувачу заставних коштів; 3) оновлення self.D значення. self.D використовується для розрахунку цін і оновлюється під час додавання та видалення ліквідності. Зловмисник скористався вразливістю великої ліквідності та моментами оновлення self.D, здійснив повторний вхід на етапі 2 та взяв позику за ціною в 10 разів вищою за початкову.

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

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

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

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

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

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

Цей напад виявив недоліки проекту в логіці зміни змінних та безпеці міжконтрактних викликів. Для запобігання подібним атакам рекомендується команді проекту вжити такі заходи:

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

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

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

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

Переглянути оригінал
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
  • Нагородити
  • 6
  • Поділіться
Прокоментувати
0/400
NFTHoardervip
· 14год тому
Тестування цього проєкту занадто слабке, один крок і захист зламався.
Переглянути оригіналвідповісти на0
RektDetectivevip
· 07-19 06:12
Знову хтось зазнав невдачі, перевірки переказів matic навіть не проводять, новичок пише код?
Переглянути оригіналвідповісти на0
DuskSurfervip
· 07-18 23:29
Все ще лежу і копіюю контракт, навіть не зрозумів повторний вхід~
Переглянути оригіналвідповісти на0
StableGeniusvip
· 07-18 23:29
лмао, ще один день, ще одна хакерська атака... як і передбачалося, чесно кажучи
Переглянути оригіналвідповісти на0
HypotheticalLiquidatorvip
· 07-18 23:18
Старі проблеми знову виникли. Чому не поставити повторний замок?
Переглянути оригіналвідповісти на0
failed_dev_successful_apevip
· 07-18 23:11
вечірка проєкту спить, поки інші тут підбирають замок~
Переглянути оригіналвідповісти на0
  • Закріпити