本文深入探讨了在DeFi协议中整合ERC-4626代币的风险,重点分析了通过捐赠操纵汇率的漏洞利用方式,并结合Venus协议的真实案例进行了说明。文中还讨论了诸如实施相关资产价格预言机(CAPO)和快速响应熔断机制等防御措施,旨在帮助协议减少风险敞口,为所有参与者构建更安全、稳定的DeFi生态系统。
随着 ERC-4626 标准的出现,自 2022 年年中以来,其日益增长的应用对整个 DeFi 协议中 tokenized vaults 的使用产生了积极影响。然而,其独特的特性和汇率功能为那些没有充分准备好处理能够进行有机膨胀的 token 的协议带来了固有的风险。 本文解释了将 ERC-4626 token 集成到各种协议中涉及的风险,并展示了其内置功能(虽然本身不是漏洞)如何在管理不当的情况下仍然导致严重漏洞。
在深入研究 ERC-4626 之前,必须了解生息 vaults 的工作原理。
生息 vaults 是智能合约,旨在优化和最大化已存入 token 的回报。 这些 vaults 具有基础资产,例如 USDT,用户可以存入这些资产以开始赚取收益。
产生的收益来自在各种 DeFi 协议中执行的多种策略,包括借贷、流动性提供、质押和套利。
每个 vault 的盈利策略取决于其特定的智能合约实现。 通常,生息 vault 根据其盈利能力对不同的协议进行排名,将一部分池化资产分配给最赚钱的协议,同时保持提款储备。
将资产存入 vault 的用户会收到份额(shares)——代表他们对 vault 的比例所有权的 token。 这些份额稍后可以兑换为初始存款 + 任何已赚取的回报。

生息 vault 的简化表示如下所示:
ERC-4626 是 ERC-20 标准的扩展,旨在标准化 tokenized vaults 的创建,例如,可用于创建上述生息 vaults。 然而,它的效用不仅限于生息 vaults,它还支持其他 token 结构,如 liquid staking tokens (LSTs) 或 rebasing tokens,以便于与其他 DeFi 协议集成。 该标准建立了一个通用接口,有助于以一致的方法进行存款和取款,并获得应计利息或收益。
然而,必须强调的是,ERC-4626 vaults 本身并不执行收益策略。 它们的功能仅侧重于管理存款和赎回,允许用户以与 vault 的 underlying asset 余额增加相同的份额,来检索更多的 token。
创建 ERC-4626 vault 时,开发人员必须定义 underlying asset token 地址(例如 USDT)。 然后,用户将此资产存入 ERC-4626 vault 合约,并收到 shares 作为回报。 收到的 shares 数量代表用户在 vault 中的比例权益。
随着 vault 积累更多资产——无论是来自 yield farming、投资还是捐赠——shares 会成比例地升值。 用户赎回其 shares 以获得其原始 token 以及 vault 积累的任何额外收益的份额。

在 ERC-4626 中,用于存入资产(deposit/mint)和赎回资产(withdraw/redeem)的函数使用内部转换函数(convertToShares 和 convertToAssets)。 这些函数处理 underlying asset 和 shares 之间的转换,确保准确的比例分配。
虽然乍一看可能很复杂,但资产和 shares 之间的兑换计算相对简单,类似于基本的三的规则:
Copy
totalAssets 和 totalSupply(流通 shares)都会成比例地增加。totalAssets 独立于 totalSupply 增加时,用户才能获利。 如果 vault 通过 yield farming、投资或直接资产捐赠产生额外资产,就会发生这种情况。换句话说,用户从 shares 中获得的盈利能力与 vault 总资产的有机增长严格相关,而不是来自其他用户的后续存款。
注意: 在转换计算中,_decimalsOffset() 函数用于确定虚拟 share rates 作为一种安全措施,以减轻 vault 膨胀攻击的影响和盈利能力。 有关这种特定攻击类型的更多详细信息,请参阅我们的博客文章:一种针对 ERC-4626 膨胀攻击的新型防御。
由于 ERC-4626 vaults 的固有功能,集成这些 token 的协议通常使用 vault 的内部汇率(每 shares 的资产)作为 token 定价的参考。
例如,考虑一个集成 tokenized vault 的协议,例如 wUSDM(一种 ERC-4626 token)。 为了以美元定价 wUSDM,该协议:
convertToAssets 函数,以确定一个 shares (wUSDM) 当前代表多少 underlying asset (USDM)然而,依赖内部汇率使协议面临一种特定形式的价格操纵,称为“直接捐赠攻击”。 在这种情况下,恶意行为者通过直接捐赠资产来膨胀 vault 的 totalAssets。 这与典型的存款从根本上不同,因为在此直接捐赠过程中不会创建新的 shares。
因此,虽然常规存款会按比例增加 totalAssets 和 totalSupply(shares数量),从而保持 shares 的价值,但直接捐赠只会增加 totalAssets。 这导致每个现有 shares 所代表的价值立即增加,从而给未为如此快速和不可预测的价格波动做好准备的协议带来重大风险。
在借贷协议的背景下,当汇率直接从 vault 合约确定,并且 ERC-4626 token 用作基础资产(可用于借贷的资产)时,通过捐赠攻击进行的通货膨胀会带来两个主要风险:
考虑一个使用 wUSDM 作为其基础资产的借贷协议,并观察以下场景:

