Перейти к основному контенту

Как комментарий разработчика превратился в катастрофу на 128 млн долларов: эксплойт округления Balancer

· 9 мин чтения
Dora Noda
Software Engineer

В глубине кода смарт-контракта Balancer, прямо над функцией, которая в итоге привела к потере 128 миллионов долларов, находился комментарий разработчика: "ожидается, что влияние этого округления будет минимальным". Они ошиблись — на девять знаков.

3 ноября 2025 года злоумышленник воспользовался микроскопической ошибкой округления в Composable Stable Pools протокола Balancer V2, выведя средства из девяти блокчейн-сетей менее чем за 30 минут. Это не была эффектная атака повторного входа (reentrancy) или компрометация закрытого ключа. Это была арифметика — тип бага, который находится на виду, проходит через многочисленные аудиты и терпеливо ждет того, кто окажется достаточно умен, чтобы превратить его в оружие.

Анатомия эксплойта округления

Уязвимая функция

Функция batchSwap в Balancer V2 позволяет пользователям выполнять несколько обменов токенов за одну транзакцию. Внутренняя функция под названием _upscaleArray нормализует балансы токенов до общей точности перед вычислениями. Эта функция использует коэффициенты масштабирования (scaling factors) — множители, учитывающие количество десятичных знаков каждого токена и внутренний курс.

Проблема? Когда коэффициенты масштабирования не являются целыми числами (что происходит при учете курсов токенов), целочисленная арифметика Solidity округляет значение в меньшую сторону. В большинстве сценариев потеря точности составляет несколько wei — доли цента. Но Composable Stable Pools, содержащие тесно коррелирующие активы, такие как производные ликвидного стейкинга, усиливают даже крошечные ошибки округления при расчете инварианта StableSwap.

Трехэтапная атака

Стратегия злоумышленника была элегантна в своей простоте:

  1. Сдвиг к границе. Обмен больших объемов BPT (Balancer Pool Tokens) на базовые токены, что снижает внутренний баланс одного из токенов до критического диапазона 8–9 wei — порога, при котором целочисленное деление Solidity дает максимальную потерю точности.

  2. Накопление ошибки. Выполнение быстрых микро-обменов с использованием токена, находящегося на границе. Каждый обмен запускает функцию _upscaleArray, которая округляет в меньшую сторону во время операций EXACT_OUT. Округление приводит к тому, что инвариант пула D систематически занижается, искусственно подавляя цену BPT.

  3. Извлечение разницы. Минтинг или покупка BPT по заниженной цене с последующим немедленным погашением за базовые активы по полной стоимости. Повторение цикла.

Злоумышленник развернул смарт-контракты, конструкторы которых выполняли более 65 микро-обменов, превращая потерю точности в катастрофическую манипуляцию инвариантом. Каждая отдельная ошибка округления была незначительной. Вместе они опустошили пулы.

128 миллионов долларов в девяти сетях за 30 минут

Эксплойт произошел одновременно в сетях Ethereum, Base, Arbitrum, Avalanche, Optimism, Gnosis, Polygon, Berachain и Sonic. Ethereum понес самые тяжелые потери — примерно 99 миллионов долларов, в то время как другие сети потеряли от 1 до 12 миллионов долларов каждая.

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

Экстренные меры на уровне сетей

Реакция сетей значительно различалась, демонстрируя спектр философий децентрализации:

  • Berachain полностью остановила свою сеть и выполнила экстренный хардфорк, откатив эксплойт для восстановления пользовательских депозитов на сумму 12,8 млн долларов. Решение было спорным — сети было всего несколько месяцев, и ей пришлось выбирать между защитой пользователей и неизменяемостью.

  • Gnosis Chain изначально применила более взвешенный подход, ограничив работу мостов для предотвращения перемещения средств между сетями. Monerium заморозила 1,3 млн EURe в пострадавшем хранилище. Затем, 22 декабря, Gnosis провела хардфорк для восстановления 9,4 млн долларов, перезаписав состояние сети, чтобы принудительно перевести средства с кошелька злоумышленника на адрес восстановления, контролируемый DAO.

  • StakeWise DAO воспользовалась механизмом Safe Harbor от Balancer (BIP-726, принятым в 2024 году), чтобы официально санкционировать операции по whitehat-восстановлению средств, вернув примерно 19 млн долларов в osETH и 1,7 млн долларов в osGNO.

В общей сложности было восстановлено или заморожено около 43 млн долларов — примерно треть от общей суммы потерь.

Парадокс аудита

Возможно, самым тревожным аспектом эксплойта Balancer является то, что код прошел несколько профессиональных аудитов безопасности.

Trail of Bits проводила аудит кода Balancer V2 и фактически выявила проблемы, связанные с округлением. В своем обзоре Linear Pools 2021 года они отметили особенности округления, но не смогли однозначно определить, являются ли они уязвимыми. Они рекомендовали провести всестороннее фаззинг-тестирование, чтобы убедиться, что «направления округления всех арифметических операций соответствуют ожиданиям».

Когда Trail of Bits позже проверяла Composable Stable Pools в сентябре 2022 года, библиотека Stable Math — именно тот код, который содержал уязвимость — была явно исключена из рамок аудита.

