Согласно предупреждению безопасности системы SlowMist MistEye, 7 октября 2023 года был атакован Stars Arena, социальный протокол сети Avalanche, в результате чего был нанесен ущерб примерно на 2,9 миллиона долларов США. Команда безопасности SlowMist кратко проанализировала инцидент с атакой и поделилась следующими результатами.
Связанная информация
Адрес злоумышленника:
Контракт на атаку:
Атакующая транзакция:
Ядро атаки
Злоумышленник использует уязвимость повторного входа, чтобы изменить цену, соответствующую его доле депозита. Позже, при продаже, аналогичные манипуляции с ценами происходили из-за зависимости расчета цены от злонамеренной манипуляции. Точно рассчитав обновленную цену акций при повторном входе, злоумышленник крадет средства из контракта.
Анализ транзакций
Мы можем обнаружить, что в транзакции атаки есть реентерабельный вызов, и постепенно анализируем вызывающий метод, декомпилируя код.
Злоумышленник сначала создал контракты атаки (0x7f283 и 0xdd9af), называемые методом 0xe9ccf3a3 контракта Stars Arena: Shares, через контракт атаки, а затем внес 1 токен AVAX.
По данным пошагового отслеживания декомпилированного кода, метод 0xe9ccf3a3, впервые использованный злоумышленником, представляет собой функцию, аналогичную депозиту, которая вызывает методы 0x326c и 0x2058. Метод 0x326c — это всего лишь вызов, возвращаемый в качестве параметра, а метод 0x2058 аналогичен функции, которая обрабатывает покупку или обмен определенного токена. Этот метод использует количество и адрес токена AVAX, переданные в 0xe9ccf3a3, для выполнения следующей операции. , доля и комиссия.рассчитать.
Следуя логике вызова строки 92 метода 0x2058, мы можем обнаружить, что метод 0x1a9b является функцией расчета.Вычисленный результат представляет собой значение, аналогичное цене, а его возвращаемое значение — это вновь вычисленное значение v24/0xde0b6b3a7640000 или _initialPrice.
В методах 0x307c и 0x30ef есть низкоуровневые вызовы в строках 109, 110 и 116, а вызов 0x30ef по-прежнему является внешним вызовом g1, который является адресом входящего контракта атаки 0xdd9af. Функция не имеет ограничений блокировки повторного входа, и после выполнения внешнего вызова этот метод выполнит последующее решение if для обновления параметров field0.length и field0. Нет сомнения, что здесь имеет место реентерабельность.
Давайте посмотрим на данные, созданные злоумышленником при реентерабельном вызове.
Повторный внешний вызов представляет собой метод 0x5632b2e4, в который передаются 4 параметра, созданных злоумышленником. Эти параметры преобразуются в 91000000000 посредством шестнадцатеричного преобразования.
Как упоминалось выше, внешний вызов метода 0x5632b2e4 выполняется до принятия решения if (g0 == _getMyShares[address(g1)][msg.sender]). В настоящее время значение field0.lengt равно 0 и не обновлялось. Злоумышленник просто использовал этот метод, чтобы обойти решение в методе 0x5632b2e4, и изменил следующие четыре состояния параметра msg.sender, который является контрактом атаки 0xdd9af, на данные, созданные при выполнении внешнего вызова.
После вышеописанных операций злоумышленник позвонил в SellShares, чтобы продать свою долю, и получил 266 102,97278 AVAX.
Углубляясь в функцию SellShares, функция сначала вызывает метод 0x1a9b, а в предыдущем методе 0x2058 был вызов, который представляет собой функцию, которая обрабатывает покупку или обмен определенных токенов. Мы можем обнаружить, что метод 0x2329 в методе 0x1a9b обновит владельца_9f. [g0] , и этот параметр был изменен на 91000000000, созданный злоумышленником во время повторного входа.
Вернитесь к методу 0x1a9b и произведите перерасчет на основе заранее созданного злонамеренного значения (сумму расчета см. в комментариях).
После приведенного выше расчета цена, соответствующая вновь рассчитанной доле, изменилась, и рассчитанный результат равен 274 333,061476814e18. После серии сборов комиссий злоумышленник использовал вредоносную конструкцию, чтобы манипулировать ценой без изменения акций, продал акции и успешно получил прибыль.
Подведем итог
Суть этой атаки заключается в обновлении зависимостей расчета цен, вызванном повторной атакой, что, в свою очередь, приводит к аналогичному злонамеренному манипулированию ценами. Команда безопасности SlowMist рекомендует, чтобы участник проекта сделал все возможное, чтобы пройти аудит со стороны нескольких охранных компаний перед развертыванием и выпуском контракта; в то же время при кодировании должна быть максимально соблюдена спецификация кодирования «Проверки-Эффекты-Взаимодействия», и следует добавить замки, препятствующие повторному входу.
Посмотреть Оригинал
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
Slow Mist: краткий анализ взлома Stars Arena
фон
Согласно предупреждению безопасности системы SlowMist MistEye, 7 октября 2023 года был атакован Stars Arena, социальный протокол сети Avalanche, в результате чего был нанесен ущерб примерно на 2,9 миллиона долларов США. Команда безопасности SlowMist кратко проанализировала инцидент с атакой и поделилась следующими результатами.
Связанная информация
Адрес злоумышленника:
Контракт на атаку:
Атакующая транзакция:
Ядро атаки
Злоумышленник использует уязвимость повторного входа, чтобы изменить цену, соответствующую его доле депозита. Позже, при продаже, аналогичные манипуляции с ценами происходили из-за зависимости расчета цены от злонамеренной манипуляции. Точно рассчитав обновленную цену акций при повторном входе, злоумышленник крадет средства из контракта.
Анализ транзакций
Мы можем обнаружить, что в транзакции атаки есть реентерабельный вызов, и постепенно анализируем вызывающий метод, декомпилируя код.
Злоумышленник сначала создал контракты атаки (0x7f283 и 0xdd9af), называемые методом 0xe9ccf3a3 контракта Stars Arena: Shares, через контракт атаки, а затем внес 1 токен AVAX.
По данным пошагового отслеживания декомпилированного кода, метод 0xe9ccf3a3, впервые использованный злоумышленником, представляет собой функцию, аналогичную депозиту, которая вызывает методы 0x326c и 0x2058. Метод 0x326c — это всего лишь вызов, возвращаемый в качестве параметра, а метод 0x2058 аналогичен функции, которая обрабатывает покупку или обмен определенного токена. Этот метод использует количество и адрес токена AVAX, переданные в 0xe9ccf3a3, для выполнения следующей операции. , доля и комиссия.рассчитать.
Следуя логике вызова строки 92 метода 0x2058, мы можем обнаружить, что метод 0x1a9b является функцией расчета.Вычисленный результат представляет собой значение, аналогичное цене, а его возвращаемое значение — это вновь вычисленное значение v24/0xde0b6b3a7640000 или _initialPrice.
В методах 0x307c и 0x30ef есть низкоуровневые вызовы в строках 109, 110 и 116, а вызов 0x30ef по-прежнему является внешним вызовом g1, который является адресом входящего контракта атаки 0xdd9af. Функция не имеет ограничений блокировки повторного входа, и после выполнения внешнего вызова этот метод выполнит последующее решение if для обновления параметров field0.length и field0. Нет сомнения, что здесь имеет место реентерабельность.
Давайте посмотрим на данные, созданные злоумышленником при реентерабельном вызове.
Повторный внешний вызов представляет собой метод 0x5632b2e4, в который передаются 4 параметра, созданных злоумышленником. Эти параметры преобразуются в 91000000000 посредством шестнадцатеричного преобразования.
Как упоминалось выше, внешний вызов метода 0x5632b2e4 выполняется до принятия решения if (g0 == _getMyShares[address(g1)][msg.sender]). В настоящее время значение field0.lengt равно 0 и не обновлялось. Злоумышленник просто использовал этот метод, чтобы обойти решение в методе 0x5632b2e4, и изменил следующие четыре состояния параметра msg.sender, который является контрактом атаки 0xdd9af, на данные, созданные при выполнении внешнего вызова.
После вышеописанных операций злоумышленник позвонил в SellShares, чтобы продать свою долю, и получил 266 102,97278 AVAX.
Углубляясь в функцию SellShares, функция сначала вызывает метод 0x1a9b, а в предыдущем методе 0x2058 был вызов, который представляет собой функцию, которая обрабатывает покупку или обмен определенных токенов. Мы можем обнаружить, что метод 0x2329 в методе 0x1a9b обновит владельца_9f. [g0] , и этот параметр был изменен на 91000000000, созданный злоумышленником во время повторного входа.
Вернитесь к методу 0x1a9b и произведите перерасчет на основе заранее созданного злонамеренного значения (сумму расчета см. в комментариях).
После приведенного выше расчета цена, соответствующая вновь рассчитанной доле, изменилась, и рассчитанный результат равен 274 333,061476814e18. После серии сборов комиссий злоумышленник использовал вредоносную конструкцию, чтобы манипулировать ценой без изменения акций, продал акции и успешно получил прибыль.
Подведем итог
Суть этой атаки заключается в обновлении зависимостей расчета цен, вызванном повторной атакой, что, в свою очередь, приводит к аналогичному злонамеренному манипулированию ценами. Команда безопасности SlowMist рекомендует, чтобы участник проекта сделал все возможное, чтобы пройти аудит со стороны нескольких охранных компаний перед развертыванием и выпуском контракта; в то же время при кодировании должна быть максимально соблюдена спецификация кодирования «Проверки-Эффекты-Взаимодействия», и следует добавить замки, препятствующие повторному входу.