深度解析:Morpho金库NAV操纵攻击事件

霸气犀利8 小时前

2026年3月22日,Resolv协议因私钥泄露遭到攻击,攻击者凭空铸造了8000万枚无抵押的USR,导致其价格从1美元暴跌至0.025美元。

这场灾难的影响不仅限于USR持有者。更聪明的攻击者利用Morpho协议,实施了一场精密的金库每股净值(NAV)操纵攻击。

本文将逐步剖析这次攻击的技术逻辑。

一、Morpho的两层架构设计

在深入分析攻击之前,必须先了解Morpho的架构设计,否则后续内容难以理解。

Morpho的设计分为两层:

底层:

Morpho Blue(也称Morpho Core)。这是一个极简且不可升级的借贷协议,其设计理念是“无许可”——任何人都可以创建借贷市场,也可以自由存入、借出或清算。

每个市场由五个参数唯一定义:贷款资产、抵押品资产、清算线(LLTV)、预言机地址、利率模型。

市场之间完全隔离,一个市场的风险不会波及其他市场。

上层:

MetaMorpho Vault(金库)。这是一个符合ERC-4626标准的金库,相当于一个“基金产品”。

用户将USDC存入金库后,金库管理员(Curator)负责将资金分配到不同的Morpho Blue市场进行放贷赚取利息。

用户持有的是金库份额(shares),份额的价值会随着利息累积而增长。

WkLcthJiSc5SnYqvTXm3lYNivzUNWfyYTKSwAqdf.jpeg

核心公式——每股净值(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层面的限制。

kuDt8xeaHbXW2NqonavTbIProIDfNtvX5tsWS1xL.jpeg

金库管理员能够控制的是金库自己的_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。

i3I8FgMSmuafOPulet74YdrZ53opNou2eu7bA2eh.jpeg

为什么金库管理员会使用固定预言机?因为USR是“稳定币”,正常情况下价格波动很小。固定预言机可以避免短期流动性不足导致的“假清算”。

但当USR真的脱锚了,固定预言机就成了灾难——借款人用不值钱的USR做抵押借走了足额USDC,协议却浑然不知。

Morpho的坏账处理机制在这里完全失效了——V1.0的实时反映和V1.1的均摊机制,前提都是协议能够识别到坏账。

预言机写死了,就什么都识别不到。

五、攻击全流程——五步闭环

现在所有条件都具备了。以下是在单笔交易内完成的原子操作:

PMsHN3tMxF8wjMGYa2Rbwf5LIxhIXlwbco38KjY9.jpeg

六、为什么一定需要闪电贷?

这是最容易被忽略的问题。攻击的利润来源是“虚增totalAssets后按份额比例分配增值”。如果攻击者不存闪电贷,他持有0%的份额——就算把totalAssets抬高到天,增值全归其他股东,他自己一分钱拿不到。

6NjKZhVPW2taxGUfhLyJRp7PvhFDtSoriQdOUa7I.jpeg

七、谁亏了钱?

攻击者多拿走的12,300 USDC并非凭空出现。这笔钱来自金库在其他健康市场的真实流动性。

金库赎回时,会按照withdraw queue的顺序从各个市场提取USDC。USR市场里的USDC已经被借光了,提不出钱。因此赎回的资金来自其他市场——比如wETH/USDC、cbBTC/USDC等正常运作的市场。

7nhFXDs3GBY9Oy5H5CDIZJ30PYHb52qtCJURQ1he.jpeg

八、三层漏洞的叠加效应

这次攻击并非单一漏洞,而是三个设计问题的叠加:

fPElPZ6zEeaVt9rbQCWCCN5Rz8h4JFdJ4fMQQuqn.jpeg

结语

Morpho的极简设计哲学——无许可、不可升级、最小治理——在大多数时候是一种优势。但这次事件表明,极简设计的代价是将更大的责任推给了上层参与者。

协议不做预言机验证,管理员就必须自己做好。协议不限制supply(onBehalf),金库层面就需要额外的防护。

对于存款人而言,“选择正确的Curator”比“选择Morpho”本身更重要。协议只是工具,工具是否安全取决于使用它的人。

免责声明:

1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险

2.本文版权归属原作所有,仅代表作者本人观点,不代币币情的观点或立场