執筆者:菠菜菠菜2026年3月22日、Resolvプロトコルは秘密鍵漏洩に遭い、攻撃者は何の担保もないUSRを8千万枚無断で鋳造し、USRの価格は$1から$0.025へ暴落した。この災害の余波はUSRの保有者だけにとどまらず、より賢明な一部の人々はMorpho上で精密な金庫NAV操作攻撃を実行した。この記事では、この攻撃の根底にある仕組みを段階的に解説する。一、Morphoの二層構造を理解しよう攻撃を語る前に、まずMorphoの設計構造を理解しなければならない。さもないと後の内容が全く理解できなくなる。Morphoの世界は二層に分かれている。底層:Morpho Blue(別名:Morpho Core)。これは非常にシンプルでアップグレード不可の借入プロトコルだ。設計哲学は「無許可」—誰でも借入市場を作成でき、誰でも預け入れ・借入・清算が可能。各市場は五つのパラメータによって唯一識別される:貸出資産、担保資産、清算ライン(LLTV)、オラクルアドレス、金利モデル。市場間は完全に隔離されており、一つの市場で問題が起きても他に影響しない。上層:MetaMorpho Vault(金庫)。これはERC-4626規格の金庫で、いわば「ファンド商品」に相当する。ユーザーはUSDCを金庫に預け、金庫管理者(Curator)がこれらの資金を異なるMorpho Blue市場に振り分けて貸出し、利息を得る。ユーザーは金庫のシェア(shares)を保有し、その価値は利息の累積とともに増加する。核心公式—一株純資産価値(NAV / Price Per Share):一株純資産価値 = totalAssets / totalSupplytotalAssetsは、すべての市場における金庫の総供給ポジション(既借出分も含む)で、totalSupplyは発行された総シェア数。利息が累積すると、totalAssetsは増加するが、totalSupplyは変わらないため、一株純資産価値は上昇—これが利益を得る仕組みだ。二、supply(onBehalf) — 誰でも金庫の代わりに資金を供給できるこれが攻撃の最初の重要ポイントだ。Morpho Blueでは、supply()関数にonBehalfパラメータがある。この設計は第三者による代行を容易にするためだ—例えば自動化戦略コントラクトがユーザーの代わりに資金を預けることができる。しかし、これは完全に無許可であり、誰でも任意のアドレスをonBehalfに指定できる。金庫のアドレスも例外ではない。Morpho公式ドキュメントは明確に警告している:「Warning: Anyone can supply on behalf of the vault so the call to updateWithdrawQueue that expects a market to be empty can be griefed by a front-run.」あなたが金庫のために1万USDCを供給(supply)すると、その市場における供給ポジションは1万増え、totalAssetsも同じく増加する。しかし、金庫の総シェア(totalSupply)は変わらない—なぜなら、新たな資金をdeposit()関数で預け入れていないからだ。結果:一株純資産価値が上昇する。通常、これは金庫に「寄付」しているのと同じで、全株主の利益を増やす行為だ—馬鹿だけがやることだが、特定条件下ではこれを悪用できる。三、Supply Cap = 0 ≠ 安全USRのデペッグ後、一部の金庫管理者は緊急的にUSR/USDC市場のSupply Capを0に設定した。これにより、その市場に資金を投入できなくなる。問題は解決したと思われるかもしれない。しかし、問題はそこにある。Supply Capは金庫レベルの制限であり、Morpho Blueレベルの制限ではない。金庫管理者が制御できるのは、金庫の内部関数_supplyMorpho()だけだ。しかし、supply(onBehalf=vault)は直接Morpho Blueコアコントラクトとやり取りしており、金庫のロジック(供給キュー、供給キャップ、アロケータの権限チェック)を完全に迂回している。例えるなら、金庫の前門(Cap=0)を閉めても、攻撃者はMorpho Coreの裏口から資金を直接投入できる。四、固定されたオラクル—隠れた不良債権これも重要なポイントだ。USR/USDC市場のオラクルは固定値1:1に設定されている。つまり、外部市場でUSRの価格が下落しても、Morphoの世界では1 USRは常に1 USDCに等しい。なぜ金庫管理者は固定オラクルを使うのか?それはUSRが「ステーブルコイン」だからだ。通常、価格変動は小さいと考えられるため、固定オラクルは短期的な流動性不足による「誤清算」を防ぐために使われる。しかし、USRが実際にデペッグした場合、固定オラクルは大惨事を引き起こす。借り手は価値のないUSRを担保にして大量のUSDCを借り出すことができるが、プロトコルはそれに気づかない。Morphoの不良債権処理メカニズムはここで完全に機能しなくなる—V1.0のリアルタイム反映やV1.1の均等分配メカニズムは、前提としてプロトコルが不良債権を認識できることに依存している。オラクルが固定されていると、何も識別できなくなる。五、攻撃の全流れ—五段階の閉ループすべての条件が揃った。以下は一つの取引内で完結する原子操作の流れだ。(具体的な操作手順は本文には記載されていないため省略)六、なぜフラッシュローンが必要なのか?これも見落とされがちなポイントだ。攻撃の利益は、「totalAssetsを虚増させ、その増加分をシェア比率で分配」することにある。もし攻撃者がフラッシュローンを使わなければ、持ち分は0%のまま—totalAssetsを増やしても、その価値は他の株主に帰属し、攻撃者は一銭も得られない。七、誰が損をしたのか?攻撃者が多く奪った12,300 USDCは、空から出てきたわけではない。この資金は、金庫が他の健全な市場から得た実際の流動性から来ている。金庫が換金(redeem)する際、withdraw queueの順に各市場からUSDCを引き出す。USR市場のUSDCはすでに借り尽くされており、引き出せないため、資金は他の市場—例えばwETH/USDCやcbBTC/USDCなどの正常に運用されている市場から引き出される。八、三層の脆弱性の重なり効果今回の攻撃は単一の脆弱性ではなく、三つの設計問題の重なりによるものだ。結語Morphoの極めてシンプルな設計哲学—無許可、アップグレード不可、最小限のガバナンス—は、多くの場合で有利だ。しかし、今回の事件は、シンプルさの代償として、上層の参加者により大きな責任を負わせることになることを示している。プロトコルはオラクルの検証を行わず、管理者は自己責任で対応すべきだ。supply(onBehalf)を制限しない場合、金庫レベルでの追加防護策が必要だ。預金者にとっては、「正しいCuratorを選ぶ」ことが「Morphoを選ぶ」ことよりも重要だ。プロトコルはツールであり、その安全性は使う人次第だ。
深度解剖:USR脱锚後のMorpho金庫の闪电贷NAV操作攻撃
執筆者:菠菜菠菜
2026年3月22日、Resolvプロトコルは秘密鍵漏洩に遭い、攻撃者は何の担保もないUSRを8千万枚無断で鋳造し、USRの価格は$1から$0.025へ暴落した。
この災害の余波はUSRの保有者だけにとどまらず、より賢明な一部の人々はMorpho上で精密な金庫NAV操作攻撃を実行した。
この記事では、この攻撃の根底にある仕組みを段階的に解説する。
一、Morphoの二層構造を理解しよう
攻撃を語る前に、まずMorphoの設計構造を理解しなければならない。さもないと後の内容が全く理解できなくなる。
Morphoの世界は二層に分かれている。
底層:
Morpho Blue(別名:Morpho Core)。これは非常にシンプルでアップグレード不可の借入プロトコルだ。設計哲学は「無許可」—誰でも借入市場を作成でき、誰でも預け入れ・借入・清算が可能。
各市場は五つのパラメータによって唯一識別される:貸出資産、担保資産、清算ライン(LLTV)、オラクルアドレス、金利モデル。
市場間は完全に隔離されており、一つの市場で問題が起きても他に影響しない。
上層:
MetaMorpho Vault(金庫)。これはERC-4626規格の金庫で、いわば「ファンド商品」に相当する。
ユーザーはUSDCを金庫に預け、金庫管理者(Curator)がこれらの資金を異なるMorpho Blue市場に振り分けて貸出し、利息を得る。
ユーザーは金庫のシェア(shares)を保有し、その価値は利息の累積とともに増加する。
核心公式—一株純資産価値(NAV / Price Per Share): 一株純資産価値 = totalAssets / totalSupply
totalAssetsは、すべての市場における金庫の総供給ポジション(既借出分も含む)で、totalSupplyは発行された総シェア数。利息が累積すると、totalAssetsは増加するが、totalSupplyは変わらないため、一株純資産価値は上昇—これが利益を得る仕組みだ。
二、supply(onBehalf) — 誰でも金庫の代わりに資金を供給できる
これが攻撃の最初の重要ポイントだ。
Morpho Blueでは、supply()関数にonBehalfパラメータがある。この設計は第三者による代行を容易にするためだ—例えば自動化戦略コントラクトがユーザーの代わりに資金を預けることができる。
しかし、これは完全に無許可であり、誰でも任意のアドレスをonBehalfに指定できる。金庫のアドレスも例外ではない。
Morpho公式ドキュメントは明確に警告している:「Warning: Anyone can supply on behalf of the vault so the call to updateWithdrawQueue that expects a market to be empty can be griefed by a front-run.」
あなたが金庫のために1万USDCを供給(supply)すると、その市場における供給ポジションは1万増え、totalAssetsも同じく増加する。しかし、金庫の総シェア(totalSupply)は変わらない—なぜなら、新たな資金をdeposit()関数で預け入れていないからだ。
結果:一株純資産価値が上昇する。
通常、これは金庫に「寄付」しているのと同じで、全株主の利益を増やす行為だ—馬鹿だけがやることだが、特定条件下ではこれを悪用できる。
三、Supply Cap = 0 ≠ 安全
USRのデペッグ後、一部の金庫管理者は緊急的にUSR/USDC市場のSupply Capを0に設定した。これにより、その市場に資金を投入できなくなる。問題は解決したと思われるかもしれない。
しかし、問題はそこにある。Supply Capは金庫レベルの制限であり、Morpho Blueレベルの制限ではない。
金庫管理者が制御できるのは、金庫の内部関数_supplyMorpho()だけだ。
しかし、supply(onBehalf=vault)は直接Morpho Blueコアコントラクトとやり取りしており、金庫のロジック(供給キュー、供給キャップ、アロケータの権限チェック)を完全に迂回している。
例えるなら、金庫の前門(Cap=0)を閉めても、攻撃者はMorpho Coreの裏口から資金を直接投入できる。
四、固定されたオラクル—隠れた不良債権
これも重要なポイントだ。
USR/USDC市場のオラクルは固定値1:1に設定されている。つまり、外部市場でUSRの価格が下落しても、Morphoの世界では1 USRは常に1 USDCに等しい。
なぜ金庫管理者は固定オラクルを使うのか?それはUSRが「ステーブルコイン」だからだ。通常、価格変動は小さいと考えられるため、固定オラクルは短期的な流動性不足による「誤清算」を防ぐために使われる。
しかし、USRが実際にデペッグした場合、固定オラクルは大惨事を引き起こす。借り手は価値のないUSRを担保にして大量のUSDCを借り出すことができるが、プロトコルはそれに気づかない。
Morphoの不良債権処理メカニズムはここで完全に機能しなくなる—V1.0のリアルタイム反映やV1.1の均等分配メカニズムは、前提としてプロトコルが不良債権を認識できることに依存している。
オラクルが固定されていると、何も識別できなくなる。
五、攻撃の全流れ—五段階の閉ループ
すべての条件が揃った。以下は一つの取引内で完結する原子操作の流れだ。
(具体的な操作手順は本文には記載されていないため省略)
六、なぜフラッシュローンが必要なのか?
これも見落とされがちなポイントだ。攻撃の利益は、「totalAssetsを虚増させ、その増加分をシェア比率で分配」することにある。もし攻撃者がフラッシュローンを使わなければ、持ち分は0%のまま—totalAssetsを増やしても、その価値は他の株主に帰属し、攻撃者は一銭も得られない。
七、誰が損をしたのか?
攻撃者が多く奪った12,300 USDCは、空から出てきたわけではない。この資金は、金庫が他の健全な市場から得た実際の流動性から来ている。
金庫が換金(redeem)する際、withdraw queueの順に各市場からUSDCを引き出す。USR市場のUSDCはすでに借り尽くされており、引き出せないため、資金は他の市場—例えばwETH/USDCやcbBTC/USDCなどの正常に運用されている市場から引き出される。
八、三層の脆弱性の重なり効果
今回の攻撃は単一の脆弱性ではなく、三つの設計問題の重なりによるものだ。
結語
Morphoの極めてシンプルな設計哲学—無許可、アップグレード不可、最小限のガバナンス—は、多くの場合で有利だ。しかし、今回の事件は、シンプルさの代償として、上層の参加者により大きな責任を負わせることになることを示している。
プロトコルはオラクルの検証を行わず、管理者は自己責任で対応すべきだ。supply(onBehalf)を制限しない場合、金庫レベルでの追加防護策が必要だ。
預金者にとっては、「正しいCuratorを選ぶ」ことが「Morphoを選ぶ」ことよりも重要だ。プロトコルはツールであり、その安全性は使う人次第だ。