Згідно з попередженням про безпеку системи Slow MistEye, 7 жовтня 2023 року Stars Arena, ончейн-соціальний протокол Avalanche, зазнав атаки, що призвело до збитків у розмірі близько 2,9 мільйона доларів. Команда безпеки Slow Mist коротко проаналізувала атаку та поділилася результатами нижче.
Пов'язана інформація
Адреса зловмисника:
Контракт на атаку:
Атакуюча торгівля:
Ядро атаки
Зловмисник використовує вразливість повторного входу, щоб підробити ціну, що відповідає його частці депозиту. Згодом, при продажу, подібне маніпулювання цінами викликається опорою на зловмисне маніпулювання розрахунками цін. Точно розраховуючи ціну акцій, оновлену на повторному вході, зловмисник краде кошти в контракті.
Аналіз транзакцій
Ми можемо виявити, що в транзакції атаки є виклик повторного входу, і крок за кроком аналізуємо метод виклику, декомпілюючи код.
! [Знову вхід?] Аналіз атаки на Stars Arena] (https://img-cdn.gateio.im/webp-social/moments-69a80767fe-98a298d9bb-dd1a6f-69ad2a.webp)
Зловмисник спочатку створює контракт на атаку (0x7f283 і 0xdd9af), викликає метод 0xe9ccf3a3 Stars Arena: Shares контрактується через контракт атаки, а потім вносить 1 токен AVAX.
! [Знову вхід?] Аналіз атаки на Stars Arena] (https://img-cdn.gateio.im/webp-social/moments-69a80767fe-fccaa140dd-dd1a6f-69ad2a.webp)
Згідно з покроковим трасуванням декомпільованого коду, 0xe9ccf3a3 метод, який першим використовується зловмисником, є депозитоподібною функцією, яка викликає методи 0x326c і 0x2058. Метод 0x326c - це виклик, який повертається тільки як параметр, в той час як метод 0x2058 схожий на функцію, яка обробляє покупку або обмін якогось токена, і метод використовує кількість і адресу токенів AVAX, переданих 0xe9ccf3a3 для розрахунку наступної операції і розрахунку акцій і комісій.
! [Знову вхід?] Аналіз атаки на Stars Arena] (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 атаки. Функція не має обмеження reentrant-lock, і після виконання зовнішнього виклику цей метод виконає лише наступне рішення if для оновлення параметрів field0.length та field0. Немає сумнівів, що тут відбувається повторний вхід.
! [Знову вхід?] Аналіз атаки на Stars Arena] (https://img-cdn.gateio.im/webp-social/moments-69a80767fe-3c9611d0bb-dd1a6f-69ad2a.webp)
Давайте подивимося на дані, які зловмисник будує в виклику повторного входу.
! [Знову вхід?] Аналіз атаки на Stars Arena] (https://img-cdn.gateio.im/webp-social/moments-69a80767fe-ce911c42e9-dd1a6f-69ad2a.webp)
Повторне входження зовні викликає метод 0x5632b2e4 і передає чотири параметри, побудовані зловмисником, які перетворюють 153005ce00 в 91000000000000 десятковим дробом.
Як згадувалося вище, зовнішній виклик методу 0x5632b2e4 виконується перед судженням if(g0 == _getMyShares[address(g1)][msg.sender]). У цей час значення field0.lengt дорівнює 0 і не оновлюється. Таким чином, зловмисник обходить судження в методі 0x5632b2e4 і змінює стан наступних чотирьох параметрів msg.sender, тобто 0xdd9af контракту атаки, який буде побудований при здійсненні зовнішнього виклику.
! [Знову вхід?] Аналіз атаки на Stars Arena] (https://img-cdn.gateio.im/webp-social/moments-69a80767fe-53695512db-dd1a6f-69ad2a.webp)
Зробивши це, зловмисник зателефонував sellShares, щоб продати свою частку, отримавши 266 102,97278 AVAX.
! [Знову вхід?] Аналіз атаки на Stars Arena] (https://img-cdn.gateio.im/webp-social/moments-69a80767fe-54e5a2f231-dd1a6f-69ad2a.webp)
Заглиблюючись у функцію sellShares, функція спочатку викликає метод 0x1a9b, який був викликаний у попередньому методі 0x2058, який є функцією, яка обробляє покупку або обмін якогось токена. Ми бачимо, що метод 0x2329 в методі 0x1a9b оновлює власника_9f[g0] , і цей параметр було змінено до 9100000000000, створеного зловмисником при повторному входженні.
! [Знову вхід?] Аналіз атаки на Stars Arena] (https://img-cdn.gateio.im/webp-social/moments-69a80767fe-60823d09ab-dd1a6f-69ad2a.webp)
Повернувшись до методу 0x1a9b, перерахуйте на основі раніше збудованого значення (див. примітку щодо обчисленої суми).
! [Знову вхід?] Аналіз атаки на Stars Arena] (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 коротко проаналізувала атаку та поділилася результатами нижче.
Пов'язана інформація
Адреса зловмисника:
Контракт на атаку:
Атакуюча торгівля:
Ядро атаки
Зловмисник використовує вразливість повторного входу, щоб підробити ціну, що відповідає його частці депозиту. Згодом, при продажу, подібне маніпулювання цінами викликається опорою на зловмисне маніпулювання розрахунками цін. Точно розраховуючи ціну акцій, оновлену на повторному вході, зловмисник краде кошти в контракті.
Аналіз транзакцій
Ми можемо виявити, що в транзакції атаки є виклик повторного входу, і крок за кроком аналізуємо метод виклику, декомпілюючи код.
! [Знову вхід?] Аналіз атаки на Stars Arena] (https://img-cdn.gateio.im/webp-social/moments-69a80767fe-98a298d9bb-dd1a6f-69ad2a.webp)
Зловмисник спочатку створює контракт на атаку (0x7f283 і 0xdd9af), викликає метод 0xe9ccf3a3 Stars Arena: Shares контрактується через контракт атаки, а потім вносить 1 токен AVAX.
! [Знову вхід?] Аналіз атаки на Stars Arena] (https://img-cdn.gateio.im/webp-social/moments-69a80767fe-fccaa140dd-dd1a6f-69ad2a.webp)
Згідно з покроковим трасуванням декомпільованого коду, 0xe9ccf3a3 метод, який першим використовується зловмисником, є депозитоподібною функцією, яка викликає методи 0x326c і 0x2058. Метод 0x326c - це виклик, який повертається тільки як параметр, в той час як метод 0x2058 схожий на функцію, яка обробляє покупку або обмін якогось токена, і метод використовує кількість і адресу токенів AVAX, переданих 0xe9ccf3a3 для розрахунку наступної операції і розрахунку акцій і комісій.
! [Знову вхід?] Аналіз атаки на Stars Arena] (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 атаки. Функція не має обмеження reentrant-lock, і після виконання зовнішнього виклику цей метод виконає лише наступне рішення if для оновлення параметрів field0.length та field0. Немає сумнівів, що тут відбувається повторний вхід.
! [Знову вхід?] Аналіз атаки на Stars Arena] (https://img-cdn.gateio.im/webp-social/moments-69a80767fe-3c9611d0bb-dd1a6f-69ad2a.webp)
Давайте подивимося на дані, які зловмисник будує в виклику повторного входу.
! [Знову вхід?] Аналіз атаки на Stars Arena] (https://img-cdn.gateio.im/webp-social/moments-69a80767fe-ce911c42e9-dd1a6f-69ad2a.webp)
Повторне входження зовні викликає метод 0x5632b2e4 і передає чотири параметри, побудовані зловмисником, які перетворюють 153005ce00 в 91000000000000 десятковим дробом.
Як згадувалося вище, зовнішній виклик методу 0x5632b2e4 виконується перед судженням if(g0 == _getMyShares[address(g1)][msg.sender]). У цей час значення field0.lengt дорівнює 0 і не оновлюється. Таким чином, зловмисник обходить судження в методі 0x5632b2e4 і змінює стан наступних чотирьох параметрів msg.sender, тобто 0xdd9af контракту атаки, який буде побудований при здійсненні зовнішнього виклику.
! [Знову вхід?] Аналіз атаки на Stars Arena] (https://img-cdn.gateio.im/webp-social/moments-69a80767fe-53695512db-dd1a6f-69ad2a.webp)
Зробивши це, зловмисник зателефонував sellShares, щоб продати свою частку, отримавши 266 102,97278 AVAX.
! [Знову вхід?] Аналіз атаки на Stars Arena] (https://img-cdn.gateio.im/webp-social/moments-69a80767fe-54e5a2f231-dd1a6f-69ad2a.webp)
Заглиблюючись у функцію sellShares, функція спочатку викликає метод 0x1a9b, який був викликаний у попередньому методі 0x2058, який є функцією, яка обробляє покупку або обмін якогось токена. Ми бачимо, що метод 0x2329 в методі 0x1a9b оновлює власника_9f[g0] , і цей параметр було змінено до 9100000000000, створеного зловмисником при повторному входженні.
! [Знову вхід?] Аналіз атаки на Stars Arena] (https://img-cdn.gateio.im/webp-social/moments-69a80767fe-60823d09ab-dd1a6f-69ad2a.webp)
Повернувшись до методу 0x1a9b, перерахуйте на основі раніше збудованого значення (див. примітку щодо обчисленої суми).
! [Знову вхід?] Аналіз атаки на Stars Arena] (https://img-cdn.gateio.im/webp-social/moments-69a80767fe-764b869b64-dd1a6f-69ad2a.webp)
Після наведеного вище розрахунку змінилася ціна, що відповідає знову розрахованій частці, і результат становить 274 333,061476814e18. Після нарахування низки комісій зловмисник використовує шкідливі конструкції, щоб маніпулювати ціною без зміни акції, продавати акцію та успішно отримувати прибуток.
Підсумки
В основі цієї атаки лежить оновлення залежності від розрахунку ціни, викликане атакою повторного входу, що призводить до аналогічних зловмисних маніпуляцій з цінами. Команда безпеки Slow Mist пропонує команді проекту спробувати пройти аудит кількох охоронних компаній, перш ніж розгортати контракт. У той же час, при кодуванні він повинен максимально відповідати специфікації кодування Checks-Effects-Interactions, а також додавати блокування проти повторного входу.