背景介绍
我们最近在以太坊网络上发现了一起攻击事件,具体交易详情可以在以下链接查看:https://etherscan.io/tx/0x725f0d65340c859e0f64e72ca8260220c526c3e0ccde530004160809f6177940。这次攻击让攻击者从中获利649.6 WETH,约合170万美元。被攻击的项目是Bedrock,这是一个由RockX合作开发的非托管多资产流动性重新抵押协议。Bedrock支持多种资产进行重新抵押/抵押,包括:
最安全的虚拟币交易平台推荐:
- OKX(欧易交易所)>>>进入官网<<< >>>官方下载<<<
- Binance(币安交易所)>>>进入官网<<< >>>官方下载<<<
uniBTC:这是一个全新的重新抵押协议,与BTC抵押协议Babylon Chain合作,支持包装的BTC代币。在以太坊区块链上,首个支持的包装BTC是wBTC代币,这意味着所有wBTC代币持有者可以同时享受抵押BTC的收益和以太坊网络的安全性。
uniETH:设计用于本地重新抵押,并获得额外的EigenLayer奖励。Bedrock将机构级别的安全性和额外的收益结合在一起,用于流动抵押ETH。
uniIOTX:在IoTeX区块链上提供的流动抵押解决方案,旨在消除在IOTX上的委托权益证明中的一些缺点。
攻击及事件分析
首先,攻击者通过Balancer借贷了30.8 WETH。
接着,攻击者调用了Bedrock Vault的mint函数,并转入了通过闪电贷借到的30.8 ETH。
我们来看一下mint函数的逻辑,如下图,调用了_mint函数,
随后,我们再来看一下_mint函数的逻辑,
然后,通过函数_amounts计算出需要mint给msg.sender的uniBTC数量。
其中_amount为转入的WETH数量,且EXCHANGE_RATE_BASE为1e10,所以兑换的比例为1 : 1e8(因为uniBTC的decimal为1e8,所以兑换比例为1 ETH : 1 uniBTC)。随后,攻击者通过Uniswap将30.8 uniBTC换成了27.8 WBTC,兑换比例约为1 : 1。最后,攻击者将兑换到的27.8 WBTC通过Uniswap兑换为680.4 WETH,其中还了30.8 WETH的借贷。因此,攻击者最终获利649.6 WETH,约合170万美元。
总结
这次漏洞的根本原因在于没有正确处理WETH和uniBTC的兑换比例,导致WETH和uniBTC可以以1 : 1兑换,WETH的价值被放大了数万倍。攻击者利用这种失真的价格,通过借贷进行获利,最终用借来的WETH掏空了项目方的uniBTC代币。这真是一个令人震惊的案例,提醒我们即使是看似安全的协议也可能存在致命的漏洞。





