Aave CoWプロトコルの出来事で50M USDTが35K AAVEと交換される

iconOdaily
共有
Share IconShare IconShare IconShare IconShare IconShare IconCopy
AI summary icon概要

expand icon
2026年3月12日、ユーザーが5,040万USDTを35,900AAVEに交換した後、Aave CoWのプロトコル更新が明らかになりました。この取引は、不適切なルーティングパスにより、流動性が低いSushiSwapプールを枯渇させました。オンチェーンのニュースによると、CoWプロトコルのルーティングロジックとAaveのフロントエンドがこの取引をブロックできませんでした。経済的な妥当性チェックが行われず、取引は許可されました。

本文来自:@Ehsan1579

編集|Odaily 星球日报(@OdailyChina);翻訳| Ethan(@ethanzhang_web3

イベントのタイトルだけを見ると、おそらく脆弱性を悪用した攻撃だと誤解されるでしょう。

イベントの核心は、5040万ドル相当のUSDTを、たった3万5900ドル相当のAAVEに交換したことです。

この出来事を初めて耳にしたとき、私は本当に驚きました。そのため、私はこの出来事全体を徹底的に検証しました:取引の追跡、ソルバーパス、コントラクト呼び出し、過去の準備高、決済データ、アダプタープロセス、Aaveインターフェースコード、CoWスイープローンSDK、および报价が「妥当」かどうかを判断するルーティングコード。

これはハッキング攻撃ではありません。Aaveコアプロトコルに不具合はありません。CoW決済に不具合はありません。Uniswapに不具合はありません。SushiSwapに不具合はありません。取引は有効であり、署名も有効であり、すべての契約はコード通りに厳密に実行されました。しかし、経済的価値のほぼすべてが、許可されたルートが極めて馬鹿げていたために破壊されました。

ブロックチェーン自体に問題はなく、ルーティングに問題がありました。

私は、この出来事を単なる「ユーザー操作ミス」と軽視することは、客観的かつ厳密な姿勢とは言えないと思います。確かにユーザーは注文に署名しましたが、ソフトウェアシステム全体が、約5000万ドルの抵当物を切り替える操作を、报价・署名・ルーティング計画から最終実行まで、わずか331枚のAAVEしか保有していない低流動性プールに向けた一連のプロセスを許容したのは異常です。これは本来絶対に起こるべきではなかった事象であり、少なくとも決済段階に入る前に、システムが強制的にブロックすべきでした。

取引のコア情報のトレーサビリティ

本次異常取引ハッシュは:0x9fa9feab3c1989a33424728c23e6de07a40a26a98ff7ff5139f3492ce430801fで、2026年3月12日にイーサリアムメインネットのブロック高24643151で確認され、取引インデックスは1、ガス消費量は3780570単位であり、取引の実行は成功しました。注文の所有ウォレットアドレスは0x98b9で始まり、実際の取引を実行したソルバー(取引送信者)アドレスは0x3980で始まり、CoW競争データではtsolverとしてマークされています。

まず理解すべきは、これは単なるウォレットレベルでのUSDTからAAVEへの交換ではないということです。売却されるトークンはaEthUSDTであり、これはAaveプラットフォーム上の生息USDT預金証憑です。購入されるトークンはaEthAAVEであり、これはAaveプラットフォーム上の生息AAVE預金証憑です。したがって、これは実際にはCoWプロトコルの決済システムとそのスイフトローンアダプタープロセスを介したAaveの抵当物のローテーションです。

取引前、このウォレットは約50,432,693.075254個のaEthUSDTと0個のaEthAAVEを保有していました。取引後、残高は4.980399個のaEthUSDTのみとなり、327.241335505966487788個のaEthAAVEを受け取りました。実際には、このウォレットはほぼすべてのポジションを売却しました。

メタデータは、ルートが実行される前にすでに「有毒」であることを明確に示しています。注文はaave-v3-interface-collateral-swapプロセスから来ています。CoWのAPIはこれを署名済みの売却注文として表示しており、アプリケーションメタデータは121ベーシスポイントのスマートスリッページを使用したマーケットスタイルの抵当物交換とマークしています。署名された売却額は50,432,688.41618個のaEthUSDTです。署名された最低購入額は324.949260918413591035個のaEthAAVEです。実際の決済では327.241335505966487788個のaEthAAVEが支払われました。

これは非常に重要な詳細です。この注文は、数千枚のAAVEを獲得することを想定しておらず、途中で何らかの理由で破棄されたわけではありません。この注文は、当初から300枚以上のAAVEという結果を前提として構築されていました。

ルートの崩壊の完全なチェーン

トレードトレースを開始すると、プロセスは残酷なほど直截的になる。

トップレベルの資金移動は、CoWプロトコルに基づく、0x9008で始まるGPv2Settlement決済契約を主要な基盤としています。まず、0x60bfで始まるHooksTrampoline契約がaEthUSDTの承認処理を完了させ、CoWキーパーリレーが個別の取引承認なしにユーザー資産を引き出せるようにします。次に、0xc92eで始まるGPv2VaultRelayer契約が、ユーザーのウォレットから50432688.41618枚のaEthUSDTを引き出し、決済プロセスに移行します。この段階までの一連の操作はすべて正常なロジックに従っています。

決済契約はその後、aEthUSDTの操作権限を0xd524で始まる非オープンソース補助契約に付与し、関数セレクタ0x494b3137を介して呼び出しを開始する。この補助契約は、さらに実行権限を0x699cで始まる非オープンソース実行契約に移譲し、これにより異常な取引ルーティングの全容が明確に露呈した。

最初の有効な呼び出しは、0x87870で始まるAave資金プールコントラクトを対象とし、withdraw関数(セレクタ0x69328dec)を通じてaEthUSDTを焼却し、基盤となるネイティブUSDTを引き出します。その後、ルーティングが0x4e68で始まるUniswap V3のUSDT/WETH深度取引プールに移動し、50432688.41618枚のUSDTをすべて17957.810805702142342238枚のWETHに交換します。

この段階の取引は完全に正常でした:交換レートは約2808.4 USDT対1 WETHで、当時の市場状況に合っており、流動性不足の問題や計算誤差はなく、最初の取引経路に異常は一切ありませんでした。

問題は二回目のジャンプにあり、流動性準備金を見れば、残りの物語は避けられない。

エグゼキューターが17957.810805702142342238枚のWETHを取得後、全額を0xd75ea151a61d06868e31f8988d28dfe5e9df57b4アドレスのSushiSwap V2 AAVE/WETH取引プールに転送します。

異常な取引が発生する直前(ブロック高 24643150)のヒストリカルな流動性準備データを確認したところ、プールには以下のみが保有されていました:

331.631982538108027323 枚 AAVE、17.653276196397688066 枚 WETH

これはデータ入力ミスではなく、鉄の事実です。

この取引ルートでは、約17,958枚のWETHが、WETHの準備高がわずか17.65枚、対応するAAVEの総在庫が331.63枚しかないマイクロ取引プールに投入され、投入されたWETHの量はプール内のWETH準備高の約1,017倍です。

これは「スリッページが高すぎる」や「流動性がやや薄い」といった一般的な問題ではなく、自身の規模の数千倍を超える巨額取引を、極めて小さな定数積AMMプールに強制的に引き受けるという、極めて馬鹿げた成行注文の実行経路です。

AMM トレーディングプールは定められたアルゴリズムに従って操作を実行し、プール内の AAVE 準備金をほぼすべて使い果たしました。

SushiSwap 取引ペアでコア Swap 交換イベントが発生:エグゼキューターが 17957.810805702142342238 枚の WETH を入金し、返却されたのは 331.305315608938235428 枚の AAVE だけでした。取引完了後、このプールの残存流動性は約:

0.326666929169791895 枚 AAVE、17975.464081898540030304 枚 WETH

要するに、プール内のAAVEの約99.9%が1回の取引で枯渇しました。

取引前の準備金に基づき、プールに内包されるAAVEの価格は約149.50ドルです。ユーザーの実際の執行価格は、1 AAVEに対して約154,114.66 USDTでした。これは取引前のスポット価格と比べて1000倍以上異なります。

その後、これらのAAVEは、選択子0x617ba037(supply(address,uint256,address,uint16))を使用してAave資金プールに供給され、結果として新規発行されたaEthAAVEが決済契約に戻されます。決済契約は最終的に、ユーザーに327.241335505966487788個のaEthAAVEを送金しました。ユーザーが支払った額に対する超過分として、約4.06398010297174764個のaEthAAVEが決済契約に留まりました。

したがって、決済は、良い実行結果を悪い結果に歪めることはありません。それは、ルーティングがすでに生成した結果を最終的に確定するだけです。

これは重要なポイントであり、明確に述べる価値があります:災害的な結果は、ルーティング実行前にすでに「予め設定」されています。

ルートに埋め込まれた補助契約呼び出しデータにおいて、購入側の目標金額は約331.272185078031026739枚、ユーザー署名で約束された最低購入金額は324.949260918413591035枚、実際の決済金額は327.241335505966487788枚であり、すべてのコア数値は決済前に300枚程度のAAVE規模でロックされています。

このルートは元々悪いものです。

どこに脆弱性がありますか?

答えは:システムの各検証層が、エラーの次元を確認しています。

すべてのレイヤーは、取引が実行可能かどうか、署名が有効かどうか、金額がゼロでないかどうかを確認するのみで、経済的な観点から取引ルーティングの妥当性を検証するコアレイヤーのチェックがほとんど行われていないことが、メカニズムの崩壊の根本的な原因である。

Aave インターフェースアダプターの価格パスにおけるコードの欠陥

最初の明確なコードの異常は、AaveインターフェースのCoWアダプター报价プロセスに現れる:报价リクエスト時にアダプター固有のアプリケーションデータを付与するために使用されていた関数が、直接強制的に無効化された。

出典:rates.helpers.ts:93およびadapters.helpers.ts:194

これは、AaveのインターフェースがCoWにクォートをリクエストする際に、実際の注文を発行する際に付与されるスイフトローンとフックのメタデータを付けていないことを意味します。言い換えれば、クォートされたものは、実際に実行されるものと完全には一致していません。コードのコメントには、このヘルパーファンクションの目的がアダプターのクォートをより正確にするためであると記されていますが、この関数は強制的に無効化されています。

CoW报价竞争逻辑的合理性判定过于薄弱(核心漏洞)

二番目で最も深刻な問題は、CoWプロトコルの入札競争ロジックにあります。そのパブリックサービスコードでは、入札のガス料が正で、出力金額がゼロでなければ、「適切な入札」と判定されます。

出典:quote.rs:31

八桁の注文を処理するルーティングシステムにとって、これは驚くほど弱い「妥当性」の定義である。

システムは価格健全性検証のためにオラクルに接続されておらず、「报价が现货価格の500倍以上ずれる」ことをブロックするメカニズムがなく、「ルーティングが流動性プールを完全に枯渇させる」リスクを判定する機能もなく、「最終ホップの流動性と注文規模が著しく不一致」であることを警告する機能もない。ソルバーが実行可能でゼロ以外のルーティング案を返せば、システムはそれを受け入れる——これが今回のイベントの核心的な脆弱性である。

Uniswap V2の流動性モデリングロジックの欠陥

三番目の問題は、Uniswap V2スタイルの流動性プールのモデリング方法にある:コードは標準的な定数積アルゴリズムのみを採用し、ゼロ準備高、数値アンダーフロー、準備高オーバーフローなどの数学的に不可能な状況のみを拒否し、経済的な妥当性の検証は行わない。

出典:pool_fetching.rs:118およびpool_fetching.rs:153

このコードは、流動性プールの規模が対応するルート取引を処理できるかどうかを判断せず、交換操作が数学的に有効かどうかのみを確認します。したがって、AAVEを331枚しか保有していないマイクロプールでも、定積アルゴリズムがゼロでない結果を計算できるため、17,957枚のWETHの購入リクエストを処理できる有効な場所と判定されますが、この結果は資産に壊滅的な損失をもたらすことを完全に無視しています。

スイフトローンSDKと注文検証メカニズムの二度目の脆弱性

その後、フラッシュローンSDKは、この無効な报价をそのまま注文とフックの実行ペイロードに固定し、追加のリスクブロッキングを行いませんでした。

続けて:

出典:index.js:484およびindex.js:591

これが私がこのルートを「最初から壊れている」と言い続ける理由です。アダプタ層は実行時に新しい不良金額を「発見」しているのではなく、既に报价された不良金額をフックデータと確定されたインスタンスアドレスにシリアライズしています。悪い报价が存在すれば、残りのメカニズムはそれを忠実に伝達し続けます。

CoWの注文検証ロジックでも、実際に流動性に対して报价が不適切かどうかをチェックせず、报价時の市場価格を超えていないかだけを確認するため、ユーザーは真正に保護されていません。

出典:order_validation.rs:694

これは一貫性チェックです。报价自体が無意味であっても、注文は承認されます。

UIフロントエンドの警告メカニズムは形骸化している

Aaveのインターフェースには確かに高価格ショック警告がありますが、これは硬性のサーキットブレーカーではありません。価値の損失が20%を超えると、確認チェックボックスになります。

ユーザーがチェックボックスをオンにすると、障害が解除されます:

出典:helpers.ts:24およびHighPriceImpactWarning.tsx:35

したがって、この取引がほぼすべての資産価値を清算するものであっても、システムはそれをユーザーの確認を要する操作と判定するだけで、システムが強制的に拒否すべき高リスク取引とは見なさず、警告メカニズムはリスクのブロック機能を完全に失っています。

以上のすべてのメカニズムが機能しなかった以上、「これはユーザーの馬鹿げた行動にすぎない」という適当な結論には同意できません。ユーザーは確かに署名を完了しましたが、ソフトウェアシステムにはこの災難を防ぐ機会が数多くありました。しかし、各層では「ゼロでなく、実行可能、署名済み」という基本的な検証のみを行い、そのまま許可してしまいました。その結果、悲劇が起こりました。

ルートは改ざんされていません

このステップは極めて重要であり、多数の誤った推測を排除します。aave-v3-interface-collateral-swap に対応する Aave 公式インターフェースのフローでは、useSwapOrderAmounts.ts ファイルの 139 行目で、报价、ネットワーク手数料、パートナー手数料、スナップローン手数料を組み合わせて、スリッページ調整後の購入額を計算し、331 行目でそれを buyAmountBigInt 値に変換します。その後、CollateralSwapActionsViaCoWAdapters.tsx ファイルの 191 行目で、この金額に正確な署名が行われます。

後続のアダプタ契約は、AaveV3BaseAdapter.sol ファイルの141行目で、署名注文フィールドと保存された値が完全に一致することを検証します。CoW 証済契約は、GPv2Settlement.sol ファイルの337行目で、署名によって定められた制限ルールを強制的に適用します。したがって、オンチェーン実行結果は署名注文で許可された範囲を超えておらず、ユーザーが実際に受け取った資産は、署名で定められた最低制限額よりも高くなっています。

これは、災害が決済プロセス中ではなく、決済前に発生したことを十分に示しており、ルーティングの致命的な欠陥はすでに結末を決定づけていた。

失われた価値はどこに行ったのか?

同一ブロック内の次なる取引(ハッシュ 0x45388b0f で始まる)は、破壊された SushiSwap AAVE/WETH プールに対してランアラウンドアービトラージを実行しました。異常な取引は大量の WETH をプールに注入し、ほぼすべての AAVE を引き抜いた後、アービトラージャーは即座に AAVE をプールに再販売し、流動性の不均衡から生じる過剰価値を収益化しました。

本次のランニングアービトラージでは、約17929.770158685933枚のWETHが抽出され、その後、そのブロックビルダーに約13087.73枚のETHを支払い、アービトラージ実行アドレスに約4824.31枚のETHを支払いました。

ユーザーの損失した全経済的価値は、ほぼ瞬時に同一ブロック内のMEVアービトラージ収益とブロック構築者収益に変換される。

また、ブロックレベルのタイムスタンプを確認することで、この取引前に誰もがSushiSwapのプールを悪意を持って操作し、ユーザーを罠にかけたことはないことが確認できます。AAVE/WETH取引対は、今回の異常取引(取引インデックス1)で初めて触れられました。直後の次の取引(取引インデックス2)は、この取引によって生じた価格の歪みを最初に反転して利益を確定しました。取引インデックス3も、市場が修正される過程でこの取引対に触れています。タイムラインは明確に、今回の異常取引が極端な価格歪みを生み出し、その後の取引がその歪みから直接利益を獲得したことを裏付けています。

では、誰のせいですか?

Aave V3 コアプロトコルがクラッシュしたかどうかを尋ねる場合、答えはいいえです。Aave ファンドは指示に従って完全に動作し、USDT の引き出しとAAVEの預入プロセスを正常に完了しました。

CoWのGPv2Settlement契約がクラッシュしたかどうかを尋ねる場合、答えはいいえです。決済は有効な署名注文を強制的に実行し、署名の最低限度を超える金額を支払いました。

Uniswap V3 または SushiSwap の取引対契約がクラッシュしたかどうかを尋ねる場合、答えはどちらもノーです。両方のトレーディングプールは、それぞれのアルゴリズムルールに従って取引価格を決定しています。

より上位のルーティングおよびリスク管理層で、真正的なシステム全体の失敗が発生しました:

主要な責任者はCoWプロトコルのルーティング、クォート、ソルバーモジュールです。このシステムは「適切なルーティング」の判定基準が非常に甘く、千万ドル規模の大口注文が、ルーティングが実行可能でゼロでなければ、経済的に極めて不適切であることを無視して、微小で流動性の低いプールに流向することを許可しています。

補助的責任者はAaveのフロントエンドインターフェースであり、リクエストアダプターの报价時にフックに関連付けられたアプリケーションデータを付与せず、誤った結果をそのまま署名プロセスに渡しており、警告通知にのみ依存し、強制的な拒否メカニズムが存在しない。このような極めて大額の取引に対して、このようなリスク管理措置はリスクを防ぐのに全く不十分である。

これは取引ルーティングの品質とリスク管理ガードレールの極端な失敗であり、合法的かつコンプライアンスに準拠した抵当物のローテーション操作を、壊滅的な資産損失イベントに変えてしまった。

免責事項: 本ページの情報はサードパーティからのものであり、必ずしもKuCoinの見解や意見を反映しているわけではありません。この内容は一般的な情報提供のみを目的として提供されており、いかなる種類の表明や保証もなく、金融または投資助言として解釈されるものでもありません。KuCoinは誤記や脱落、またはこの情報の使用に起因するいかなる結果に対しても責任を負いません。 デジタル資産への投資にはリスクが伴います。商品のリスクとリスク許容度をご自身の財務状況に基づいて慎重に評価してください。詳しくは利用規約およびリスク開示を参照してください。