Poolz зазнав атаки через уразливість переповнення арифметики, збитки становлять близько 66,5 тисячі доларів США
15 березня 2023 року вночі Poolz зазнав атаки в мережах Ethereum, BNB Chain та Polygon, що призвело до втрати різних токенів на загальну суму приблизно 665 тисяч доларів США. Зловмисники скористалися вразливістю арифметичного переповнення в смарт-контракті, успішно обійшовши обмеження на передачу коштів.
Згідно з моніторингом даних на блокчейні, ця атака торкнулася кількох токенів, включаючи MEE, ESNC, DON, ASW, KMON, POOLZ та ін. Зловмисник вже обміняв частину прибуткових токенів на BNB, але наразі ці кошти ще не були переведені.
Процес атаки в основному поділяється на три етапи:
Зловмисник спочатку обміняв невелику кількість токенів MNZ через певний DEX.
Потім було викликано функцію CreateMassPools в контракті Poolz. Ця функція повинна була використовуватися для масового створення пулів ліквідності та надання початкової ліквідності, але в ній є критична вразливість.
Вразливість виникає у функції getArraySum. Ця функція виконує сумування, перебираючи масив _StartAmount, але не враховує ситуацію переповнення. Зловмисник ретельно сконструював масив, що призводить до переповнення uint256, так що значення, що повертається функцією, дорівнює 1, тоді як фактичний запис _StartAmount є величезним значенням.
Нарешті, зловмисник викликав функцію withdraw для виведення коштів, завершивши весь процес атаки.
Ця подія ще раз підкреслила небезпеку проблеми переповнення арифметичних операцій у смарт-контрактах. Щоб запобігти подібним атакам, розробники повинні врахувати наступні рекомендації:
Використовуйте новішу версію компілятора Solidity, яка має вбудований механізм перевірки переповнень.
У версіях Solidity низького рівня можна впроваджувати сторонні бібліотеки безпеки, такі як SafeMath від OpenZeppelin, для обробки цілих чисел.
Проведіть всебічний аудит коду, особливо звертаючи увагу на частини, що стосуються математичних обчислень.
Запровадьте додаткові заходи безпеки, такі як мультипідпис, щоб додати рівень захисту для ключових операцій.
Ця подія знову нагадує нам, що в екосистемі блокчейну код є законом. Команда розробників повинна завжди бути на чеку, постійно вдосконалюючи практики безпеки, щоб захистити активи користувачів і репутацію проєкту.
Переглянути оригінал
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
Poolz зазнав атаки через переповнення арифметики, втратили 66,5 тисячі доларів США, постраждали багатоланцюгові активи.
Poolz зазнав атаки через уразливість переповнення арифметики, збитки становлять близько 66,5 тисячі доларів США
15 березня 2023 року вночі Poolz зазнав атаки в мережах Ethereum, BNB Chain та Polygon, що призвело до втрати різних токенів на загальну суму приблизно 665 тисяч доларів США. Зловмисники скористалися вразливістю арифметичного переповнення в смарт-контракті, успішно обійшовши обмеження на передачу коштів.
Згідно з моніторингом даних на блокчейні, ця атака торкнулася кількох токенів, включаючи MEE, ESNC, DON, ASW, KMON, POOLZ та ін. Зловмисник вже обміняв частину прибуткових токенів на BNB, але наразі ці кошти ще не були переведені.
Процес атаки в основному поділяється на три етапи:
Зловмисник спочатку обміняв невелику кількість токенів MNZ через певний DEX.
Потім було викликано функцію CreateMassPools в контракті Poolz. Ця функція повинна була використовуватися для масового створення пулів ліквідності та надання початкової ліквідності, але в ній є критична вразливість.
Вразливість виникає у функції getArraySum. Ця функція виконує сумування, перебираючи масив _StartAmount, але не враховує ситуацію переповнення. Зловмисник ретельно сконструював масив, що призводить до переповнення uint256, так що значення, що повертається функцією, дорівнює 1, тоді як фактичний запис _StartAmount є величезним значенням.
Нарешті, зловмисник викликав функцію withdraw для виведення коштів, завершивши весь процес атаки.
Ця подія ще раз підкреслила небезпеку проблеми переповнення арифметичних операцій у смарт-контрактах. Щоб запобігти подібним атакам, розробники повинні врахувати наступні рекомендації:
Використовуйте новішу версію компілятора Solidity, яка має вбудований механізм перевірки переповнень.
У версіях Solidity низького рівня можна впроваджувати сторонні бібліотеки безпеки, такі як SafeMath від OpenZeppelin, для обробки цілих чисел.
Проведіть всебічний аудит коду, особливо звертаючи увагу на частини, що стосуються математичних обчислень.
Запровадьте додаткові заходи безпеки, такі як мультипідпис, щоб додати рівень захисту для ключових операцій.
Ця подія знову нагадує нам, що в екосистемі блокчейну код є законом. Команда розробників повинна завжди бути на чеку, постійно вдосконалюючи практики безпеки, щоб захистити активи користувачів і репутацію проєкту.