一.事件背景
8月17日,有消息爆出BSC上DeFi协议XSURGE遭到闪电贷攻击,被盗金额价值500万美金。知道创宇区块链安全实验室迅速展开分析。
二.攻击合约及交易
攻击合约地址:
0x1514AAA4dCF56c4Aa90da6a4ed19118E6800dc46
Celer Network新增支持Layer1区块链Injective:4月25日消息,跨链互操作协议 Celer Network 宣布新增支持 Layer1 区块链 Injective。[2023/4/25 14:26:19]
攻击交易链接:
https://bscscan.com/tx/0x7e2a6ec08464e8e0118368cb933dc64ed9ce36445ecf9c49cacb970ea78531d2
Injective已上线关于主网集成预言机Pyth Network的治理提案投票:金色财经报道,Cosmos生态智能合约平台Injective已上线关于主网集成预言机Pyth Network的治理提案投票,将使Injective成为唯一支持IBC并在链上拥有Pyth的L1,使用户能够无缝访问加密货币和现实世界的资产数据。[2023/4/11 13:55:50]
三.事件复盘
分析攻击交易,攻击者通过闪电贷借入BNB后购买surge代币,然后不断卖出再买入,最后套利离场,分析代币源代码可以发现,这次漏洞的原因是因为合约内的sell函数导致的重入漏洞。
Injective测试网集成Pyth Network,允许开发者构建DApp以访问机构数据:3月22日消息,Cosmos生态智能合约平台Injective测试网集成预言机Pyth Network,允许开发者构建DApp以访问各种资产的高保真、高频市场数据。这是Pyth数据首次支持Cosmos生态系统。Pyth Network引入一种创新的按需拉动模型预言机,用户可以在需要时将可用价格推送到链上,并使该区块链环境中的每个人都能够访问该数据点。Pyth在Injective上运行由Wormhole实现。发布者能够以交易的形式将数据直接发送到Pyth,随后将这些数据资产放在链上。当目标链(如Injective)请求数据时,Pyth能够通过Wormhole发送数据。[2023/3/22 13:20:06]
sell函数计算完卖出代币所值BNB数量后,合约会把BNB发送给攻击合约,但是如果攻击合约此时在回退函数中又执行了purchase函数,就会导致重入的发生。
观察此次函数调用产生的影响,由于这是在sell函数中调用的purchase,所以totaslSupply还没有销毁掉sell的SurgeToken,导致totalSupply高于正常值,bnbAmount和prevBNBAmount的值会因为94%的手续费问题而有所变化,但也影响不大。
也就是说攻击者通过买入-卖出-买入的操作,以更低的代币价格获取到了更多的surge代币,值得一提的是因为sell函数中nonReentrant修饰函数的影响,攻击合约只能重复之前的操作,也说明了防重入修饰函数不能完全解决这种伪重入问题,最好的方法还是限制call函数转账调用,用更安全的transfer函数限制转账gas消耗。
四.事件总结
最近链上安全事件频繁发生,这次重入漏洞又造成了重大的经济损失,我们建议各大项目方认真审视自身代码,做好安全保障。同时官方发文称将会尽量弥补受害者被盗资金,如有最新进展,我们将会及时跟进。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。