Poolz зазнав атаки переповнення арифметичних даних, збитки приблизно 66,5 тисяч доларів США
Нещодавно на мережах Ethereum, Binance Smart Chain та Polygon сталася атака на Poolz. Згідно з моніторингом даних в блокчейні, атака відбулася 15 березня 2023 року о 3:16 ( UTC ). У цій атаці було залучено кілька токенів, включаючи MEE, ESNC, DON, ASW, KMON, POOLZ тощо, загальні збитки склали близько 665 тисяч доларів.
Зловмисники використали вразливість переповнення цілого числа в смарт-контракті Poolz. Конкретно, проблема полягає в функції getArraySum у функції CreateMassPools. Ця функція не змогла правильно обробити ситуацію переповнення при складанні великих чисел, коли обчислювала початкову ліквідність, надану користувачем для масового створення пулів.
Процес атаки такий:
Зловмисник спочатку обміняв невелику кількість токенів MNZ на певній децентралізованій біржі.
Далі викликається функція CreateMassPools, в яку передаються ретельно сконструйовані параметри. Масив _StartAmount містить два значення: одне велике число, близьке до верхньої межі uint256, та нормальна кількість токенів.
Через операцію накопичення у функції getArraySum сталася переповненість, в результаті чого значення, що повертається, становить 1. Однак контракт при запису властивостей пулу все ще використовував початкове значення _StartAmount.
Це призвело до того, що зловмисник фактично перевів лише 1 токен, але в контракті було зафіксовано величезну кількість ліквідності.
Нарешті, зловмисник викликає функцію withdraw для виведення токенів, завершаючи атаку.
Щоб запобігти повторенню таких проблем, рекомендується розробникам вжити такі заходи:
Використовуйте новішу версію компілятора Solidity, яка автоматично виконує перевірку переповнення.
Якщо необхідно використовувати стару версію Solidity, можна підключити сторонню бібліотеку безпеки для обробки цілочисельних операцій, таку як бібліотека SafeMath від OpenZeppelin.
При обробці введення користувача, особливо у випадках, що стосуються обчислень великих чисел, слід проводити сувору перевірку меж та обробку виключень.
Регулярно проводити аудит коду, особливо звертаючи увагу на можливі частини, що стосуються переповнення цілих чисел.
Розгляньте можливість впровадження механізмів, таких як мультипідпис або замок часу, щоб виграти час для реагування у надзвичайних ситуаціях.
Ця подія ще раз нагадує нам, що безпека завжди повинна бути пріоритетом у розробці смарт-контрактів. Навіть здавалося б прості арифметичні операції можуть стати слабким місцем, яке можуть використати зловмисники.
Переглянути оригінал
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
16 лайків
Нагородити
16
4
Поділіться
Прокоментувати
0/400
zkProofInThePudding
· 07-31 01:15
Знову чорний і в мінусі, це вже занадто!
Переглянути оригіналвідповісти на0
DaisyUnicorn
· 07-31 01:15
Давайте подивимося на велику виставу, де розцвітають вразливі квіти~ Ще одна не розрахована добре «медова банка» переповнена!
Переглянути оригіналвідповісти на0
CryptoPhoenix
· 07-31 01:14
Ще один проєкт впав... Потрібен час, щоб відновити віру[翻白眼], але ринок завжди може відновитися!
Poolz зазнав атаки через арифметичний переповнень, втративши 665 тисяч доларів США, постраждали активи на кількох блокчейнах.
Poolz зазнав атаки переповнення арифметичних даних, збитки приблизно 66,5 тисяч доларів США
Нещодавно на мережах Ethereum, Binance Smart Chain та Polygon сталася атака на Poolz. Згідно з моніторингом даних в блокчейні, атака відбулася 15 березня 2023 року о 3:16 ( UTC ). У цій атаці було залучено кілька токенів, включаючи MEE, ESNC, DON, ASW, KMON, POOLZ тощо, загальні збитки склали близько 665 тисяч доларів.
Зловмисники використали вразливість переповнення цілого числа в смарт-контракті Poolz. Конкретно, проблема полягає в функції getArraySum у функції CreateMassPools. Ця функція не змогла правильно обробити ситуацію переповнення при складанні великих чисел, коли обчислювала початкову ліквідність, надану користувачем для масового створення пулів.
Процес атаки такий:
Зловмисник спочатку обміняв невелику кількість токенів MNZ на певній децентралізованій біржі.
Далі викликається функція CreateMassPools, в яку передаються ретельно сконструйовані параметри. Масив _StartAmount містить два значення: одне велике число, близьке до верхньої межі uint256, та нормальна кількість токенів.
Через операцію накопичення у функції getArraySum сталася переповненість, в результаті чого значення, що повертається, становить 1. Однак контракт при запису властивостей пулу все ще використовував початкове значення _StartAmount.
Це призвело до того, що зловмисник фактично перевів лише 1 токен, але в контракті було зафіксовано величезну кількість ліквідності.
Нарешті, зловмисник викликає функцію withdraw для виведення токенів, завершаючи атаку.
Щоб запобігти повторенню таких проблем, рекомендується розробникам вжити такі заходи:
Використовуйте новішу версію компілятора Solidity, яка автоматично виконує перевірку переповнення.
Якщо необхідно використовувати стару версію Solidity, можна підключити сторонню бібліотеку безпеки для обробки цілочисельних операцій, таку як бібліотека SafeMath від OpenZeppelin.
При обробці введення користувача, особливо у випадках, що стосуються обчислень великих чисел, слід проводити сувору перевірку меж та обробку виключень.
Регулярно проводити аудит коду, особливо звертаючи увагу на можливі частини, що стосуються переповнення цілих чисел.
Розгляньте можливість впровадження механізмів, таких як мультипідпис або замок часу, щоб виграти час для реагування у надзвичайних ситуаціях.
Ця подія ще раз нагадує нам, що безпека завжди повинна бути пріоритетом у розробці смарт-контрактів. Навіть здавалося б прості арифметичні операції можуть стати слабким місцем, яке можуть використати зловмисники.