概要
2026年3月15日、攻撃者はVenus Protocol(BNB Chain)のCore PoolにおけるTHE(Thena)市場の供給上限を回避し、担保ポジションを本来の制限の3.67倍にまで膨張させ、借入資産を不正に引き出しました。初期の報道では総損失額は370万ドルと推定されていましたが、我々のオンチェーン分析によると、3回の不正引き出しトランザクション全体で総額577万ドルの価値が引き出され、215万ドルのプロトコル不良債権が発生しました[3]。
いくつかの分析[1, 2, 3]およびVenus自身の声明[5]では、供給上限の回避、寄付ベクター、資金の流れを含む攻撃メカニズムが既に解明されています。本稿ではそれらの発見を詳細に再検討せず、代わりに、貸付プロトコルが依存するリスク想定について、完全なオンチェーンデータが何を明らかにしているのか、そしてこのインシデントからDeFiコミュニティがどのような教訓を学べるのかに焦点を当てます。
2つのデータポイントは、より詳細な検討に値します。第一に、攻撃者の総損益:THEとvTHEの取得に9ヶ月かけて約916万ドルを費やし、Venusから577万ドルを引き出しましたが、攻撃者はオンチェーン上では415万ドルの赤字となっています。第二に、清算記録:254の異なるボットが8,048トランザクションにわたってポジションの解消を競いましたが、数百万ドルの市場深さしか持たない市場で5300万THEを売却できなかったため、依然として215万ドルの不良債権が発生しました。
これらのデータポイントは、DeFi貸付における一般的な想定、すなわち過剰担保化と競争的な清算市場がプロトコルを健全に保つという想定に疑問を投げかけます。このケースでは、ポジションは名目上3.67倍の過剰担保化がなされ、清算市場は活発に機能しました。しかし、担保に実質的な流動性が欠けていた場合、どちらも十分ではありませんでした。
背景
供給上限は、Compoundスタイルの貸付市場における標準的なリスク管理策です。これにより、特定の資産が担保として預けられる量を制限し、ボラティリティの高い、あるいは流動性の低いトークンへのプロトコルのエクスポージャーの上限を設定します。Venusは、THE市場のTHEに対して**1450万THE**の供給上限を設定しており、これはトークンのオンチェーン流動性の薄さを反映したものです。
供給上限の後ろには、さらに2つの安全層が存在します。オラクルベースの担保評価は、借り手が預け入れ資産に対していくら借りられるかを決定します。ポジションが過小担保化した場合、競争的な清算市場が介入することが期待されます:第三者のボットが割引価格で負債を返済し、担保を差し押さえることで、プロトコルを健全に保ちます。
この3層構造(エクスポージャー制限、評価、清算)は、ほとんどの貸付プロトコルのリスクフレームワークを形成します。VenusのTHEインシデントは、これら3層すべてを同時に試しました。そして、すべてが不十分であることが証明されました。続くセクションでは、各層がどのように順番に破られたかを追跡します。
攻撃
回避:寄付攻撃
ほとんどのCompoundフォークにおける供給上限は、ミントパス、すなわち上限をチェックしてからvTokensを発行する標準的な預け入れ関数のみを制約します。これらは、コントラクトアドレスに直接転送されたトークンを考慮していません。
攻撃者はこのギャップを悪用しました。vTHEコントラクトへの直接的なERC-20転送は、新しいvTokensをミントせずに、コントラクトの基盤となるトークン残高を増加させます。Compoundスタイルの会計では、これによりvTokensと基盤資産との間のexchangeRateが膨張します。既存のvToken保有者は皆利益を得ます:彼らのvTokensは、より多くの基盤トークンに対する請求権を表すようになり、プロトコルから見た実効担保価値が増加します。
この「寄付攻撃」は、Compoundフォークにおける既知の脆弱性クラスです。供給上限をミントパスでのみ強制するプロトコルはすべて、この脆弱性の影響を受けます。
準備(2025年6月~2026年3月)
攻撃は3月15日に始まったわけではありません。攻撃者は、資金調達アドレス(0x7a79...f234)を通じてTornado Cash経由で7,400ETHを受け取り、このETHをAaveに担保として預け入れ、992万ドルのステーブルコイン(USDT、DAI、USDC)を借入しました。これらの資金は、2025年6月からTHEを購入するために複数のウォレットに分配され、攻撃当日の午前までに合計で**供給上限の84%(約1220万THE)**に達するポジションを徐々に構築しました。

