🍀 Spring Date with Fortune, Prizes with Raffle! Growth Value Phase 1️⃣ 7️⃣ Spring Raffle Carnival Begins!
Seize Spring's Good Luck! 👉 https://www.gate.com/activities/pointprize?now_period=17
🌟 How to Participate?
1️⃣ Enter [Square] personal homepage, click the points icon next to your avatar to enter [Community Center]
2️⃣ Complete Square or Hot Chat tasks such as posting, commenting, liking, speaking to earn growth value
🎁 Every 300 points can raffle once, 10g gold bars, Gate Red Bull gift box, VIP experience card and more prizes waiting for you to win!
Details 👉 https://www.gate.com/ann
深度解剖:USR 脫鉤後的 Morpho 金庫閃電貸 NAV 操縱攻擊
撰文:菠菜菠菜
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" 本身更重要。協議是工具,工具是否安全取決於使用它的人。