lang
简体中文
繁體中文
English
Tiếng Việt
한국어
日本語
ภาษาไทย
Türkçe
ホーム
OPRR
速報
深堀り
イベント
BlockBeats Pro
もっと見る
資金調達情報
特集
オンチェーン生態系
用語
ポッドキャスト
データ
BTC
$96,000
5.73%
ETH
$3,521.91
3.97%
HTX
$0.{5}2273
5.23%
SOL
$198.17
3.05%

技術分析会社Balancerが1億2000万ドルの盗難被害に遭う。脆弱性はどこにあったのか?

この記事を読むのに必要な時間は 12 分
この攻撃の主な問題は、小さなトランザクションを処理するプロトコルのロジックにあります。
原題:「Balancer、1億2000万ドルの盗難に遭う:脆弱性分析」
原文出典:ExVul Security


はじめに


2025年11月3日、Balancerプロトコルは、ArbitrumやEthereumを含む複数のパブリックチェーンでハッカー攻撃を受け、1億2000万ドルの資産が失われました。攻撃の中核は、精度の低下と不変操作という二重の脆弱性に起因していました。


Chainlinkのインフラストラクチャは、長年にわたりWeb3分野で最高水準を維持しており、X Layerが開発者に機関レベルのツールを提供するには当然の選択でした。


この攻撃における主要な問題は、プロトコルが小額トランザクションを処理するロジックにあります。ユーザーが少額の取引を行うと、プロトコルは _upscaleArray 関数を呼び出し、mulDown を使って値を切り捨てます。


取引における残高と入力金額の両方が特定の切り捨て境界(例えば、8~9 wei の範囲)内にある場合、大きな相対精度誤差が発生します。この精度誤差はプロトコルの不変値 D の計算に伝播し、D が異常に減少します。この D の変化は、Balancer プロトコルにおける BPT(Balancer Pool Token)の価格を直接引き下げます。ハッカーはこの低下した BPT 価格を悪用し、事前に設計された取引パスを通じて裁定取引を行い、最終的に巨額の資産損失をもたらす可能性があります。脆弱性悪用Tx: https://etherscan.io/tx/0x6ed07db1a9fe5c0794d44cd36081d6a6df103fab868cdd75d581e3bd23bc9742 資産移転Tx:


https://etherscan.io/tx/0xd155207261712c35fa3d472ed1e51bfcd816e616dd4f517fa5959836f5b48569


技術分析


攻撃エントリポイント


攻撃エントリポイントはBalancer: Vaultコントラクトであり、対応するエントリ関数はbatchSwap 関数は内部的に onSwap を呼び出してトークンのスワップを実行します。



関数のパラメータと制限から、いくつかの情報を得ることができます。


1. 攻撃者はこの関数を直接ではなく、Vault を介して呼び出す必要があります。


2. この関数は、スケーリング操作のスケーリング係数を取得するために、内部で _scalingFactors() を呼び出します。


3. スケーリング操作は、_swapGivenIn または _swapGivenOut に集中しています。


攻撃パターン分析 BPT 価格計算メカニズム Balancer の安定したプール モデルでは、**BPT 価格** は、ユーザーが受け取る BPT の数と、各 BPT が表す資産の数を決定する重要な基準となります。プールの交換計算において、**BPT 価格ベンチマーク** として機能する部分は **定数値 D** です。つまり、BPT 価格を操作するには D を操作する必要があります。D の計算プロセスを分析してみましょう。



上記のコードでは、D の計算プロセスはスケールされた残高配列に依存しています。つまり、これらの残高の精度を変更する操作が必要であり、その結果、D が誤って計算されます。


精度低下の根本原因



スケーリング操作:



上記のように、_upscaleArray を使用する場合、残高が非常に小さい場合 (例: 8-9 wei)、mulDown の切り捨てによって精度が大幅に低下します。



詳細な攻撃フロー


ステージ 1: 切り捨て境界への調整



ステージ 2: 精度の低下をトリガー (コア脆弱性)



ステージ 3: 低下した BPT 価格から利益を得る



上記のように、攻撃者は **バッチ スワップ** を使用して 1 つのトランザクションで複数のスワップを実行します。


1. 最初のスワップ: BPT → cbETH (残高調整)


2. 2 番目のスワップ: wstETH

(8) → cbETH (精度損失のトリガー) 3. 3 番目のスワップ: 原資産 → BPT (利益) これらのスワップはすべて同じバッチ スワップ トランザクション内にあり、同じ残高ステータスを共有していますが、各スワップは _upscaleArray を呼び出して残高配列を変更します。コールバック メカニズムの欠如 メイン プロセスは Vault によって開始されるので、どのようにして精度損失の蓄積につながるのでしょうか。答えは、残高配列の受け渡しメカニズムにあります。 上記のコードを分析すると、Vault は onSwap が呼び出されるたびに新しい currentBalances 配列を作成しますが、Batch Swap では次のようになります。


1. 最初のスワップ後、バランスが更新されます (ただし、精度の低下により、更新された値は不正確になる可能性があります)。


2. 2 回目のスワップは、最初のスワップの結果に基づいて計算を続行します。


3. 精度の低下が蓄積され、最終的に不変値 D が大幅に小さくなります。


主な問題:



要約


Balancer に対するこの攻撃は、次のように要約できます。


1. スケーリング関数は切り捨てを使用します: _upscaleArray はスケーリングに mulDown を使用しており、残高が非常に小さい場合 (例: 8-9 wei)、相対的な精度が大幅に低下します。

2. 不変値の計算は精度に敏感です: 不変値 D の計算は、スケーリングされた残高配列に依存しています。精度の低下は D の計算に直接渡されるため、D が小さくなります。 3. 不変値の変更の検証不足: スワッププロセス中に、不変値 D の変更が妥当な範囲内であるかどうかが検証されなかったため、攻撃者は精度の低下を繰り返し悪用して BPT の価格を下げることができました。 4. バッチスワップでの精度の低下の蓄積: 同じバッチスワップで、複数のスワップによる精度の低下が蓄積され、最終的には莫大な経済的損失に増幅されます。精度の低下 + 検証不足という 2 つの問題と、攻撃者が境界条件を注意深く設計したことが相まって、この損失が発生しました。この記事は投稿であり、BlockBeats の見解を代表するものではありません。


BlockBeats の公式コミュニティに参加しよう:

Telegram 公式チャンネル:https://t.me/theblockbeats

Telegram 交流グループ:https://t.me/BlockBeats_App

Twitter 公式アカウント:https://twitter.com/BlockBeatsAsia

ライブラリを選択
新しいライブラリを追加
キャンセル
完了
新しいライブラリを追加
自分のみが閲覧可
公開
保存
訂正/通報
送信