Согласно предупреждению системы безопасности Slow MistEye, 7 октября 2023 года Stars Arena, социальный протокол Avalanche в сети, подвергся атаке, в результате чего был нанесен ущерб в размере около 2,9 миллиона долларов. Команда безопасности Slow Mist кратко проанализировала атаку и поделилась результатами ниже.
Информация, связанная с данной
Адрес злоумышленника:
Контракт на атаку:
Атака Трейд:
Ядро атаки
Злоумышленник использует уязвимость повторного входа, чтобы подделать цену, соответствующую его доле депозита. Впоследствии, при продаже, подобное манипулирование ценами вызвано опорой на злонамеренное манипулирование расчетами цен. Точно рассчитав цену акции, обновленную на реентера, злоумышленник похищает средства в контракте.
Анализ транзакций
Мы можем обнаружить, что в транзакции атаки есть вызов повторного входа, и анализируем метод вызова шаг за шагом, декомпилируя код.
! [Снова вход?] Анализ нападения на «Старз Арену» (https://img-cdn.gateio.im/webp-social/moments-69a80767fe-98a298d9bb-dd1a6f-69ad2a.webp)
Злоумышленник сначала создает контракт атаки (0x7f283 и 0xdd9af), вызывает метод 0xe9ccf3a3 Stars Arena: делится контрактом через контракт атаки, а затем вносит 1 токен AVAX.
! [Снова вход?] Анализ атаки на «Старз Арену» (https://img-cdn.gateio.im/webp-social/moments-69a80767fe-fccaa140dd-dd1a6f-69ad2a.webp)
Согласно пошаговой трассировке декомпилированного кода, метод 0xe9ccf3a3, используемый злоумышленником первым, представляет собой функцию, подобную депозиту, которая вызывает методы 0x326c и 0x2058. Метод 0x326c представляет собой вызов, который возвращается только в качестве параметра, в то время как метод 0x2058 похож на функцию, которая обрабатывает покупку или обмен какого-либо токена, и метод использует количество и адрес токенов AVAX, переданных 0xe9ccf3a3, для вычисления следующей операции и расчета долей и комиссий.
! [Снова вход?] Анализ атаки на «Старз Арену» (https://img-cdn.gateio.im/webp-social/moments-69a80767fe-9279aef172-dd1a6f-69ad2a.webp)
Следуя логике вызова строки 92 метода 0x2058, можно обнаружить, что метод 0x1a9b является вычислительной функцией, а вычисленный результат – значением, аналогичным цене, а возвращаемое им значение – вновь вычисленным v24/0xde0b6b3a7640000 или _initialPrice.
Следующие 109, 110 и 116 строк методов 0x307c и 0x30ef содержат вызов низкоуровневого вызова, а 0x30ef вызов по-прежнему является внешним вызовом g1, то есть входящим адресом контракта 0xdd9af атаки. Функция не имеет ограничения повторной блокировки, и после выполнения внешнего вызова этот метод выполнит только последующее решение if для обновления параметров field0.length и field0. Нет никаких сомнений в том, что здесь происходит повторный вход.
! [Снова вход?] Анализ атаки на «Старз Арену» (https://img-cdn.gateio.im/webp-social/moments-69a80767fe-3c9611d0bb-dd1a6f-69ad2a.webp)
Давайте посмотрим на данные, которые злоумышленник создает в вызове reentrance.
! [Снова вход?] Анализ нападения на «Старз Арену» (https://img-cdn.gateio.im/webp-social/moments-69a80767fe-ce911c42e9-dd1a6f-69ad2a.webp)
Внешний повторный вход вызывает метод 0x5632b2e4 и передает четыре параметра, созданные злоумышленником, которые преобразуют 153005ce00 в 9100000000000 в виде десятичной дроби.
Как было сказано выше, внешний вызов метода 0x5632b2e4 выполняется перед суждением if(g0 == _getMyShares[address(g1)][msg.sender]). В настоящее время значение field0.lengt равно 0 и не обновляется. Таким образом, злоумышленник обходит суждение в методе 0x5632b2e4 и изменяет состояние следующих четырех параметров msg.sender, то есть контракта атаки 0xdd9af, который должен быть построен при выполнении внешнего вызова.
! [Снова вход?] Анализ атаки на «Старз Арену» (https://img-cdn.gateio.im/webp-social/moments-69a80767fe-53695512db-dd1a6f-69ad2a.webp)
После этого злоумышленник позвонил sellShares, чтобы продать свою долю, получив 266 102,97278 AVAX.
! [Снова вход?] Анализ нападения на «Старз Арену» (https://img-cdn.gateio.im/webp-social/moments-69a80767fe-54e5a2f231-dd1a6f-69ad2a.webp)
Углубляясь в функцию sellShares, функция изначально вызывает метод 0x1a9b, который был вызван в предыдущем методе 0x2058, который представляет собой функцию, обрабатывающую покупку или обмен какого-либо токена. Мы видим, что метод 0x2329 в методе 0x1a9b обновляет owner_9f[g0] , и этот параметр был изменен на 91000000000000, созданный злоумышленником при повторном входе.
! [Снова вход?] Анализ атаки на «Старз Арену» (https://img-cdn.gateio.im/webp-social/moments-69a80767fe-60823d09ab-dd1a6f-69ad2a.webp)
Вернитесь к 0x1a9b методу, пересчитайте на основе ранее злонамеренно построенного значения (см. примечание о рассчитанной сумме).
! [Снова вход?] Анализ нападения на «Старз Арену» (https://img-cdn.gateio.im/webp-social/moments-69a80767fe-764b869b64-dd1a6f-69ad2a.webp)
После приведенного выше расчета цена, соответствующая вновь рассчитанной доле, изменилась, и результат составляет 274 333,061476814e18. После взимания ряда комиссий злоумышленник использует вредоносные конструкции для манипулирования ценой без изменения доли, продажи акции и успешного получения прибыли.
Резюме
В основе этой атаки лежит обновление зависимости расчета цены, вызванное атакой повторного входа, которая приводит к аналогичным вредоносным манипуляциям с ценами. Группа безопасности Slow Mist предлагает, чтобы проектная группа попыталась пройти аудит в нескольких компаниях, занимающихся безопасностью, прежде чем развертывать контракт. В то же время при кодировании он должен максимально соответствовать спецификации кодирования Checks-Effects-Interactions, а также добавлять блокировку против повторного входа.
Посмотреть Оригинал
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
Снова войти в уязвимость? Анализируем атаку на Stars Arena
предыстория
Согласно предупреждению системы безопасности Slow MistEye, 7 октября 2023 года Stars Arena, социальный протокол Avalanche в сети, подвергся атаке, в результате чего был нанесен ущерб в размере около 2,9 миллиона долларов. Команда безопасности Slow Mist кратко проанализировала атаку и поделилась результатами ниже.
Информация, связанная с данной
Адрес злоумышленника:
Контракт на атаку:
Атака Трейд:
Ядро атаки
Злоумышленник использует уязвимость повторного входа, чтобы подделать цену, соответствующую его доле депозита. Впоследствии, при продаже, подобное манипулирование ценами вызвано опорой на злонамеренное манипулирование расчетами цен. Точно рассчитав цену акции, обновленную на реентера, злоумышленник похищает средства в контракте.
Анализ транзакций
Мы можем обнаружить, что в транзакции атаки есть вызов повторного входа, и анализируем метод вызова шаг за шагом, декомпилируя код.
! [Снова вход?] Анализ нападения на «Старз Арену» (https://img-cdn.gateio.im/webp-social/moments-69a80767fe-98a298d9bb-dd1a6f-69ad2a.webp)
Злоумышленник сначала создает контракт атаки (0x7f283 и 0xdd9af), вызывает метод 0xe9ccf3a3 Stars Arena: делится контрактом через контракт атаки, а затем вносит 1 токен AVAX.
! [Снова вход?] Анализ атаки на «Старз Арену» (https://img-cdn.gateio.im/webp-social/moments-69a80767fe-fccaa140dd-dd1a6f-69ad2a.webp)
Согласно пошаговой трассировке декомпилированного кода, метод 0xe9ccf3a3, используемый злоумышленником первым, представляет собой функцию, подобную депозиту, которая вызывает методы 0x326c и 0x2058. Метод 0x326c представляет собой вызов, который возвращается только в качестве параметра, в то время как метод 0x2058 похож на функцию, которая обрабатывает покупку или обмен какого-либо токена, и метод использует количество и адрес токенов AVAX, переданных 0xe9ccf3a3, для вычисления следующей операции и расчета долей и комиссий.
! [Снова вход?] Анализ атаки на «Старз Арену» (https://img-cdn.gateio.im/webp-social/moments-69a80767fe-9279aef172-dd1a6f-69ad2a.webp)
Следуя логике вызова строки 92 метода 0x2058, можно обнаружить, что метод 0x1a9b является вычислительной функцией, а вычисленный результат – значением, аналогичным цене, а возвращаемое им значение – вновь вычисленным v24/0xde0b6b3a7640000 или _initialPrice.
Следующие 109, 110 и 116 строк методов 0x307c и 0x30ef содержат вызов низкоуровневого вызова, а 0x30ef вызов по-прежнему является внешним вызовом g1, то есть входящим адресом контракта 0xdd9af атаки. Функция не имеет ограничения повторной блокировки, и после выполнения внешнего вызова этот метод выполнит только последующее решение if для обновления параметров field0.length и field0. Нет никаких сомнений в том, что здесь происходит повторный вход.
! [Снова вход?] Анализ атаки на «Старз Арену» (https://img-cdn.gateio.im/webp-social/moments-69a80767fe-3c9611d0bb-dd1a6f-69ad2a.webp)
Давайте посмотрим на данные, которые злоумышленник создает в вызове reentrance.
! [Снова вход?] Анализ нападения на «Старз Арену» (https://img-cdn.gateio.im/webp-social/moments-69a80767fe-ce911c42e9-dd1a6f-69ad2a.webp)
Внешний повторный вход вызывает метод 0x5632b2e4 и передает четыре параметра, созданные злоумышленником, которые преобразуют 153005ce00 в 9100000000000 в виде десятичной дроби.
Как было сказано выше, внешний вызов метода 0x5632b2e4 выполняется перед суждением if(g0 == _getMyShares[address(g1)][msg.sender]). В настоящее время значение field0.lengt равно 0 и не обновляется. Таким образом, злоумышленник обходит суждение в методе 0x5632b2e4 и изменяет состояние следующих четырех параметров msg.sender, то есть контракта атаки 0xdd9af, который должен быть построен при выполнении внешнего вызова.
! [Снова вход?] Анализ атаки на «Старз Арену» (https://img-cdn.gateio.im/webp-social/moments-69a80767fe-53695512db-dd1a6f-69ad2a.webp)
После этого злоумышленник позвонил sellShares, чтобы продать свою долю, получив 266 102,97278 AVAX.
! [Снова вход?] Анализ нападения на «Старз Арену» (https://img-cdn.gateio.im/webp-social/moments-69a80767fe-54e5a2f231-dd1a6f-69ad2a.webp)
Углубляясь в функцию sellShares, функция изначально вызывает метод 0x1a9b, который был вызван в предыдущем методе 0x2058, который представляет собой функцию, обрабатывающую покупку или обмен какого-либо токена. Мы видим, что метод 0x2329 в методе 0x1a9b обновляет owner_9f[g0] , и этот параметр был изменен на 91000000000000, созданный злоумышленником при повторном входе.
! [Снова вход?] Анализ атаки на «Старз Арену» (https://img-cdn.gateio.im/webp-social/moments-69a80767fe-60823d09ab-dd1a6f-69ad2a.webp)
Вернитесь к 0x1a9b методу, пересчитайте на основе ранее злонамеренно построенного значения (см. примечание о рассчитанной сумме).
! [Снова вход?] Анализ нападения на «Старз Арену» (https://img-cdn.gateio.im/webp-social/moments-69a80767fe-764b869b64-dd1a6f-69ad2a.webp)
После приведенного выше расчета цена, соответствующая вновь рассчитанной доле, изменилась, и результат составляет 274 333,061476814e18. После взимания ряда комиссий злоумышленник использует вредоносные конструкции для манипулирования ценой без изменения доли, продажи акции и успешного получения прибыли.
Резюме
В основе этой атаки лежит обновление зависимости расчета цены, вызванное атакой повторного входа, которая приводит к аналогичным вредоносным манипуляциям с ценами. Группа безопасности Slow Mist предлагает, чтобы проектная группа попыталась пройти аудит в нескольких компаниях, занимающихся безопасностью, прежде чем развертывать контракт. В то же время при кодировании он должен максимально соответствовать спецификации кодирования Checks-Effects-Interactions, а также добавлять блокировку против повторного входа.