深度解剖:USR 脫鉤後的 Morpho 金庫閃電貸 NAV 操縱攻擊

robot
摘要生成中

撰文:菠菜菠菜

2026 年 3 月 22 日,Resolv 協議遭遇私鑰泄露,攻擊者憑空鑄造了 8000 萬枚無抵押 USR,導致 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.”

當你替金庫 supply 了 1 萬 USDC,金庫在這個市場的 supply position 就增加了 1 萬,totalAssets 也就增加了 1 萬。但金庫的總份額(totalSupply)沒有變——因為沒有任何人透過金庫的 deposit() 函數存入新資金。

結果:每股淨值被抬高了。

正常情況下,這等於給金庫"捐錢"——你自掏腰包替所有股東增加了收益,傻子才會這麼做。但在特定條件下,這可以被利用。

三、Supply Cap = 0 ≠ 安全

USR 脫錨後,一些金庫管理員緊急將 USR/USDC 市場的 Supply Cap 設為 0,意味著管理員不能再往這個市場投錢了。聽起來問題解決了?

問題在於:Supply Cap 是金庫層面的限制,不是 Morpho Blue 層面的限制。

金庫管理員能控制的是金庫自己的 _supplyMorpho() 內部函數。

但 supply(onBehalf=vault) 是直接跟 Morpho Blue Core 合約交互的,完全繞過了金庫層面的一切邏輯:supply queue、supply cap、allocator 權限檢查,通通不經過。

用一個比喻:金庫管理員關了前門(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 不是憑空出現的。這筆錢來自金庫在其他健康市場的真實流動性。

金庫贖回時,會按照 withdraw queue 的順序從各個市場提取 USDC。USR 市場裡的 USDC 已經被借光了,提不出錢。所以贖回的資金來自其他市場——比如 wETH/USDC、cbBTC/USDC 等正常運作的市場。

八、三層漏洞的疊加效應

這次攻擊不是單一漏洞,而是三個設計問題的疊加:

結語

Morpho 的極簡設計哲學——無許可、不可升級、最小治理——在大多數時候是優勢。但這次事件表明,極簡設計的代價是將更大的責任推給了上層參與者。

協議不做預言機驗證,管理員就必須自己做好。協議不限制 supply(onBehalf),金庫層面就需要額外的防護。

對於存款人而言,“選擇正確的 Curator” 比"選擇 Morpho" 本身更重要。協議是工具,工具是否安全取決於使用它的人。

MORPHO-6.85%
查看原文
此頁面可能包含第三方內容,僅供參考(非陳述或保證),不應被視為 Gate 認可其觀點表述,也不得被視為財務或專業建議。詳見聲明
  • 打賞
  • 留言
  • 轉發
  • 分享
留言
請輸入留言內容
請輸入留言內容
暫無留言