Згідно з попередженням системи безпеки SlowMist MistEye, 7 жовтня 2023 року на Stars Arena, соціальний протокол у мережі Avalanche, було здійснено атаку, що призвело до збитків приблизно в 2,9 мільйона доларів США. Команда безпеки SlowMist коротко проаналізувала інцидент атаки та поділилася такими результатами.
Пов’язана інформація
Адреса зловмисника:
Контракт на атаку:
Атакова транзакція:
Ядро атаки
Зловмисник використовує вразливість повторного входу, щоб змінити ціну, що відповідає його частці депозиту. Пізніше, під час продажу, подібні маніпуляції з ціною мали місце через залежність розрахунку ціни від зловмисної маніпуляції. Точно розраховуючи оновлену ціну акцій після повторного входу, зловмисник викрадає кошти з контракту.
Аналіз транзакцій
Ми можемо виявити, що в транзакції атаки є повторний виклик, і ми поступово аналізуємо метод виклику, декомпілюючи код.
Зловмисник спочатку створив контракти на атаку (0x7f283 і 0xdd9af), названі методом 0xe9ccf3a3 Stars Arena: контракт на акції через контракт на атаку, а потім вніс 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: контракт на акції через контракт на атаку, а потім вніс 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 рекомендує, щоб сторона проекту намагалася зробити все можливе, щоб пройти аудити кількома охоронними компаніями перед розгортанням і випуском контракту; в той же час специфікація кодування перевірок-ефектів-взаємодій повинна бути максимально дотримана під час кодування, і замки проти повторного входу повинні бути додані.