Bitget App
Торгуйте разумнее
Купить криптоРынкиТорговляФьючерсыEarnWeb3ПлощадкаПодробнее
Торговля
Спот
Купить и продать криптовалюту
Маржа
Увеличивайте капитал и эффективность средств
Onchain
Безграничные возможности торговли.
Конвертация и блочная торговля
Конвертируйте криптовалюту в один клик без комиссий
Обзор
Launchhub
Получите преимущество заранее и начните побеждать
Скопировать
Копируйте элитного трейдера в один клик
Боты
Простой, быстрый и надежный торговый бот на базе ИИ
Торговля
Фьючерсы USDT-M
Фьючерсы с расчетами в USDT
Фьючерсы USDC-M
Фьючерсы с расчетами в USDC
Фьючерсы Coin-M
Фьючерсы с расчетами в криптовалютах
Обзор
Руководство по фьючерсам
Путь от новичка до профессионала в торговле фьючерсами
Акции по фьючерсам
Получайте щедрые вознаграждения
Bitget Earn
Продукты для легкого заработка
Simple Earn
Вносите и выводите средства в любое время, чтобы получать гибкий доход без риска
Ончейн-Earn
Получайте прибыль ежедневно, не рискуя основной суммой
Структурированный Earn
Надежные финансовые инновации, чтобы преодолеть рыночные колебания
VIP и Управление капиталом
Премиум-услуги для разумного управления капиталом
Займы
Гибкие условия заимствования с высокой защитой средств
Технический анализ: у Balancer украли 120 миллионов долларов, в чем была уязвимость?

Технический анализ: у Balancer украли 120 миллионов долларов, в чем была уязвимость?

BlockBeatsBlockBeats2025/11/04 06:24
Показать оригинал
Автор:BlockBeats

Ключевая проблема этой атаки заключалась в логике обработки мелких транзакций протоколом.

Оригинальное название: «Анализ уязвимости, приведшей к краже $120M с Balancer»
Источник: ExVul Security


Введение


3 ноября 2025 года протокол Balancer подвергся хакерской атаке на нескольких блокчейнах, включая Arbitrum и Ethereum, что привело к потере активов на сумму 120 миллионов долларов. Основная причина атаки заключалась в двойной уязвимости, связанной с потерей точности и манипуляцией инвариантом (Invariant).


Инфраструктура Chainlink уже долгое время поддерживает самые высокие стандарты в сфере Web3, поэтому X Layer естественным образом выбрал её для предоставления инструментов институционального уровня разработчикам.


Ключевая проблема этой атаки заключалась в логике обработки протоколом мелких транзакций. Когда пользователь совершает обмен на небольшую сумму, протокол вызывает функцию _upscaleArray, которая использует mulDown для округления чисел вниз. Если баланс и сумма ввода одновременно находятся на определённой границе округления (например, в диапазоне 8-9 wei), возникает значительная относительная ошибка точности.


Ошибка точности передаётся в процесс вычисления инварианта D, что приводит к аномальному уменьшению значения D. Изменение D напрямую снижает цену BPT (Balancer Pool Token) в протоколе Balancer. Хакер воспользовался этим заниженным курсом BPT, чтобы провести арбитраж по заранее спланированному маршруту транзакций, что в итоге привело к огромным финансовым потерям.


Эксплуатация уязвимости Tx:


Перемещение активов Tx:


Технический анализ


Точка входа атаки


Точкой входа для атаки стал контракт Balancer: Vault, а именно функция batchSwap, которая внутри вызывает onSwap для обмена токенов.


Технический анализ: у Balancer украли 120 миллионов долларов, в чем была уязвимость? image 0


Из параметров и ограничений функции можно сделать несколько выводов:


1. Атакующий должен вызвать эту функцию через Vault, прямой вызов невозможен.


2. Внутри функции вызывается _scalingFactors() для получения коэффициентов масштабирования.


3. Операции масштабирования сосредоточены в _swapGivenIn или _swapGivenOut.


Анализ модели атаки


Механизм расчёта цены BPT


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


Технический анализ: у Balancer украли 120 миллионов долларов, в чем была уязвимость? image 1


В расчётах обмена в пуле:


Технический анализ: у Balancer украли 120 миллионов долларов, в чем была уязвимость? image 2


