18 липня 2023 року за пекінським часом компанія Ocean BNO зазнала миттєвої атаки на кредит, і зловмисник отримав прибуток у розмірі близько 500 000 доларів США.
SharkTeam вперше провела технічний аналіз цього інциденту та підсумувала заходи безпеки, сподіваючись, що подальші проекти зможуть навчитися на цьому та спільно побудувати захист безпеки для індустрії блокчейнів.
(1) Зловмисник (0xa6566574) позичив 286 449 BNO через флеш-позику pancakeSwap.
(2) Потім викличте функцію stakeNft атакованого контракту (0xdCA50344), щоб заставити два nft.
(3) Потім викличте функцію застави атакованого контракту (0xdCA50344), щоб заставити 277856 монет BNO.
(4) Викликати функцію аварійного відкликання атакованого контракту (0xdCA50344), щоб отримати всі BNO
(5) Потім викличте функцію unstakeNft атакованого контракту (0xdCA50344), витягніть два закладених nft і отримайте додаткові токени BNO.
(6) Повторіть описаний вище процес, щоб постійно отримувати додаткові токени BNO
(7) Після погашення флеш-кредиту обміняйте всі токени BNO на 50,5 Вт BUSD і покиньте ринок із прибутком.
По-друге, аналіз вразливостей
Основна причина цієї атаки: існує проблема з механізмом розрахунку винагороди та логікою взаємодії функції екстреного вилучення в атакуваному контракті (0xdCA50344), через що користувач отримує додатковий маркер винагороди після зняття принципала.
Контракт забезпечує функцію EmergencyWithdraw для екстреного вилучення токенів і очищає зловмисника загальну іпотеку allstake і rewardDebt загальний борг, але не очищає змінну nftAddition зловмисника, а змінна nftAddition також обчислюється через змінну allstake.
У функції unstakeNft поточна винагорода користувача все одно буде розрахована, і якщо змінна nftAddition не скинута до нуля, функція pendingFit все одно повертатиме додаткове значення винагороди BNO, змушуючи зловмисника отримати додаткові токени BNO.
По-третє, рекомендації щодо безпеки
У відповідь на цю атаку ми повинні дотримуватися таких запобіжних заходів під час процесу розробки:
(1) Під час розрахунку винагороди перевірте, чи користувач зняв основну суму.
(2) Перш ніж проект буде запущено в Інтернет, необхідно звернутися за технічною допомогою до сторонньої професійної аудиторської групи.
Переглянути оригінал
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.
Принциповий аналіз події атаки BNO
18 липня 2023 року за пекінським часом компанія Ocean BNO зазнала миттєвої атаки на кредит, і зловмисник отримав прибуток у розмірі близько 500 000 доларів США.
SharkTeam вперше провела технічний аналіз цього інциденту та підсумувала заходи безпеки, сподіваючись, що подальші проекти зможуть навчитися на цьому та спільно побудувати захист безпеки для індустрії блокчейнів.
1. Аналіз подій
Адреса зловмисника:
0xa6566574edc60d7b2adbacedb71d5142cf2677fb
Контракт на атаку:
0xd138b9a58d3e5f4be1cd5ec90b66310e241c13cd
Атакований договір:
0xdCA503449899d5649D32175a255A8835A03E4006
Атакуючі транзакції:
0x33fed54de490797b99b2fc7a159e43af57e9e6bdefc2c2d052dc814cfe0096b9
Процес атаки:
(1) Зловмисник (0xa6566574) позичив 286 449 BNO через флеш-позику pancakeSwap.
(2) Потім викличте функцію stakeNft атакованого контракту (0xdCA50344), щоб заставити два nft.
(3) Потім викличте функцію застави атакованого контракту (0xdCA50344), щоб заставити 277856 монет BNO.
(4) Викликати функцію аварійного відкликання атакованого контракту (0xdCA50344), щоб отримати всі BNO
(5) Потім викличте функцію unstakeNft атакованого контракту (0xdCA50344), витягніть два закладених nft і отримайте додаткові токени BNO.
(6) Повторіть описаний вище процес, щоб постійно отримувати додаткові токени BNO
(7) Після погашення флеш-кредиту обміняйте всі токени BNO на 50,5 Вт BUSD і покиньте ринок із прибутком.
По-друге, аналіз вразливостей
Основна причина цієї атаки: існує проблема з механізмом розрахунку винагороди та логікою взаємодії функції екстреного вилучення в атакуваному контракті (0xdCA50344), через що користувач отримує додатковий маркер винагороди після зняття принципала.
Контракт забезпечує функцію EmergencyWithdraw для екстреного вилучення токенів і очищає зловмисника загальну іпотеку allstake і rewardDebt загальний борг, але не очищає змінну nftAddition зловмисника, а змінна nftAddition також обчислюється через змінну allstake.
У функції unstakeNft поточна винагорода користувача все одно буде розрахована, і якщо змінна nftAddition не скинута до нуля, функція pendingFit все одно повертатиме додаткове значення винагороди BNO, змушуючи зловмисника отримати додаткові токени BNO.
По-третє, рекомендації щодо безпеки
У відповідь на цю атаку ми повинні дотримуватися таких запобіжних заходів під час процесу розробки:
(1) Під час розрахунку винагороди перевірте, чи користувач зняв основну суму.
(2) Перш ніж проект буде запущено в Інтернет, необхідно звернутися за технічною допомогою до сторонньої професійної аудиторської групи.