深度解析:Morpho金库NAV操纵攻击事件
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),份额的价值会随着利息累积而增长。

核心公式——每股净值(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”本身更重要。协议只是工具,工具是否安全取决于使用它的人。
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代币币情的观点或立场
首页
快讯