Популярна версія: Простий «переклад» для тлумачення аналізу @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 може запобігти більшості базових ризиків безпеки, але він не може замінити розробників перевіркою меж бізнес-логіки та захистом від переповнення математичних операцій.
53.43K