Исследователи Blocksec проанализировали взлом Cetus на $223 млн
Эксперты напомнили: 22 мая 2025 года протокол Cetus, крупнейшая DEX в сети Sui, подвергся масштабной атаке. В результате эксплойта была выведена ликвидность из нескольких пулов. Общий ущерб оценивается примерно в $223 млн. Об инциденте сообщила команда BlockSec, специализирующаяся на аудите и мониторинге смарт-контрактов. По их данным, атака была тщательно спланирована и использовала уязвимость в математической логике протокола.
Cetus работает по модели CLMM. Поставщики ликвидности размещают капитал в выбранном ценовом диапазоне. Такой подход повышает эффективность капитала, но требует точных вычислений с фиксированной точкой. При добавлении ликвидности протокол рассчитывает, сколько токенов необходимо внести. При удалении выполняется обратный расчет для определения суммы к выводу. Любая ошибка в этих формулах может привести к искажению баланса пула.
Корень проблемы находился в функции checked_shlw(), которая должна была предотвращать переполнение при сдвиге числа u256 влево на 64 бита. В коде использовалась некорректная константа и неправильное сравнение. Из-за этого проверка не срабатывала для ряда значений, которые фактически приводили к выходу за пределы 256 бит. После сдвига происходило «тихое усечение старших битов». В результате расчет требуемого депозита занижался.
Атакующий подобрал параметры ликвидности и узкий диапазон тиков, чтобы вызвать переполнение во внутреннем умножении. Он использовал флеш-кредит для манипуляции ценой пула. Затем открыл позицию, при которой протокол рассчитал необходимый депозит как 1 единицу токена. При этом в системе была зафиксирована огромная ликвидность. Фактически злоумышленник получил право на крупный объем средств, не обеспечив его реальным вкладом.
После создания позиции с «раздутой» ликвидностью атакующий удалил ее и вывел реальные резервы из пула. Эта схема была повторена несколько раз. Потери быстро накапливались по мере тиражирования метода. По оценке BlockSec, механизм эксплойта оставался одинаковым во всех случаях.
В BlockSec подчеркнули, что разработчикам необходимо уделять повышенное внимание операциям «сдвига, масштабирования и округления». Рекомендуется использовать проверенные библиотеки безопасной математики вместо собственных вспомогательных функций. Также важны тесты на граничные значения и экстремальные параметры.