Poolz зазнав атаки переповнення арифметики, збитки склали 665 тисяч доларів США
15 березня вночі Poolz зазнав атаки в мережах Ethereum, Binance Smart Chain та Polygon, внаслідок чого було вкрадено кілька токенів на загальну суму близько 665 тисяч доларів. Зловмисники використали уразливість арифметичного переповнення в смарт-контракті, що дозволило їм успішно отримати велику кількість токенів.
Зловмисники створюють масові пулі ліквідності, викликаючи функцію CreateMassPools. У цій функції є критична вразливість, яка дозволяє зловмисникам обійти звичайну перевірку ліквідності за допомогою ретельно сконструйованих параметрів. Зокрема, зловмисники використовують проблему переповнення цілих чисел у функції getArraySum.
Під час атаки хакери спочатку обміняли невелику кількість токенів MNZ на одному з децентралізованих бірж. Потім вони викликали функцію CreateMassPools, в якій існувала вразливість. Ця функція повинна була використовуватися для масового створення ліквідних пулів і надання початкової ліквідності, але через дефект функції getArraySum зловмисники змогли ввести фальшиву ліквідність, що значно перевищує реальний обсяг внесків.
Функція getArraySum під час накопичення переданого масиву _StartAmount через проблему переповнення в кінцевому підсумку повертає значення 1. Однак функція CreatePool все ще використовує початкове значення _StartAmount для запису. Це призводить до того, що зловмисник, перевівши лише 1 токен, може зафіксувати в системі велику кількість фальшивої ліквідності.
Після виконання цього етапу зловмисник просто викликає функцію withdraw для виведення токенів, завершуючи весь процес атаки.
Ця подія ще раз підкреслила важливість безпеки аритметичних операцій у смарт-контрактах. Щоб уникнути подібних проблем, розробникам слід розглянути можливість використання новіших версій компілятора Solidity, які можуть автоматично виконувати перевірку переповнення на етапі компіляції. Для проєктів, що використовують старі версії Solidity, рекомендується інтегрувати бібліотеку SafeMath від OpenZeppelin для обробки проблем переповнення цілих чисел.
Ця атака нагадує нам, що в екосистемі блокчейн навіть незначні вразливості в коді можуть призвести до серйозних економічних втрат. Тому повна перевірка коду та постійні оновлення безпеки є надзвичайно важливими для захисту активів користувачів.
Переглянути оригінал
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
Poolz зазнав атаки переповнення арифметики, втративши 66,5 тисяч доларів США
Poolz зазнав атаки переповнення арифметики, збитки склали 665 тисяч доларів США
15 березня вночі Poolz зазнав атаки в мережах Ethereum, Binance Smart Chain та Polygon, внаслідок чого було вкрадено кілька токенів на загальну суму близько 665 тисяч доларів. Зловмисники використали уразливість арифметичного переповнення в смарт-контракті, що дозволило їм успішно отримати велику кількість токенів.
Зловмисники створюють масові пулі ліквідності, викликаючи функцію CreateMassPools. У цій функції є критична вразливість, яка дозволяє зловмисникам обійти звичайну перевірку ліквідності за допомогою ретельно сконструйованих параметрів. Зокрема, зловмисники використовують проблему переповнення цілих чисел у функції getArraySum.
Під час атаки хакери спочатку обміняли невелику кількість токенів MNZ на одному з децентралізованих бірж. Потім вони викликали функцію CreateMassPools, в якій існувала вразливість. Ця функція повинна була використовуватися для масового створення ліквідних пулів і надання початкової ліквідності, але через дефект функції getArraySum зловмисники змогли ввести фальшиву ліквідність, що значно перевищує реальний обсяг внесків.
Функція getArraySum під час накопичення переданого масиву _StartAmount через проблему переповнення в кінцевому підсумку повертає значення 1. Однак функція CreatePool все ще використовує початкове значення _StartAmount для запису. Це призводить до того, що зловмисник, перевівши лише 1 токен, може зафіксувати в системі велику кількість фальшивої ліквідності.
Після виконання цього етапу зловмисник просто викликає функцію withdraw для виведення токенів, завершуючи весь процес атаки.
Ця подія ще раз підкреслила важливість безпеки аритметичних операцій у смарт-контрактах. Щоб уникнути подібних проблем, розробникам слід розглянути можливість використання новіших версій компілятора Solidity, які можуть автоматично виконувати перевірку переповнення на етапі компіляції. Для проєктів, що використовують старі версії Solidity, рекомендується інтегрувати бібліотеку SafeMath від OpenZeppelin для обробки проблем переповнення цілих чисел.
Ця атака нагадує нам, що в екосистемі блокчейн навіть незначні вразливості в коді можуть призвести до серйозних економічних втрат. Тому повна перевірка коду та постійні оновлення безпеки є надзвичайно важливими для захисту активів користувачів.