この9ヶ月間の準備期間は、常にオンチェーンで確認可能でした。供給上限に近づく単一エンティティの保有量の増加は、従来のトランザクションレベルの監視では見逃してしまう、検知可能なリスクシグナルでした。
攻撃者は、すべて単一のTornado Cash資金調達元に追跡可能な複数のアドレスを通じて活動しました。
| アドレス | 役割 |
|---|---|
| 0x7a79...f234 | 資金調達:Tornado Cashから7,400ETHを受け取り、Aaveに預け入れ、992万ドルのステーブルコインを借入 |
| 0x43c7...2f82 | 攻撃者EOA |
| 0x737b...a619 | 攻撃コントラクト:transferFrom()を通じて約3610万THEを寄付、158万USDCを担保として事前供給、寄付のために463万THEを借入、寄付バイパスを実行、借入資産を受領。12:04 UTCに清算 |
| 0x1a35...6231 | 攻撃者ウォレット:ミントパスを通じてTHEを供給、vTHEを保有 |
実行(3月15日、11:00~12:42 UTC)
以下の分析は、3つの攻撃トランザクションに基づいています。
11:00 UTC、攻撃者はプロトコル内に1220万THEを保有しており、これは1450万上限内でした。次の2時間で、彼らは寄付バイパスと再帰的なレバレッジループを実行しました。
THEトークンをvTHEコントラクトに直接転送する(供給上限を回避)- 膨張した担保(
CAKE、BNB、BTCB、USDC)に対して資産を借入する - 借入資産を使用して、オープンマーケットでさらに
THEを購入する - TWAPオラクルが更新され、より高い価格を反映するのを待つ
- 借入能力を増やして繰り返す
| 時間(UTC) | 供給THE |
上限の% | 状態 |
|---|---|---|---|
| 11:00 | 1220万 | 84% | 上限内 |
| 12:00 | 4950万 | 341% | 上限回避 |
| 12:42 | 5320万 | 367% | ポジションピーク |
タイムラインデータはAllezLabs[1]より出典。
THEはオンチェーン流動性が極めて薄かったため、わずかな購入でも大幅な価格影響を引き起こしました。THEの集計市場価格は、約0.27ドルから0.53ドル超(CoinMarketCapより)に急騰しました。DEXのスポット価格は、個々の取引で流動性が薄いため、さらに急騰した可能性が高いです。VenusのTWAPオラクルは約0.53ドルに更新され、攻撃者は各サイクルで徐々に借入能力を向上させました。

