Популярна версія: Простий «переклад» для тлумачення аналізу @CetusProtocol хакера від технічного боса: Ця атака викриває класичну проблему цілочисельного переповнення, яка проявляється в усіченні даних під час перетворення типів. Технічні деталі в розібраному вигляді: 1) Розташування вразливості: проблема виникає в механізмі перетворення типів функції get_amount_by_liquidity, а перетворення приведення з U256 на U64 спричиняє втрату даних високого рівня. 2) Процес атаки: 1. Зловмисник пропускає велику кількість параметрів ліквідності через функцію add_liquidity; 2. Кількість B токенів, необхідних для обчислення системного виклику get_delta_b функції; 3. У процесі розрахунку два дані типу U128 перемножуються, і теоретичний результат повинен бути типу U256; Ключовий недолік: Результат u256 перетворюється на u64, коли функція повертається, що призводить до обрізання високорівневих 128-бітових даних. 3) Ефект використання: квота ліквідності, яка спочатку вимагала великої кількості токенів для карбування, тепер може бути виконана лише з дуже невеликою кількістю токенів. Зловмисник отримує величезну частку ліквідності за дуже низькою вартістю, а потім реалізує арбітраж пулу шляхом знищення частини ліквідності. Проста аналогія: подібно до використання калькулятора, який може відображати лише 8 цифр для обчислення 1 мільярда × 1 мільярда, результат 20-значного обчислення може відображати лише останні 8 цифр, а перші 12 цифр зникають безпосередньо. Зловмисник використовує цю вразливість. Щоб було зрозуміло: ця вразливість не має нічого спільного з базовою архітектурою безпеки @SuiNetwork, і «слава» безпеки мови Move все ще заслуговує на довіру на даний момент. Чому? Мова Move має значні переваги з точки зору управління ресурсами та безпеки типів, і може ефективно запобігати низькорівневим проблемам безпеки, таким як подвійні витрати та витік ресурсів. Однак цього разу протокол Cetus – це математична помилка на рівні логіки застосування, а не конструктивний недолік у самій мові Move. Зокрема, система типів Move, хоч і сувора, все ж покладається на правильне судження розробника щодо явного притворення. Коли програма активно виконує перетворення типів з U256 в U64, компілятор не може сказати, чи це навмисно, чи логічна помилка. Крім того, цей інцидент безпеки не має нічого спільного з основними базовими функціями Sui, такими як механізм консенсусу, обробка транзакцій і управління станами. Sui Network лише сумлінно виконує інструкції транзакцій, надіслані протоколом Cetus, і вразливість випливає з логічних недоліків самого протоколу прикладного рівня. Скажу прямо, жодна кількість просунутих мов програмування не може повністю усунути логічні помилки на прикладному рівні. Move може запобігти більшості базових ризиків безпеки, але він не може замінити розробників перевіркою меж бізнес-логіки та захистом від переповнення математичних операцій.
Після розслідування транзакції експлойта Cetus, я вважаю, що виявив першопричину помилки. Проблема пов'язана з типовим литтям від u256 до u64 в рамках функції get_amount_by_liquidity.
Показати оригінал
151
53,51 тис.
Вміст на цій сторінці надається третіми сторонами. Якщо не вказано інше, OKX не є автором цитованих статей і не претендує на авторські права на матеріали. Вміст надається виключно з інформаційною метою і не відображає поглядів OKX. Він не є схваленням жодних дій і не має розглядатися як інвестиційна порада або заохочення купувати чи продавати цифрові активи. Короткий виклад вмісту чи інша інформація, створена генеративним ШІ, можуть бути неточними або суперечливими. Прочитайте статтю за посиланням, щоб дізнатися більше. OKX не несе відповідальності за вміст, розміщений на сторонніх сайтах. Утримування цифрових активів, зокрема стейблкоїнів і NFT, пов’язане з високим ризиком, а вартість таких активів може сильно коливатися. Перш ніж торгувати цифровими активами або утримувати їх, ретельно оцініть свій фінансовий стан.