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

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

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

15 января 2023 года проект Jarvis_Network подвергся атаке в сети Polygon, что привело к потерям в размере около 663 000 MATIC. Анализ показал, что злоумышленник использовал Срочные займы и уязвимость повторного входа для проведения атаки.

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

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

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

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

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

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

Глубокий анализ показал, что проблема заключается в реализации функции 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

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

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

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

Посмотреть Оригинал
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
  • Награда
  • комментарий
  • Репост
  • Поделиться
комментарий
0/400
Нет комментариев
  • Закрепить