システムはこの担保を約3000万ドルと評価しました。この評価はオラクル価格に基づいており、市場が実際に吸収できる量に基づいたものではありませんでした。THEの実質的な市場深さは、この名目価値のほんの一部でした。
過剰伸張と崩壊
最初の借入資産の引き出し後、攻撃者は停止できたかもしれません。しかし、彼らは借入資金をさらにTHEの購入に投入し続け、価格をもう一段階引き上げようとしました。これにより、ヘルスコントラクトが約1にまで低下しました。
清算が始まると、5300万THEが深さのない市場に放出されました。THEの価格は約0.21ドルに暴落し、攻撃前の0.27ドルの水準を大きく下回りました。この時点で、プロトコルの最後の防衛線が発動されるはずでした:第三者の清算人が介入し、ポジションを解消して損失を限定することです。
清算の現実
DeFi貸付では、想定は単純です:ポジションが水準を下回った場合、第三者の清算人が介入し、負債を返済し、割引価格で担保を差し押さえ、プロトコルを健全に保ちます。VenusのTHEインシデントはこのメカニズムを壊したわけではありません。その限界を露呈させたのです。
彼らは来た。しかし十分ではなかった。
オンチェーン清算データ(VenusのDuneダッシュボード[4]より出典、追加のトランザクションレベル分析を含む)によると:
| メトリック | 値 |
|---|---|
総清算トランザクション(vTHE、3月15日) |
8,048 |
| ユニーク清算呼び出し者 | 254 |
| 清算エントリーコントラクト | 0x0870...cf43 (Venus Core Pool Liquidator) |
| 返済された総負債 | 約1420万ドル |
| 残りの不良債権 | 215万ドル |
Duneダッシュボードの初期の読み取りでは、Venus自身のコントラクトが唯一の清算人であるかのように示唆されていました。これは誤解を招くものでした。0x0870...cf43はVenusのCore Pool Liquidatorコントラクトであり、どの外部呼び出し者でも清算を実行できる許可不要のエントリーポイントです。実際のトランザクション送信者をクエリすると、8,048トランザクションにわたって清算機会を競う254の異なるアドレスが明らかになりました。清算市場は活発に機能しました。
8,048のvTHE清算トランザクションのうち、8,039は攻撃者のメインポジション(0x1a35)を対象としていました。残りの9件は、価格下落に巻き込まれた少額のvTHE保有者である無関係なユーザー4人を清算しました。
参加が回収につながるわけではありませんでした。ボットは約1420万ドル(BNB、BTC、CAKE、USDC、WBNB)の負債を返済し、vTHEを回収しました。利益を得るためには、そのTHEをオープンマーケットで売却する必要がありました。5300万THEが、数百万ドルの深さしかない市場に放出されたばかりで、差し押さえられた担保は、大規模なスリッページなしに安定価値に変換できませんでした。結果:215万ドルの負債はカバーされず、Venusのバランスシート上の不良債権となりました。
2つのポジション、2つの結果
攻撃者は異なる担保タイプを持つ2つのポジションを運用していました[1]。それらの清算結果は著しく異なりました。
| アドレス | 担保 | トランザクション数 | 返済された負債 | 結果 |
|---|---|---|---|---|
| 0x1a35(攻撃者ウォレット) | vTHE |
8,039 | 約1420万ドル | 215万ドル不良債権(差し押さえTHEの流動性なし) |
| 0x737b(攻撃コントラクト) | vUSDC |
603 | 729,000ドル | クリーンな回収(158万USDCを差し押さえ) |
0x737bのポジションは、その担保が158万USDCで、負債が急速に値上がりしていたTHE建てだったため、早期(12:04 UTC)に清算されました。操作フェーズ中にTHEの価格が急騰したため、0x737bのTHE負債の価値がUSDC担保を超え、清算がトリガーされました。これはおそらく意図的でした:0x737bの目的は、寄付バイパスのためにTHEを借りることでした。その使命が完了した後、USDC担保を失うことは許容できるコストでした。Venusの観点からは、この清算はクリーンでした:USDCは流動性があり安定しているため、プロトコルは返済額以上のものを回収しました。
0x1a35の清算が真実の物語を語っています。その担保はTHE自体でした。254のボットが8,039トランザクションにわたってそれを清算するために競合しましたが、差し押さえられたTHEは、オラクルで報告された価値に近づけることすらできませんでした。タイムラインは、そのダイナミクスを示しています。
| 時間(UTC) | トランザクション数 | 返済された負債 | フェーズ |
|---|---|---|---|
| 12:00 | 3,416 | 約383万ドル | THE価格崩壊、最大のস্লিপেজ |
| 13:00 | 4,626 | 約1040万ドル | 価格安定化、清算の大部分 |
すべての不良債権は、このTHE-担保ポジションから発生しました。0x1a35の総負債は約1640万ドル(返済済+不良債権)でした。清算人はその約87%をカバーすることに成功しました。残りの約13%、すなわち215万ドルがプロトコルの損失となりました。
Dune評価に関する注記: VenusのDuneダッシュボード[4]は、
daily_market_infoテーブルの日次スナップショット価格を使用して差し押さえられた担保を評価しています。THEの価格が日中に約0.53ドルから0.21ドルに暴落したため、この手法は、初期の、より高価格な清算ウィンドウ中に差し押さえられたTHEの価値を大幅に過小評価しています。実際の不良債権、すなわちすべての清算完了後にカバーできなかった残存負債は、約215万ドル[3]であり、生のDune USDギャップよりも信頼性の高い数値です。
資金の流れ
清算データはポジションがどのように解消されたかを示していますが、誰が実際にこのインシデントから利益を得たかは答えていません。資金の流れ全体を追跡すると、標準的な「盗難」の物語とは矛盾する姿が明らかになります。
一部のメディア報道では、これを「370万ドルのエクスプロイト」と説明していましたが、おそらく借入資産の一部のみをカウントしていました。初期の分析はTHE-担保ポジション(0x1a35)に焦点を当てていましたが、攻撃コントラクトの別個のUSDC-担保ポジション(0x737b)を見落としていたため、不完全な会計となりました。3回の不正引き出しトランザクション全体にわたるオンチェーン追跡は、総額577万ドルに達します。
攻撃者のオンチェーン損益
コスト側:
攻撃者の資金調達チェーン:Tornado Cash経由で7,400ETHを受領、Aaveに担保として預け入れ、992万ドルのステーブルコイン(USDT、DAI、USDC)を借入し、THEとvTHEを購入するために複数のウォレットに分配。
| アイテム | 金額 | USD価値 | 備考 |
|---|---|---|---|
| Aave担保 | 7,400 ETH |
約1400万ドル以上 | Tornado Cashから預け入れ |
| Aave借入 | USDT + DAI + USDC |
992万ドル | ETH担保に対して確保 |
THE取得 |
約3610万 THE |
約649万ドル | 9ヶ月間の平均購入価格 約0.17ドル |
vTHE取得 |
約1210万 vTHE |
約267万ドル | 0x1a35によって購入・保有 |
総投資額(649万ドル+267万ドル=916万ドル)は、Aave借入額992万ドルの大部分を占めます。Aaveポジション(7,400ETH担保、約992万ドル負債)は開いたままです。攻撃者は、負債を差し引いたETHにアクセスできます。
収益側(Venusから3回のトランザクションで引き出されたもの):
| Tx | Attack Contract (0x737b) が受け取った資産 | USD価値 |
|---|---|---|
| 0x4f477e...5663f | 6000万 vUSDC + 913,858 CAKE + 1,972.53 WBNB |
4,189,131ドル |
| 0x4253a8...ca296 | 1,044,003 CAKE |
1,460,264ドル |
| 0xfd64d0...54808 | 95,164 CAKE |
124,910ドル |
| 合計 | 2,053,025 CAKE + 1,972.53 WBNB + 6000万 vUSDC |
5,774,305ドル |
純オンチェーン損益:マイナス。 攻撃者はAaveから992万ドルを借入し、Venusから577万ドルを引き出しました。Venusのポジション(コントラクト0x737bとウォレット0x1a35)は両方とも完全に清算され、残存するオンチェーン価値はありませんでした。415万ドルのギャップは、Aaveの未返済負債として残っています。Aaveの攻撃者の7,400ETH担保(約1400万ドル以上)はこの損失を吸収できますが、オンチェーン操作は単独では明らかに収益性がありませんでした。
プロトコル損失
すべての清算が完了した後、Venusは約215万ドルの不良債権[3]が残りました。
| 資産 | 量 | USD価値 |
|---|---|---|
CAKE |
約118万 | 約165万ドル |
THE |
約184万 | 約50万ドル |
| 総不良債権 | 約215万ドル |
価値の分配
| 関係者 | 純損益 | 備考 |
|---|---|---|
| 攻撃者(オンチェーン) | -$415万 | 992万ドル借入、577万ドル引き出し、415万ドルのAave未返済負債 |
| 第三者清算人 | 不明 | 254ボットが参加;損益はTHEの出口価格による |
| Venus Protocol | -$215万 | すべての清算完了後の不良債権 |
| 攻撃者(CEX) | 不明 | 永久先物ポジションを通じて利益を得た可能性が高い |
ほとんどのDeFiエクスプロイトでは、「欠落している価値」は、プロトコル損失と攻撃者の利益の間に、清算人やアービトラージャーによって捕捉されます。ここでは、254の清算ボットが差し押さえられたTHEを競合しましたが、トークンの流動性が破壊されたため、担保は効率的に安定価値に変換できませんでした。価値の多くは再分配されるのではなく、破壊されました。
もし攻撃者が利益を得た場合、最も可能性の高いメカニズムは、中央集権型取引所でのオフチェーン永久先物ポジションです:ポンプフェーズ(0.27ドルから0.53ドル超)でTHEをロングし、その後、清算連鎖(清算後0.53ドルから0.21ドル)の前にTHEをショートすることです[2, 3]。このCEX活動は、オンチェーンデータからは確認できません。オフチェーンデリバティブの利益のためにオンチェーン操作を損失リーダーとして使用するパターンは、中央集権型取引所の活動の不透明さから確認が難しいものの、同様のインシデントで仮説として挙げられています。DeFiとCEXの相互作用が深まり、ロングテールトークンの永久市場が拡大するにつれて、この種のクロス会場攻撃はますます一般的なベクトルになる可能性があります。
教訓:3つの防御線
この攻撃は既知の脆弱性を悪用し、教科書的なレバレッジループを使用しましたが、それでも215万ドルの不良債権を引き起こしました。真の失敗は、単一のメカニズムではなく、リスクスタック全体にわたる弱点の複合効果でした。
第一線:エクスポージャー制限
Venusの供給上限は、標準的なmintパスのみを制約しました。vTokenコントラクトへの直接的なトークン転送は、それを完全に回避しました。リスク制御が会計上の想定に依存する場合、それらの想定は、期待される預け入れフローだけでなく、すべての可能な状態変更操作に対して検証する必要があります。
第二線:担保評価
オラクルによって報告される担保価値は、清算人が実際に実現できる価値と大きく乖離する可能性があります[2]。このポジションは、約1600万ドルの負債に対して約3000万ドルのオラクル報告担保を持っていましたが、それでも215万ドルの不良債権を生み出しました。なぜなら、紙上の3000万ドルのTHEは、数百万ドルの深さしかない市場ではその価値のごく一部しか実現できなかったからです。流動性の低いトークンでは、3倍の担保比率でも実質的な安全マージンはありません。貸付プロトコルは、市場深さ、期待されるスリッページ、および集中リスクを考慮した、流動性調整済み担保評価を組み込むべきです。
第三線:清算
貸付モデル全体は、ポジションが水準を下回った場合、清算人が介入してプロトコルを健全にすると想定しています。このインシデントでは、254の清算ボットが、vTHEポジションだけで8,048トランザクションを処理しました。清算市場は活発で競争的でした。しかし、それでも十分ではありませんでした:215万ドルの不良債権が残りました。問題は清算人の不足ではなく、流動性の不足でした。5300万THEが数百万ドルの深さしかない市場に放出されたとき、差し押さえられた担保を十分な価値に変換して未返済負債をカバーするために、ボットの競争がどれほどあっても十分ではありませんでした。プロトコルは、担保の実現可能価値がオラクル報告価値と大きく乖離する場合、清算を信頼できるバックストップとして扱うことはできません。
モニタリングのギャップ
9ヶ月間の蓄積フェーズは、最初からオンチェーンで確認可能でした:単一エンティティが供給上限に近づき、低流動性資産への集中度が増加し、数ヶ月にわたる段階的なポジション構築。Venusは、「一部のコミュニティメンバーがエクスプロイト前にこのアドレスを指摘していた」ことを認めていますが、「アドレスは当時、プロトコルの制限内で完全に運用されていた」とし、許可不要なプロトコルとして「疑いだけでアドレスを凍結したりブラックリストに載せたりすべきではなく、またそうすることもできない」と述べています[5]。Venusは、是正措置の一環として、「異常な蓄積パターンをフラグ付けし、ガバナンスレベルのレビューをトリガーできるオンチェーンリスク監視メカニズムを検討している」と述べています[5]。
これは重大な機能ギャップを示しています。従来のトランザクションレベルの監視では、この攻撃を捉えられませんでした:単一のトランザクションが悪意のあるものではなく、9ヶ月間の構築期間中、どの時点でもルールは破られませんでした。必要だったのは、ポジションレベルのトレンド検出です:単一エンティティの低流動性資産への集中度が、供給上限、市場深さ、清算能力と比較して時間とともにどのように進化するかを追跡することです。これには、トランザクションレイヤーを超えて動作する継続的な監視インフラストラクチャが必要であり、オンチェーンの状態変更をアドレスと時間ウィンドウ全体で相関させて、システムリスクが顕在化する前に表面化させる必要があります。
参考文献
- [1] AllezLabs, "Venus Protocol THE Incident Timeline": https://x.com/AllezLabs/status/2033239532355858536
- [2] hklst4r, "Venus THE Attack Analysis": https://x.com/hklst4r/status/2033192855443808515
- [3] EmberCN, "Venus THE Attacker Fund Flow": https://x.com/EmberCN/status/2033204517467308144
- [4] Venus Protocol Liquidation Dashboard (Dune): https://dune.com/xvslove_team/venus-liquidations
- [5] Venus Protocol, "$THE Market Incident: What We Know So Far": https://x.com/VenusProtocol/status/2033471885259034989



