Проект Poolz зазнав атаки через вразливість переповнення арифметичних операцій, втрати склали близько 66,5 тисячі доларів
Нещодавно напад на проект Poolz привернув широку увагу криптовалютної спільноти. Згідно з даними моніторингу в мережі, атака сталася 15 березня 2023 року і торкнулася трьох мереж: Ethereum, BNB Chain та Polygon. Зловмисники використали вразливість арифметичного переповнення в смарт-контракті, успішно викравши велику кількість токенів, загальна вартість яких становила близько 665 тисяч доларів.
Деталі атаки
Зловмисник здійснив цю атаку за наступними кроками:
Спочатку обміняв певну кількість токенів MNZ на децентралізованій біржі.
Потім було викликано функцію CreateMassPools у контракті Poolz. Ця функція мала б дозволити користувачам масово створювати ліквідні池 і надавати початкову ліквідність, але в ній є серйозна вразливість.
Проблема полягає в функції getArraySum. Ця функція використовується для обчислення кількості початкової ліквідності, наданої користувачем, але не змогла правильно обробити випадок переповнення цілого числа.
Зловмисник майстерно сконструював вхідні параметри, так що масив _StartAmount містить числа, що перевищують максимальне значення uint256. Це призвело до переповнення результату накопичення, в результаті чого повернуте значення дорівнює 1.
Оскільки контракт використовує початкове значення _StartAmount при запису властивостей пулу, а не фактичну кількість токенів, які були переведені, зловмиснику достатньо перевести 1 токен, щоб створити пул ліквідності, що значно перевищує фактичний.
Нарешті, зловмисник викликав функцію withdraw, щоб вивести велику кількість несанкціонованих токенів, завершивши весь процес атаки.
Вкрадені активи
Ця атака призвела до втрат декількох токенів, включаючи, але не обмежуючись:
2 805 805 MEE
525 134 ESNC
774 997 ДОН
2 007 504 238 ASW
6 510 689 КМОН
2 521 065 ПУЛЗ
35,976,107 DCD
760 845 ПОРТІВ
Зловмисник вже обміняв частину вкрадених токенів на BNB, але на момент звіту ці кошти ще не були переведені з адреси зловмисника.
Рекомендації щодо запобігання
Щоб запобігти подібним вразливостям через арифметичний переповнень, експерти радять вжити такі заходи:
Використовуйте новішу версію компілятора Solidity, ці версії автоматично виконують перевірку переповнень під час компіляції.
Для проектів, що використовують старі версії Solidity, рекомендується впровадити бібліотеку SafeMath від OpenZeppelin для обробки цілочисельних обчислень, щоб уникнути проблем з переповненням.
Проведення всебічного аудиту коду, з особливою увагою до частин, що стосуються великих числових обчислень.
Впровадити строгу перевірку введення, щоб забезпечити, що параметри, надані користувачем, знаходяться в розумних межах.
Розгляньте можливість додавання механізмів безпеки, таких як багатопідпис або тайм-лок, у ключові операції.
Ця подія знову підкреслює важливість безпеки смарт-контрактів, нагадуючи розробникам та командам проектів завжди залишатися насторожі та постійно вдосконалювати безпеку коду. Водночас це також нагадує користувачам бути особливо обережними при взаємодії з проєктами децентралізованих фінансів, особливо при участі у нових або недостатньо перевірених проєктах.
Переглянути оригінал
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
18 лайків
Нагородити
18
8
Поділіться
Прокоментувати
0/400
GateUser-a5fa8bd0
· 07-23 01:44
Знову проблеми з контрактами, тьфу-тьфу.
Переглянути оригіналвідповісти на0
SellTheBounce
· 07-20 10:40
Ще один невдаха падіння до нуля, знайомий сюжет
Переглянути оригіналвідповісти на0
DataBartender
· 07-20 02:14
Послухавши вашу розмову, вип'ю чашку чаю.
Переглянути оригіналвідповісти на0
GasFeeCrying
· 07-20 02:13
Знову чорна історія, втекла, втекла.
Переглянути оригіналвідповісти на0
LazyDevMiner
· 07-20 02:13
Ще один випадок попередження про нульове переповнення
Проект Poolz зазнав атаки арифметичного переповнення, внаслідок чого було втрачено активів на суму 66,5 тисячі доларів США.
Проект Poolz зазнав атаки через вразливість переповнення арифметичних операцій, втрати склали близько 66,5 тисячі доларів
Нещодавно напад на проект Poolz привернув широку увагу криптовалютної спільноти. Згідно з даними моніторингу в мережі, атака сталася 15 березня 2023 року і торкнулася трьох мереж: Ethereum, BNB Chain та Polygon. Зловмисники використали вразливість арифметичного переповнення в смарт-контракті, успішно викравши велику кількість токенів, загальна вартість яких становила близько 665 тисяч доларів.
Деталі атаки
Зловмисник здійснив цю атаку за наступними кроками:
Спочатку обміняв певну кількість токенів MNZ на децентралізованій біржі.
Потім було викликано функцію CreateMassPools у контракті Poolz. Ця функція мала б дозволити користувачам масово створювати ліквідні池 і надавати початкову ліквідність, але в ній є серйозна вразливість.
Проблема полягає в функції getArraySum. Ця функція використовується для обчислення кількості початкової ліквідності, наданої користувачем, але не змогла правильно обробити випадок переповнення цілого числа.
Зловмисник майстерно сконструював вхідні параметри, так що масив _StartAmount містить числа, що перевищують максимальне значення uint256. Це призвело до переповнення результату накопичення, в результаті чого повернуте значення дорівнює 1.
Оскільки контракт використовує початкове значення _StartAmount при запису властивостей пулу, а не фактичну кількість токенів, які були переведені, зловмиснику достатньо перевести 1 токен, щоб створити пул ліквідності, що значно перевищує фактичний.
Нарешті, зловмисник викликав функцію withdraw, щоб вивести велику кількість несанкціонованих токенів, завершивши весь процес атаки.
Вкрадені активи
Ця атака призвела до втрат декількох токенів, включаючи, але не обмежуючись:
Зловмисник вже обміняв частину вкрадених токенів на BNB, але на момент звіту ці кошти ще не були переведені з адреси зловмисника.
Рекомендації щодо запобігання
Щоб запобігти подібним вразливостям через арифметичний переповнень, експерти радять вжити такі заходи:
Використовуйте новішу версію компілятора Solidity, ці версії автоматично виконують перевірку переповнень під час компіляції.
Для проектів, що використовують старі версії Solidity, рекомендується впровадити бібліотеку SafeMath від OpenZeppelin для обробки цілочисельних обчислень, щоб уникнути проблем з переповненням.
Проведення всебічного аудиту коду, з особливою увагою до частин, що стосуються великих числових обчислень.
Впровадити строгу перевірку введення, щоб забезпечити, що параметри, надані користувачем, знаходяться в розумних межах.
Розгляньте можливість додавання механізмів безпеки, таких як багатопідпис або тайм-лок, у ключові операції.
Ця подія знову підкреслює важливість безпеки смарт-контрактів, нагадуючи розробникам та командам проектів завжди залишатися насторожі та постійно вдосконалювати безпеку коду. Водночас це також нагадує користувачам бути особливо обережними при взаємодії з проєктами децентралізованих фінансів, особливо при участі у нових або недостатньо перевірених проєктах.