TLDR:

RedSonic 金库在攻击者完全利用双重资产定价漏洞后损失了 9.25 ETH。

一个无需许可的 registerErc20 函数让攻击者添加了第二个冲突的 stETH 份额类别。

攻击者从 Balancer 闪电贷借入 1,139 WETH,无需任何自有启动资金。

ExVulSec 追踪了完整的漏洞利用过程,包括 Curve 兑换和最终的贷款偿还步骤。

攻击者操纵了一个无需许可的资产注册函数,对相同的底层抵押品进行了重复计算。链上记录显示,整个操作在单笔独立的交易中执行。

RedSonic 金库漏洞利用是如何展开的

攻击者从 Balancer 闪电贷借入 1,139 WETH 为整个操作提供资金。无需任何自有前期资本。

RedSonic 的金库通过一个名为 getTotalAssetBalance 的函数为其 rsvETH 份额定价。对于 Lido 头寸,该函数直接读取金库的原始 stETH 余额。

这一设计选择成为了漏洞利用的基础。与原始余额直接挂钩的份额价格可能会因余额的意外变化而波动。无需铸造或销毁相应的份额。

据 ExVulSec 称,金库的 registerErc20 函数没有任何访问限制。任何人都可以在金库内注册全新的资产类别。

攻击者将 stETH 注册为第二种资产,创建了一个名为 rsvstETH 的类别。两种份额类型随后都从完全相同的底层 stETH 余额中抽取。

执行完成后,漏洞利用合约自我销毁。安全研究人员指出,自我销毁的合约通常会增加后续链上追踪工作的难度。

闪电贷允许借款人在同一笔交易中偿还贷款的情况下,无需提供抵押品即可获取大额资金。攻击者通常利用这一机制来资助那些否则需要大量资本的漏洞利用。

🚨

RedSonic 金库漏洞暴露双重资产缺陷

攻击者首先存入 1,130 ETH,获得了接近 99% 的所有流通 rsvETH 份额。这一头寸为后续的漏洞利用奠定了基础。

接下来,攻击者直接向金库存入 9.34 stETH。这笔单笔存款增加了 stETH 余额,但没有铸造任何新的 rsvETH 份额。

由于 rsvETH 定价读取的是原始 stETH 余额,额外的存款人为推高了份额价格。结果,攻击者现有的 rsvETH 持仓立即增值,而无需发行任何新的 rsvETH。

据 ExVulSec 的交易分析,攻击者随后将 rsvETH 赎回为 1,139.5 ETH。这笔单笔赎回产生了全部 9.25 ETH 的利润。

同一攻击者还单独将 rsvstETH 份额赎回为 stETH。相同的底层抵押品实际上从一个共享的池化金库余额中支付了两次。

ExVulSec 报告称,回收的 stETH 在 Curve 上兑换成了 ETH。攻击者在同一笔交易中偿还了 Balancer 的闪电贷。

Etherscan 数据显示攻击者的钱包地址为 0x70f2333d21Ed7E7D105F6578227A9A747687982C。RedSonic 金库合约本身位于 0x4315990d9eeaffdfafd49958b4851f203fa1126f。

攻击交易的哈希值为 0xe3cba90e865c6cba950ebce36a52607f51f1fd33cd9fb920c78803f19b57791a。它在 Etherscan 上公开可见,供任何人验证漏洞利用的详细信息。