Ландшафт угроз в индустрии изменился. В 2021 году проблемы с округлением и арифметикой не считались значительной категорией риска. К 2025 году ошибки округления стали второй по частоте использования уязвимостью в DeFi, уступая лишь краже закрытых ключей. Стандарты аудита не поспевали за реальностью.

Certora, проводившая формальную верификацию Balancer V3, позже признала, что их свойства верификации для V2 «не ограничивали взаимосвязь между отдельными обменами или поведением округления». Свойства гарантировали платежеспособность на высоком уровне, но упускали сценарии, в которых итеративные операции могли систематически накапливать выгоду за счет смещения при округлении.

Закономерность, а не аномалия

Эксплойт Balancer не возник на пустом месте. Атаки на точность округления имеют давнюю историю в DeFi:

  • Hundred Finance (2023): Злоумышленники манипулировали обменным курсом в контракте hWBTC путем пожертвования WBTC, используя ошибку округления в функции redeemUnderlying для вывода несоразмерных сумм.

  • Raft Finance (2023): Атака с использованием мгновенного займа (flash loan) задействовала потерю точности в протоколе стейблкоинов, что привело к краже 3,6 миллиона долларов.

  • Форки Compound V2 (текущие): Пустые или почти пустые пулы ликвидности остаются уязвимыми, так как низкие значения totalSupply позволяют злоумышленникам завышать обменные курсы через атаки пожертвования, используя округление при целочисленном делении.

  • Собственный инцидент Balancer в 2023 году: Небольшой эксплойт на 2,1 миллиона долларов, связанный с округлением, был нацелен на аналогичные арифметические допущения — это был предупредительный сигнал, предвещавший катастрофический взлом в ноябре 2025 года.

Первопричина всегда одна и та же: в Solidity нет встроенной поддержки чисел с плавающей запятой. Каждая операция деления отсекает остаток, каждое умножение может привести к переполнению, а каждый шаг нормализации вносит потенциальную ошибку. Когда эти ошибки накапливаются в ходе итеративных операций — особенно в расчетах инвариантов AMM — результаты могут быть разрушительными.

Почему аудиты продолжают пропускать ошибки округления

Традиционные аудиты смарт-контрактов фокусируются на логических ошибках, контроле доступа, повторном входе (reentrancy) и манипуляциях с оракулами. Ошибки округления требуют принципиально иного подхода:

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

Они зависят от контекста. Одно и то же поведение округления может быть безвредным в одной конфигурации пула и эксплуатируемым в другой. Trail of Bits не смогли подтвердить проблему в Linear Pools, потому что специфические условия для эксплойта отсутствовали в этом типе пула.

Они ускользают от статического анализа. Автоматизированные инструменты проверяют известные паттерны уязвимостей. Эксплуатация округления требует понимания математической связи между итеративными операциями и инвариантами пула — то, что требует глубокой экспертизы в предметной области и тестирования на основе свойств (property-based testing).

Формальная верификация помогает — но только с правильными свойствами. Верификация V3 от Certora включала критическое свойство, которого не хватало в V2: swappingBackAndForth, которое проверяет, что обмен токенов из A в B и обратно не приводит к чистой прибыли. Это одно правило могло бы предотвратить эксплойт Balancer V2. Урок: верификация сильна лишь настолько, насколько сильны проверяемые ею свойства.

Что изменилось после эксплойта

Пересмотр безопасности Balancer V3

Balancer V3, который не пострадал от эксплойта, прошел тщательную переоценку в сотрудничестве с Certora. Архитектура V3 устраняет конкретную уязвимость округления за счет:

  • Переработанной логики масштабирования, которая обрабатывает нецелочисленные коэффициенты без потери точности
  • Формальной верификации со свойствами, специально нацеленными на инварианты обратных свопов (roundtrip swap)
  • Явного принудительного выбора направления округления во всех арифметических операциях

Влияние на всю индустрию

Эксплойт ускорил несколько тенденций в области безопасности DeFi:

  • Проверки во время выполнения (Runtime enforcement) приобрели популярность как дополнение к аудитам. a16z crypto опубликовала исследование об использовании проверок во время выполнения для обнаружения числовых аномалий в процессе исполнения транзакции — это позволяет пресекать эксплойты в реальном времени, а не полагаться исключительно на анализ перед развертыванием.

  • Тестирование с учетом округления стало стандартным требованием к аудиту. Ведущие фирмы теперь включают фаззинг на основе свойств, специально нацеленный на накопление итеративных ошибок округления.

  • Фреймворки Safe Harbor, такие как BIP-726 от Balancer, доказали свою ценность, обеспечивая правовую защиту для «белых хакеров» (whitehats), чтобы они могли быстро восстановить средства без страха судебного преследования.

Глубокий урок

Эксплойт Balancer обнажил неудобную правду о безопасности DeFi: самые опасные баги — не те, что выглядят драматично. Атаки типа reentrancy хорошо изучены. Против манипуляций с flash loan выработана защита. Но разработчик, пишущий // ожидается, что влияние этого округления будет минимальным и идущий дальше — вот та самая уязвимость, которая проскальзывает сквозь все уровни защиты.

Поскольку протоколы DeFi управляют заблокированными средствами (TVL) на сумму более 100 миллиардов долларов, маржа для «ожидаемого минимума» равна нулю. Ошибка округления, теряющая 1 wei за операцию, превращается в эксплойт на 128 миллионов долларов, когда злоумышленник может выполнить 65 операций в одном вызове конструктора.

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


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