接下来,利用 vault 相对较低的流动性:
由于流动性低,这种适度的捐赠会显着提高每个 shares 的资产价值,使 wUSDM 的价格上涨正好 50%。

因此:
这清楚地说明了如果借贷协议未能充分处理 ERC-4626 token 膨胀风险,可能会遭受坏账的影响。
先前描述的有关操纵 ERC-4626 token 估值的问题在使用来自 Automated Market Makers (AMMs) 的 Time-Weighted Average Price (TWAP) 预言机的协议中尤其突出。 通常,TWAP 预言机通过在较长时间内平均 token 价格来帮助防止突然的价格操纵。
然而,ERC-4626 token 从根本上是不同的。 当攻击者膨胀 ERC-4626 vault 的总资产数量时,这种增加是永久性的。 这种永久性意味着套利者通常会通过纠正标准 ERC-20 资产的 token 价格来恢复平衡,但无法纠正 ERC-4626 token 价格膨胀。 相反,攻击者自己会立即捕获套利,从而将 AMM 价格锁定为与膨胀的 vault 价格一致。
这导致 TWAP 在其平均周期(通常为 30 分钟)内不可避免地逐渐增加。 预测到这种可预测的价格上涨的攻击者可以利用最初记录较低 token 估值的依赖 AMM TWAP 预言机的协议。
由于这种价格膨胀是有机且不可逆转地发生的,因此其他用户通常的市场纠正措施(如额外铸造或赎回)无效。 因此,阻止攻击需要不切实际的措施,例如:
因此,将 ERC-4626 token 与 AMM TWAP 预言机集成的协议必须认识到这种任意操纵的独特风险。
从历史上看,曾发生过多次涉及 ERC-4626 token 价格操纵的严重漏洞利用事件,最著名的是 2021 年针对 CREAM Finance 的攻击。 最近,在 2025 年 2 月,Venus 协议在 ZKsync 网络上遭受了类似的攻击,导致攻击者获利约 86 个 WETH,同时给协议留下了大量坏账。 可以在此处找到攻击者的交易。
以下几个因素促成了此次漏洞利用:
为了清楚地说明此漏洞的展开方式,我们将它分解为四个关键阶段。
最初,攻击者通过 AAVE 的闪电贷借入了 2100 个 WETH,随后将这些 token 存入 Venus 协议以增强借款能力。

攻击者使用两个单独的帐户(帐户 A 和帐户 B)执行了多次借入和重新存款 wUSDM 的循环:

通过重复执行这些借入和重新存款循环,帐户 A 达到了其最大借款限额(抵押因子),而帐户 B 则累积了相当大的供应记录。
在最终的杠杆循环中,帐户 B 铸造了 303,000 wUSDM,将 107,000 wUSDM 转回帐户 A,保留了 55,000 wUSDM。
然后,帐户 A 借入了额外的 303,000 wUSDM,总计 411,000 wUSDM,并将这些兑换为 439,000 USDM。
这些 USDM token 直接捐赠给了 vault,由于 vault 流动性低,使 wUSDM 价格上涨了约 1.7 倍。

通货膨胀后,帐户 A 的贷款严重抵押不足,允许帐户 B 启动清算:
在清算结束时,帐户 B 取回了约 1498 个 WETH,并且由于膨胀的存款价值,仍然保持着额外的借款能力。 这允许帐户 B 从协议中借入额外的 162 个 WETH。 所有 WETH 随后都被转移回帐户 A。
最终,攻击者获得了约 2186 个 WETH(来自清算的 1498 个 WETH、来自初始抵押品的 526 个未使用的 WETH 以及清算后借入的 162 个 WETH),导致 Venus 协议的利润约为 86 个 WETH 和大量坏账。
为了有效减轻上述风险,与 ERC-4626 token 集成的协议必须实施强大的安全措施。 这些措施可能包括采用 Correlated-Assets Price Oracle (CAPO) 以防止快速且过度的价格通货膨胀,以及快速响应 Kill-Switch 机制以迅速解决严重的波动和操纵尝试。
CAPO 通过限制资产汇率在指定的时间范围内可以增加的速度,来帮助防止突然和激进的资产价格膨胀。 CAPO 设置了预定义的约束,包括:
CAPO 逻辑很简单:
该策略确保可以通过捐赠或其他激进的通货膨胀策略来有效地控制价格操纵。
类似于 AAVE 采用的机制,kill-switch 功能提供了一种快速响应的保护措施,以应对极端的市场波动或操纵。 与手动或基于治理并且可能缓慢且效率低下的紧急措施不同,kill switch 可以在检测到严重异常时立即暂停市场活动,从而显着降低灾难性结果的风险。
这种快速响应机制可以通过以下方式实施:
本文探讨了将 ERC-4626 token 集成到 DeFi 协议中所涉及的固有风险,重点介绍了与通过基于捐赠的通货膨胀攻击进行的汇率操纵相关的关键漏洞。 分析了包括最近涉及 Venus 协议的事件在内的真实案例,以清楚地说明这些风险。 还讨论了战略防御措施,例如实施 Correlated-Assets Price Oracle (CAPO) 和快速响应 Kill Switch。 通过主动实施强大的保护措施,协议可以显着降低其面临的操纵风险,并为所有参与者创建一个更安全和稳定的 DeFi 生态系统。
- 原文链接: openzeppelin.com/news/er...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!