1月3日,Radiant Capital项目遭受了一次严重的闪电贷攻击,导致了1900枚ETH(约450万美元)的损失。Radiant Capital是一个去中心化的跨链借贷协议,它允许用户在不同的区块链上存入和借出各种资产,从而消除流动性孤岛。
根据链上数据显示,黑客利用了一个新市场激活的时间窗口,以及Compound/Aave代码库中的一个舍入问题,来执行一个闪电贷攻击。这种攻击方式是指借用大量的资金,在一个区块内完成一系列的操作,然后在区块结束前归还资金,从而获利。
漏洞攻击简要
根据PeckShield和派盾的报告,攻击者利用了Radiant Capital的一个计算漏洞,通过控制精度和四舍五入的方式,使得他们可以以低价提取大量的USDC。USDC是一种稳定币,它的价值与美元挂钩,是去中心化金融协议中常用的资产之一。
攻击者的攻击流程如下:
1. 攻击者首先通过AAVE闪电贷借贷了300万枚USDC,用于攻击启动资金。闪电贷是指借用大量的资金,在一个区块内完成一系列的操作,然后在区块结束前归还资金,从而获利。
2. 攻击者将200万枚USDC质押到Radiant合约,并获得了200万枚rUSDCn凭证代币。
3. 攻击者通过Radiant合约进行闪电贷,借贷200万USDC,并在回调函数中将200万USDC归还,同时将第二步质押的USDC提取出来,最后闪电贷函数会调用transferfrom函数连本带利的将攻击者的USDC转入合约。此时会收取9/10000的手续费,而收取的手续费便成为了池子的流动性。
4. 攻击者通过多次重复步骤3的操作,将liquidityIndex控制得很大,liquidityIndex=271800000000999999999999998631966035920。liquidityIndex是Radiant合约中用来记录流动性增长的变量,它会随着时间和利息的累积而增加。
5. 接下来,攻击者新建了一个合约,并向其中打入54.36万USDC,因为5436(USDC数值)正好是步骤4中2718(liquidityIndex数值)的两倍,可方便进行四舍五入控制。
6. 攻击者将54.36万USDC全部抵押进Radiant合约,并获得相同数量的rUSDCn。
7. 攻击者提取40.77万USDC,本应该销毁40.77万rUSDCn,但如上所述,burn函数进行了精度扩展与四舍五入计算。407700000000000000000000000000000000000/271800000000999999999999998631966035920=1.49999999,而四舍五入结果为1,导致结果偏小了1/3。如下图,本该销毁40.77万,但还剩27.18万,说明只销毁了27.18万,攻击者便提取了40.77万USDC。
8. 攻击者利用第七步的漏洞,重复质押提取操作,并且提取始终比质押数量多1/3,最终将池子里的USDC全部兑换出来。
当前资金没有面临风险
Radiant Capital在其官方帖子中承认了这一问题,并表示已经暂停了其在Arbitrum上的借贷市场,正在调查事件的原因和影响。Arbitrum是一个二层扩展解决方案,它可以提高以太坊的交易速度和降低成本。Radiant Capital还表示,目前没有用户的资金面临风险,计划在问题解决后发布检测报告,并恢复运营。
结语:
这一事件再次提醒了我们,去中心化金融协议的安全性是至关重要的,需要不断地进行审计和测试,以防止潜在的漏洞和攻击。用户也应该注意风险,只在信任的平台上参与借贷和投资。Radiant Capital虽然遭受了重大损失,但也表现出了积极的态度和责任感,希望它能尽快恢复并改进其协议的安全性和稳定性。同时,我也希望其他的去中心化金融协议能够从这一事件中吸取教训,加强自身的安全防范,为用户提供更好的服务和体验。#RadiantCapital #黑客攻击