Back to Blog

Инцидент с Cetus №1: одна непроверенная операция привела к потере 223 млн долларов в крупнейшем DeFi-взломе 2025 года

Code AuditingPhalcon Security
February 9, 2026
6 min read
Key Insights

22 мая 2025 года Cetus Protocol, крупнейшая DEX с концентрированной ликвидностью в сети Sui, подверглась катастрофической хакерской атаке, приведшей к истощению ликвидности в нескольких пулах. Оценочный ущерб составил ~$223 млн. Этот инцидент стал крупнейшим взломом в сфере DeFi в 2025 году, подчеркнув критические уязвимости в безопасности смарт-контрактов, особенно в части арифметики с фиксированной запятой.

Эксплойт возник из-за ошибки во вспомогательной функции для предотвращения переполнения — checked_shlw(). Из-за неверной константы и некорректного сравнения эта функция не смогла обнаружить небезопасные условия перед выполнением побитового сдвига влево, используемого в математике фиксированной запятой для типа u256. Это упущение позволило выполнить скрытое отсечение старших битов при проведении ключевых расчетов дельты, таких как определение объема входных данных токена, необходимых для обеспечения определенной ликвидности. Тщательно манипулируя такими параметрами, как объем ликвидности и настройки тиков/ценового диапазона, злоумышленник смог обмануть протокол, заставив его рассчитать требуемый депозит, равный, по сути, 1 единице токена, при этом одновременно начислив на позицию огромный объем ликвидности. После того как эта раздутая позиция была зафиксирована в блокчейне, злоумышленник вывел ликвидность и изъял реальные резервы, фактически опустошив пулы.

Понимание концентрированной ликвидности и математики фиксированной запятой

Cetus Protocol использует дизайн маркет-мейкера с концентрированной ликвидностью (CLMM) — сложный подход, при котором провайдеры ликвидности (LP) предоставляют активы только в пределах выбранного ценового диапазона (интервала тиков). В отличие от традиционных AMM, распределяющих ликвидность равномерно, CLMM позволяют LP концентрировать капитал между конкретными нижними и верхними границами. Такой дизайн значительно повышает эффективность капитала, но вызывает сильную зависимость от точной математики с фиксированной запятой для конвертации между:

  • Объемом ликвидности, зачисленной на позицию.
  • Фактическим количеством токенов, которые должны быть внесены или могут быть выведены.

Когда пользователь добавляет ликвидность, протокол рассчитывает дельту токенов (сколько базовых токенов требуется) на основе текущей цены и выбранного диапазона. И наоборот, при удалении ликвидности обратный расчет определяет количество активов, на вывод которых имеет право данная позиция.

Основная уязвимость в инциденте с Cetus эксплуатировала эту сложную взаимосвязь: если расчет «сколько вы должны внести» можно было манипулировать так, чтобы он был слишком маленьким, в то время как на позицию все еще начислялась большая ликвидность, злоумышленник мог впоследствии удалить эту зачисленную ликвидность и вывести реальные резервы из пула. Это подчеркивает распространенный вектор атаки в протоколах DeFi, связанных со сложными математическими вычислениями.

Критическая уязвимость при сдвиге u256

Первопричиной этого масштабного DeFi-взлома стала ошибка во вспомогательной функции, предназначенной для безопасного выполнения сдвига влево — распространенной операции в арифметике u256 с фиксированной запятой (обычно << 64 для применения масштабирующего коэффициента 2^64). В системах на базе Move, таких как Sui, проверки на переполнение не применяются единообразно ко всем операциям, что делает ручные средства защиты для битовых сдвигов критически важными.

В Cetus была внедрена функция checked_shlw() для проверки того, не превысит ли сдвиг значения u256 влево на 64 бита границу в 256 бит. Однако из-за неверной константы и сравнения эта критическая проверка могла быть обойдена для некоторых больших входных данных, которые должны были быть отклонены.

В частности, функция get_delta_a, отвечающая за вычисление количества базовых токенов (Token A), необходимых для обеспечения ликвидности между двумя ценами (sqrt_price_0 и sqrt_price_1), вызывает checked_shlw(). Цель checked_shlw() здесь — гарантировать, что числитель в расчете Token A не переполнится при сдвиге.

Ошибка заключалась в проверке переполнения в checked_shlw(), где использовалась маска 0xffffffffffffffff << 192 (эквивалентно 2^256 - 2^192). Эта маска значительно больше правильного порогового значения. Следовательно, входное значение, большее 2^192, но меньшее этой ошибочной маски, проходило проверку, хотя сдвиг влево на самом деле приводил к выходу за пределы диапазона u256. Последующий сдвиг влево приводил к скрытому отсечению, давая неверный и значительно меньший результат.

На рисунке ниже показана разница между уязвимой реализацией и исправленной версией. Правильной границей должно было быть 1 << 192, а не гораздо большее число 0xffffffffffffffff << 192. Злоумышленник искусно воспользовался этой ошибочной проверкой, чтобы создать необычайно большое количество LP-токенов, внеся при этом минимальное количество, например 1 вей токена A.

Сравнение уязвимой и исправленной реализации сдвига u256 в Cetus
Сравнение уязвимой и исправленной реализации сдвига u256 в Cetus

Анатомия DeFi-взлома Cetus

Хотя злоумышленник применял один и тот же метод в нескольких пулах, основной сценарий атаки оставался неизменным. Давайте проанализируем конкретную транзакцию, чтобы понять шаги, вовлеченные в этот сложный инцидент безопасности блокчейна.

1. Манипуляция ценой пула с помощью флэш-кредита

