Нещодавно екосистема BNB Chain проекту MobiusDAO зазнала атаки, зловмисник через логічну уразливість контракту проекту випустив велику кількість токенів MBU та продав їх для отримання прибутку. Команда безпеки Beosin провела аналіз вразливостей та відстеження коштів і поділилася результатами, наведеними нижче:
Детальні кроки атаки
(1) Атакуючий спочатку розгорнув атакуючий контракт (0x631adFF068D484Ce531Fb519Cda4042805521641)
і використав цю угоду для виклику функції депозиту мобільного агентського контракту 0x95e92B09b89cF31Fa9F1Eca4109A85F88EB08531, після чого контракт Mobius випустив понад 9.7x10^15 токенів MBU та надіслав їх на контракт атаки.
(2) Атака контракту викликає пов'язаний контракт PancakeSwap для продажу токенів MBU після отримання токенів MBU для отримання прибутку.
Аналіз вразливостей
Функція депозиту контракту Mobius після отримання депозиту випускає рівну кількість токенів MBU, які надсилаються депозитору. У цій функції кожного разу, коли користувач вносить WBNB, функція отримує ціну BNB, щоб обчислити кількість токенів MBU, які потрібно випустити та перевести.
Ціна BNB отримується з функції getBNBPriceInUSDT, яка повертає ціну з точністю до 18 знаків після коми. Як показано на малюнку, повернена ціна становить приблизно 656 доларів.
Оскільки логічний контракт Mobius не є відкритим, під час декомпіляції ми виявили, що вразливість виникає, коли функція повертає результат з 18 десятковими знаками, контракт знову множить це значення на 10^18, внаслідок чого кількість токенів MBU виявляється в 10^18 разів більшою за нормальний результат.
Слідкування за вкраденими коштами
Beosin Trace виявив, що вкрадені кошти були відстежені: вкрадені кошти були перетворені зловмисниками на близько 2,15 мільйонів токенів USDT, з яких 1,35 мільйона USDT було обміняно на BNB і збережено в Tornado Cash, а решта 800 тисяч USDT була обміняна в міжланцюговому форматі на ETH в мережі Ethereum, після чого була збережена в Tornado Cash. Beosin Trace додав адреси, пов'язані з хакерами, до чорного списку адрес, і в подальшому буде продовжувати відстеження.
Згідно з аналізом Beosin Trace, всі вкрадені кошти були перераховані в Tornado Cash
підсумок
Центром цієї атаки стало використання атакуючим арифметичної помилки в контракті проєкту для випуску величезної кількості токенів з метою отримання прибутку. Це була дуже легко виявляється помилка в коді, але команда проєкту Mobius раніше не проводила детального тестування коду контракту, щоб виявити цю помилку, і не проводила аудит, що призвело до втрати понад 2,15 мільйона доларів. Команда безпеки Beosin рекомендує команді проєкту посилити аудит та безпекове тестування коду контракту, щоб уникнути подібних ситуацій у майбутньому.
Переглянути оригінал
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
Втрата 2,15 мільйона доларів! Аналіз вразливості інциденту MobiusDAO та відстеження вкрадених коштів
Автор: Beosin
Нещодавно екосистема BNB Chain проекту MobiusDAO зазнала атаки, зловмисник через логічну уразливість контракту проекту випустив велику кількість токенів MBU та продав їх для отримання прибутку. Команда безпеки Beosin провела аналіз вразливостей та відстеження коштів і поділилася результатами, наведеними нижче:
Детальні кроки атаки
(1) Атакуючий спочатку розгорнув атакуючий контракт (0x631adFF068D484Ce531Fb519Cda4042805521641)
і використав цю угоду для виклику функції депозиту мобільного агентського контракту 0x95e92B09b89cF31Fa9F1Eca4109A85F88EB08531, після чого контракт Mobius випустив понад 9.7x10^15 токенів MBU та надіслав їх на контракт атаки.
Атакуюча хеш-транзакція: 0x2a65254b41b42f39331a0bcc9f893518d6b106e80d9a476b8ca3816325f4a150
(2) Атака контракту викликає пов'язаний контракт PancakeSwap для продажу токенів MBU після отримання токенів MBU для отримання прибутку.
Аналіз вразливостей
Функція депозиту контракту Mobius після отримання депозиту випускає рівну кількість токенів MBU, які надсилаються депозитору. У цій функції кожного разу, коли користувач вносить WBNB, функція отримує ціну BNB, щоб обчислити кількість токенів MBU, які потрібно випустити та перевести.
Ціна BNB отримується з функції getBNBPriceInUSDT, яка повертає ціну з точністю до 18 знаків після коми. Як показано на малюнку, повернена ціна становить приблизно 656 доларів.
Оскільки логічний контракт Mobius не є відкритим, під час декомпіляції ми виявили, що вразливість виникає, коли функція повертає результат з 18 десятковими знаками, контракт знову множить це значення на 10^18, внаслідок чого кількість токенів MBU виявляється в 10^18 разів більшою за нормальний результат.
Слідкування за вкраденими коштами
Beosin Trace виявив, що вкрадені кошти були відстежені: вкрадені кошти були перетворені зловмисниками на близько 2,15 мільйонів токенів USDT, з яких 1,35 мільйона USDT було обміняно на BNB і збережено в Tornado Cash, а решта 800 тисяч USDT була обміняна в міжланцюговому форматі на ETH в мережі Ethereum, після чого була збережена в Tornado Cash. Beosin Trace додав адреси, пов'язані з хакерами, до чорного списку адрес, і в подальшому буде продовжувати відстеження.
Згідно з аналізом Beosin Trace, всі вкрадені кошти були перераховані в Tornado Cash
підсумок
Центром цієї атаки стало використання атакуючим арифметичної помилки в контракті проєкту для випуску величезної кількості токенів з метою отримання прибутку. Це була дуже легко виявляється помилка в коді, але команда проєкту Mobius раніше не проводила детального тестування коду контракту, щоб виявити цю помилку, і не проводила аудит, що призвело до втрати понад 2,15 мільйона доларів. Команда безпеки Beosin рекомендує команді проєкту посилити аудит та безпекове тестування коду контракту, щоб уникнути подібних ситуацій у майбутньому.