本文深入探讨了 ERC4626 Token Vaults 的通胀攻击漏洞,并详细介绍了 OpenZeppelin 针对此漏洞提出的防御策略,包括 ERC4626 路由器、内部跟踪总资产、创建“死亡份额”、虚拟份额和十进制偏移等,旨在帮助开发者构建更安全的 ERC4626 应用。
ERC4626 是大家熟悉的 ERC20 的扩展,它为 token vault 提供了一个标准化的接口,使开发者能够构建安全和可组合的解决方案。 了解潜在的安全漏洞至关重要,例如可能影响 ERC4626 token vault 的通货膨胀攻击。
ERC4626 token vault 通过发行股份以换取存入的资产来运作。股份和资产之间的汇率决定了每股的价值。在通货膨胀攻击中,攻击者操纵汇率,从而让自己受益,而牺牲其他用户的利益。通过利用存款期间股份向下取整的特性, 攻击者可以稀释其他用户存款的价值。
%209.45.46%20a.%20m..png?width=700&height=681&name=Captura%20de%20pantalla%202025-03-05%20a%20la(s)%209.45.46%20a.%20m..png)
新的 vault 面临通货膨胀攻击的风险最大。让我们用一个例子来说明这一点: 假设一个用户即将作为第一个存款人将 100 个 token 存入一个新的 vault。如果攻击者抢先于这笔初始存款,哪怕只有 1 wei,这个微小的存款仍然会使攻击者获得池子的 100% 份额。
接下来,攻击者向 vault 捐赠大于或等于 100 个 token 的金额。此操作会增加池子的总余额,同时保持流通中的股份数量。
当初始用户存入的 100 个 token 到达池子时,由于池子股份是根据捐赠的 token 余额计算的(在本例中,100/101 向下取整为 0),因此他们股份的计算结果最终为零。
最后,攻击者从池子中提取他们的份额。由于他们是唯一拥有任何股份的人,因此这次提取等于 vault 的余额。这意味着攻击者还会提取初始用户存入的 100 个 token,从而有效地窃取他们的存款。
OpenZeppelin 的目标是提供 ERC4626 的实现,该实现可以开箱即用地防范此类威胁。
我们考虑了几种缓解策略,每种策略都有其自身的潜在优势和劣势。
这是一种相对简单的方法,但它可能只是规避问题,而不是直接解决问题。
优点:
缺点:
第二种策略旨在通过内部跟踪 vault 持有的资产来消除直接转账的影响。这意味着捐赠的 token 不会被考虑在内,从而有效地消除了通货膨胀攻击的风险。
优点:
缺点:
该策略的灵感来自 Uniswap V2,后者在首次存入流动性时创建了死亡 LP 股份。在 ERC4626 vault 中,可以通过在首次存款/铸币时铸造死亡股份来实现类似的方法。
优点:
缺点:
为了构建一种有效缓解 ERC-4626 通货膨胀攻击风险的解决方案,我们检查了整个生态系统中现有的策略。
Morpho DAO 通过在初始化时将资产存入 vault 来减轻通货膨胀攻击。相应的股份被铸造到 vault 本身,该 vault 用作非运营地址。此策略类似于创建死亡股份,但损失由项目承担。最初存入的资产越多,执行通货膨胀攻击就越困难。但是,必须有足够的资金用于初始存款,因为它们实际上会丢失。
虽然此方法的实现过程很简单,但需要预先计算 vault 的地址,并且必须在部署之前授予批准。
YieldBox 通过将“虚拟”数量的股份和资产添加到 vault 来计算汇率。这种方法反映了创建死亡股份的行为,但没有必要销毁任何 token 来铸造它们。虽然它纠正了早期存款人的缺点,但 vault 从直接转账或 re-basing 中收到的任何 token 的一部分将会丢失。
通过将资产偏移设置为 1,将供应偏移设置为 1e8,可以建立股份的内部定点表示。这允许将股份表示为小至 0.00000001 wei,并且对实际用户的损失(如果有的话)将是微不足道的,因为虚拟资产的数量是最小的。
对于 OpenZeppelin 合约的实现,我们设计了一种解决方案,该解决方案同时使用了虚拟偏移和小数偏移。这可以防止创建死亡股份的缺点,即必须放弃一些基础资产。
小数偏移允许通过增加股份的小数位数超过基础 token 的小数位数来直接调整攻击的盈利能力。
虚拟偏移通过在汇率计算中同时包含虚拟股份和虚拟资产来限制攻击者有效操纵汇率的能力。当 vault 为空时,虚拟资产会强制执行转换率。
由于虚拟资产而产生的余额偏移以及小数偏移的精度提高,减少了计算股份数量时的舍入误差。攻击失去了盈利能力,因为虚拟资产和股份捕获了部分捐赠。
%209.45.57%20a.%20m..png?width=700&height=701&name=Captura%20de%20pantalla%202025-03-05%20a%20la(s)%209.45.57%20a.%20m..png)
即使没有小数偏移,虚拟股份和资产的存在也使得这种攻击无利可图。偏移越大,攻击者在攻击期间损失的越多,因此抵御通货膨胀攻击的安全性就越高。
我们实施 ERC-4626 以优先考虑安全性,并允许开发人员专注于构建。通过利用 OpenZeppelin 合约的功能并实施推荐的防御机制,开发人员可以加强其应用程序并保护用户资产。
如果你想与 OpenZeppelin 合作进行安全审计,或者需要有关保护你的 ERC4626 vault 的更多指导,请联系我们。
参考资料:
- 原文链接: openzeppelin.com/news/a-...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!