【英語の長文ツイート】Balancer V2のハッキング事件を徹底解説:脆弱性の仕組み、攻撃の手順、そして得られた教訓
Chainfeeds ガイド:
攻撃者は、精度損失の効果を最大化するために、イテレーション回数や入力金額などのパラメータを意図的に設定しました。
出典:
著者:
BlockSec
見解:
BlockSec:2025年11月3日、Balancer V2のComposable Stable PoolおよびそのForkに基づく複数のオンチェーンプロジェクトが、クロスチェーン協調攻撃を受け、総損失は1.25億ドルを超えました。BlockSecは最初に警告を発し、その後初期分析を公開しました。これは非常に複雑な攻撃です。私たちの調査によると、根本原因は不変式計算における精度損失にあり、精度損失を利用して価格操作を引き起こし、BPT(Balancer Pool Token)の価格に影響を与えました。攻撃者は単一のbatchSwap操作を利用し、特定のStable Poolから利益を得ました。影響を受けたコンポーネントはBalancer V2のComposable Stable Poolです。この種のプールは、1:1に近い交換比率を維持することが期待される資産向けに設計されており、最小限のスリッページで大規模な取引が可能で、同種または関連資産の資本効率を大幅に向上させます。各プールには独自のBPTがあり、その価格は次のように近似的に表現できます:BPT価格 = D / totalSupply、ここでDはStable Mathにおける不変式であり、プールの仮想総価値を表します。この式から分かるように、Dが数学的に小さくなると(実際の資金が失われていなくても)、BPTの価格はより低くなります。Balancer V2はbatchSwap()関数を提供しており、Vault内で複数のSwapを実行できます。SwapRequestにはGIVEN_INとGIVEN_OUTの2つのモードがあります。GIVEN_OUTモードでは、呼び出し元が期待する出力量を指定し、プールが必要な入力量を計算します。Stable Poolでは、必要な入力量amountInを計算する際、不変式の式に基づいて多項式方程式を解く必要があり、これらの計算は一括してUpscalingとDownscalingが行われます。理論的には両者は逆操作ですが、実装上は方向によって丸め方が異なります:アップスケーリングは常に切り捨て(mulDown)を使用し、ダウンスケーリングは切り上げまたは切り捨て(divUp / divDown)のいずれかを使用します。この不一致が攻撃の余地を残しました。脆弱性の根本は、BaseGeneralPool._swapGivenOut()でswapRequest.amountをUpscalingする際に切り捨てを採用したことにあります。切り捨てられた値がamountOutとして_onSwapGivenOut()の入力に使われ、最終的に計算されたamountInが実際の必要量よりも少なくなり、丸め方向は本来プロトコルに有利であるべき設計原則に反しています。(wstETH / rETH / cbETH)などのプールでは、攻撃者はより少ない入力資産でより多くの別の資産を交換でき、不変式Dを下げ、BPT価格を押し下げることができます。攻撃者は2段階の攻撃を実行しました。第1段階では単一トランザクションでコア攻撃ロジックを完了しますが、すぐには利益を得ません。第2段階で個別のトランザクションにより利益を引き出します。第1段階はパラメータ計算とbatch swapの2ステップに分かれます。Arbitrumチェーン上の攻撃トランザクション(TX: 0x7da32e…55773)を例にすると、攻撃者はまずプール内のパラメータ(scaling factors、A(増幅係数)、BPTレート、swap feeなど)を取得し、trickAmtを計算し、補助コントラクトをデプロイしてシミュレーションを行います。攻撃者はオフライン計算とオンチェーンシミュレーションを組み合わせて、次のswapのパラメータ(イテレーション回数や各回の入出力値)を正確に調整しました。イテレーションでは3ステップのswapを実行します:第1ステップでターゲットトークンの数量をtrickAmt + 1まで押し上げ、第2ステップでさらにターゲットトークンをswapし、この時に_upscale()の切り捨てが発動します。第3ステップでは逆方向のswapを行い、プール内残高を「上位2桁を切り捨て」た後に再度交換します。例えば324,816 → 320,000。一部の場合、StableSwapの数学的解法にNewton–Raphson法を使用しているため失敗し、攻撃者は2回のフォールバックとして元の値の9/10で再試行する準備をしていました。攻撃発生後、Balancerは一部の仕組みにより停止できず、攻撃の影響が拡大し、その後複数チェーンで模倣・コピー攻撃が発生し、総損失は1.25億ドルを超えました。この事件は、分散型プロトコルにおける4つの重要な問題を明らかにしました:不一致な丸めメカニズム、進化し続ける攻撃手法、停止できないことによる損失拡大、初期化や運用状態のリアルタイム監視の欠如。アップスケーリングは切り捨てのみ許可され、ダウンスケーリングは両方向の丸めが許可されるというこの非対称性は、極端なパラメータ設定下で利用可能な精度損失として蓄積されます。本来プロトコルに有利であるべき丸め方向が、この場合プロトコルの利益を損なう結果となりました。攻撃者は2段階手法を採用し、第1段階で攻撃を実行しても帳簿上は利益がなく、第2段階で個別に出金し、オンチェーン監視モデルを回避しました。攻撃の各ステップはオフチェーンとオンチェーンのシミュレーションを組み合わせており、補助コントラクトはBalancerのStableMath実装を再利用し、エラーメッセージまで一致させています。攻撃発生後、複数チェーンで追随があり、多くのForkプロジェクトも影響を受けました。これは、Stable Mathと丸めロジックが一致していれば、脆弱性がエコシステムを超えて伝播することを示しています。この事件は、DeFiプロトコルにはより高精度な数学的計算、より厳格な丸め検証と疑わしいパスのシミュレーション防止メカニズム、そして異常時の緊急停止能力が必要であることを示しています。【原文は英語】
免責事項:本記事の内容はあくまでも筆者の意見を反映したものであり、いかなる立場においても当プラットフォームを代表するものではありません。また、本記事は投資判断の参考となることを目的としたものではありません。
こちらもいかがですか?
千億ドル規模の関税訴訟が開廷、暗号資産市場が息を呑んで注視

ビットコインが10万ドルを下回る:ブルマーケットが正式に終了し、市場は「穏やかなベア」フェーズに突入
ビットコインは短期保有者のコスト基準(112,500ドル)を下回り、10万ドル付近まで下落し、需要が減少し、強気相場は終了しました。市場は緩やかな弱気相場にあり、長期保有者は引き続き売却し、機関投資家の資金も流出しています。デリバティブ市場ではレバレッジ解消が進み、オプション市場では防御的な姿勢が強まっています。

100%勝率の神話が崩壊:なぜクジラはこの津波で沈んだのか?

ウォール街の思惑:5億ドルでRippleを買う理由は何か?