Часть, служащая базой для цены BPT, — это инвариант D, то есть для манипуляции ценой BPT необходимо управлять D. Далее рассмотрим процесс вычисления D:


Технический анализ: у Balancer украли 120 миллионов долларов, в чем была уязвимость? image 3


В приведённом выше коде вычисление D зависит от массива balances после масштабирования. То есть требуется операция, изменяющая точность этих balances, чтобы привести к ошибке в расчёте D.


Корень потери точности


Технический анализ: у Balancer украли 120 миллионов долларов, в чем была уязвимость? image 4


Операция масштабирования:


Технический анализ: у Balancer украли 120 миллионов долларов, в чем была уязвимость? image 5


Как показано выше, при вызове _upscaleArray, если баланс очень мал (например, 8-9 wei), округление вниз через mulDown приводит к значительной потере точности.


Подробное описание процесса атаки


Этап 1: Подгонка к границе округления


Технический анализ: у Balancer украли 120 миллионов долларов, в чем была уязвимость? image 6


Этап 2: Провоцирование потери точности (основная уязвимость)


Технический анализ: у Balancer украли 120 миллионов долларов, в чем была уязвимость? image 7


Этап 3: Получение прибыли за счёт заниженной цены BPT


Технический анализ: у Balancer украли 120 миллионов долларов, в чем была уязвимость? image 8


Как показано выше, атакующий с помощью Batch Swap совершает несколько обменов в одной транзакции:


1. Первый обмен: BPT → cbETH (корректировка баланса)


2. Второй обмен: wstETH (8) → cbETH (провоцирование потери точности)


3. Третий обмен: базовый актив → BPT (получение прибыли)


Все эти обмены происходят в рамках одной batch swap транзакции, используя общее состояние баланса, однако при каждом обмене вызывается _upscaleArray для изменения массива balances.


Отсутствие механизма Callback


Основной процесс инициируется Vault. Как же накапливается потеря точности? Ответ — в механизме передачи массива balances.


Технический анализ: у Balancer украли 120 миллионов долларов, в чем была уязвимость? image 9


Анализируя приведённый выше код, видно, что хотя при каждом вызове onSwap Vault создаёт новый массив currentBalances, в Batch Swap:


1. После первого обмена баланс обновляется (но из-за потери точности обновлённое значение может быть неточным)


2. Второй обмен рассчитывается на основе результата первого


3. Потеря точности накапливается, в итоге инвариант D значительно уменьшается


Ключевая проблема:


Технический анализ: у Balancer украли 120 миллионов долларов, в чем была уязвимость? image 10


Заключение


Атака на Balancer произошла по следующим причинам:


1. Использование округления вниз в функции масштабирования: _upscaleArray использует mulDown для масштабирования, что при малых балансах (например, 8-9 wei) приводит к значительной относительной потере точности.


2. Чувствительность расчёта инварианта к точности: вычисление инварианта D зависит от массива balances после масштабирования, и потеря точности напрямую влияет на уменьшение D.


3. Отсутствие проверки изменений инварианта: в процессе обмена не проверяется, находится ли изменение инварианта D в допустимых пределах, что позволяет атакующему многократно использовать потерю точности для занижения цены BPT.


4. Накопление потери точности в Batch Swap: в рамках одной batch swap транзакции потери точности от нескольких обменов накапливаются, что в итоге приводит к огромным финансовым потерям.


Эти две проблемы — потеря точности и отсутствие проверки — в сочетании с тщательно продуманными граничными условиями со стороны атакующего привели к этим потерям.


0

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

PoolX: вносите активы и получайте новые токены.
APR до 12%. Аирдропы новых токенов.
Внести!

Вам также может понравиться

Bayes Market полностью обновлён

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

Chaincatcher2025/11/04 13:06
Bayes Market полностью обновлён

Заработали 50 миллионов долларов, снайперски торгуя альткоинами на DEX

За 1 год: реальная история стремительного обогащения — от 50 тысяч долларов до 50 миллионов долларов.

BlockBeats2025/11/04 13:06
Заработали 50 миллионов долларов, снайперски торгуя альткоинами на DEX

Период смены настроений: руководство по поиску возможностей на крипторынке

Видимость проекта, скорость транзакций и ранняя вера в него важнее, чем терпение.

BlockBeats2025/11/04 13:05
Период смены настроений: руководство по поиску возможностей на крипторынке