Атака началась с того, что злоумышленник использовал флэш-кредит для быстрого получения 10 024 321,28 haSUI. Затем он обменял 5 765 124,79 SUI, намеренно снизив цену пула с 18 956 530 795 606 879 104 до 18 425 720 184 762 886. Это стратегическое изменение цены имело решающее значение, так как оно позволило злоумышленнику открыть позицию CLMM, требующую лишь минимального количества одного токена, используя поведение «односторонней» ликвидности, присущее дизайну концентрированной ликвидности.

Флэш-кредит, использованный для манипуляции ценой пула Cetus
Флэш-кредит, использованный для манипуляции ценой пула Cetus

2. Добавление ликвидности с «почти бесплатным» депозитом

Далее злоумышленник выбрал очень узкий диапазон тиков (например, 300000–300200) и точно настроил целевую ликвидность. В системах CLMM расчеты дельты токенов сильно зависят от цен квадратного корня на границах диапазона, и узкие диапазоны могут сделать некоторые промежуточные значения чрезвычайно чувствительными к небольшим изменениям.

Тщательно настроив эти параметры, злоумышленник заставил внутреннее умножение выдать промежуточное значение u256. Это значение должно было вызвать переполнение при сдвиге влево, но оно успешно прошло проверку checked_shlw(). Как прямое следствие отсечения, вызванного небезопасным сдвигом, протокол рассчитал требуемое количество Token A как фактически 1 единицу, одновременно создав и записав позицию с огромным объемом ликвидности (т.е. 10 365 647 984 364 446 732 462 244 378 333 008).

Злоумышленник в Cetus добавляет ликвидность с минимальным депозитом
Злоумышленник в Cetus добавляет ликвидность с минимальным депозитом

3. Удаление ликвидности для изъятия реальных резервов

Имея внутрицепочечную позицию, которая ошибочно выглядела как имеющая раздутую ликвидность, злоумышленник приступил к удалению ликвидности и выводу активов так, как если бы позиция была должным образом профинансирована. На этом критическом этапе произошел систематический вывод реальных резервов пула, что привело к существенной потере в 223 миллиона долларов.

4. Повторение в нескольких пулах

Успешно проверив примитив эксплойта, злоумышленник повторил тот же рабочий процесс в нескольких пулах, быстро увеличив общие потери и совершив один из крупнейших DeFi-взломов на сегодняшний день.

Лучший аудитор безопасности для Web3

Проверяйте дизайн, код и бизнес-логику перед запуском

Основные выводы и уроки безопасности блокчейна

Инцидент с Cetus служит ярким напоминанием о сложнейших задачах обеспечения безопасности блокчейна, особенно в запутанных протоколах DeFi. Первопричиной стала ошибочная проверка переполнения при сдвиге u256 влево в математике с фиксированной запятой. Это позволило сдвигу с переполнением тихо отсечь старшие биты, из-за чего требуемый депозит казался почти нулевым, при этом на позицию LP начислялась огромная ликвидность, что в конечном итоге сделало возможным вывод резервов.

Уроки для безопасности смарт-контрактов:

  • Строгость в арифметике: Будьте исключительно строги при работе со сдвигами, масштабирующими коэффициентами, округлением и граничными условиями в арифметике с фиксированной запятой. Это частые источники критических уязвимостей.
  • Проверенные примитивы: Отдавайте предпочтение использованию проверенных примитивов безопасной математики или формализованных инвариантов, а не разработке специальных вспомогательных функций. Если необходимы пользовательские функции, проверяйте их константы и пороговые значения с особой тщательностью.
  • Комплексное тестирование: Внедряйте обширное тестирование граничных случаев и тестирование на основе свойств, чтобы охватить максимальные значения, граничные тики и комбинации параметров злоумышленника. Этот проактивный подход позволяет обнаружить скрытые недостатки до развертывания.
  • Постоянный мониторинг: Даже при надежных аудитах критически важны решения для мониторинга в реальном времени. Такие инструменты, как Phalcon Security от BlockSec, могут обнаруживать подозрительную активность в сети и потенциальные эксплойты в процессе выполнения, предлагая жизненно важный «последний рубеж» обороны.

Инцидент с Cetus подчеркивает важность многоуровневого подхода к безопасности блокчейна, сочетающего тщательный анализ кода, передовые методологии тестирования и постоянный мониторинг в сети для защиты от сложных DeFi-атак.

Начните работу с Phalcon Security

Обнаруживайте все угрозы, оповещайте о важном и блокируйте атаки.

Попробуйте бесплатно

Справочные материалы

  1. Официальное объявление Cetus Protocol
  2. Краткий анализ BlockSec
  3. Транзакция в Suiscan

О компании BlockSec

BlockSec — это провайдер комплексных решений в области безопасности блокчейна и крипто-комплаенса. Мы создаем продукты и предоставляем услуги, которые помогают клиентам проводить аудит кода (включая смарт-контракты, блокчейн и кошельки), блокировать атаки в реальном времени, анализировать инциденты, отслеживать незаконные средства и соблюдать обязательства по борьбе с отмыванием денег (AML/CFT) в течение всего жизненного цикла протоколов и платформ.

BlockSec опубликовала множество статей по безопасности блокчейнов на престижных конференциях, сообщила о нескольких атаках «нулевого дня» на приложения DeFi, заблокировала множество хакерских атак, спасая более 20 миллионов долларов, и обеспечила безопасность криптовалют на миллиарды долларов.

Best Security Auditor for Web3

Validate design, code, and business logic before launch. Aligned with the highest industry security standards.

BlockSec Audit

Get Real-Time Protection with Phalcon Security

Audits alone are not enough. Phalcon Security detects attacks in real time and blocks threats mid-flight.

phalcon security