Jarvis Network подвергся атаке повторного входа через Срочные займы, убыток составил 663,101 MATIC

robot
Генерация тезисов в процессе

Анализ атаки повторного входа на проект Jarvis Network с использованием Срочных займов

Данные показывают, что 15 января 2023 года в 17:43:37 UTC проект Jarvis_Network был атакован, в результате чего было потеряно 663,101 MATIC.

Анализ стека вызовов транзакций показал, что в процессе удаления ликвидности присутствует логика повторного входа. Вызовы одной и той же функции одного и того же контракта до и после повторного входа имеют одинаковые передаваемые параметры, но возвращаемые значения значительно различаются:

  • Перед повторным входом: 1,002,157,321,772,769,944
  • После повторного входа: 10,091,002,696,492,234,934

Анализ события повторного использования Срочных займов в сети Jarvis

Реинъекция происходит в функции remove_liquidity. Эта функция возвращает токены, добавленные пользователем, при удалении ликвидности. Поскольку Polygon и EVM являются однородными цепями, передача MATIC на контракт вызывает реинъекцию контракта.

Глубокий анализ показал, что проблема заключается в реализации функции getUnderlyingPrice. Эта функция включает в себя ряд внутренних вычислений и внешних вызовов, ключевым из которых является возвращаемое значение функции get_virtual_price.

Анализ инцидента атаки повторного входа в Срочные займы Jarvis Network

Возвращаемое значение функции get_virtual_price зависит от переменной self.D. В функции remove_liquidity обновление self.D происходит после перевода токенов. Когда злоумышленник удаляет ликвидность, MATIC переводится на атакующий контракт, и при обратном вызове fallback сначала запрашивается цена токена. Поскольку self.D еще не обновлен, это приводит к ошибке получения цены.

Анализ инцидента повторного вывода средств Срочные займы Jarvis Network

процесс функции remove_liquidity:

  1. Уничтожение пользовательского LP
  2. Отправить средства пользователей на залог
  3. Обновить self.D

Атакующий на втором шаге выполняет повторный вход, используя не обновленное значение 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

Анализ инцидента с реинвестированием Срочных займов Jarvis Network

Посмотреть Оригинал
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
  • Награда
  • 5
  • Поделиться
комментарий
0/400
DisillusiionOraclevip
· 07-25 05:19
Снова рыба была убита взрывом.
Посмотреть ОригиналОтветить0
FlatlineTradervip
· 07-23 14:13
Еще одни неудачники получили коробку с обедом.
Посмотреть ОригиналОтветить0
MidnightGenesisvip
· 07-23 14:09
Степень обфускации кода недостаточна, это должно было произойти раньше.
Посмотреть ОригиналОтветить0
CryptoGoldminevip
· 07-23 13:59
Еще одно подтверждение данных: смарт-контракты восстановили убытки в 65w
Посмотреть ОригиналОтветить0
TooScaredToSellvip
· 07-23 13:50
Еще один пол упал до нуля
Посмотреть ОригиналОтветить0
  • Закрепить