攻击者先使用闪电贷获取大量资金,通过抵押、借贷、交易等协议扭曲资产价格数据后,实施了套利。
原文标题:《甜蜜一击?谁是幕后黑手?BSC 链上 XSURGE 遭闪电贷攻击全解析》
撰文:成都链安
8 月 17 日,链必安-区块链安全态势感知平台(Beosin-Eagle Eye)舆情监测显示,BSC 链上 DeFi 协议 XSURGE 遭到闪电贷攻击,攻击者利用合约的重入漏洞获利超过 13111BNB。关于本次攻击,成都链安技术团队第一时间进行了事件分析。
事件概览
攻击如何发生(Event overview)
DeFi 项目 XSURGE 今日遭遇闪电贷攻击,不过在 XSURGE 在遭攻击前,官方发布了关于 SurgeBNB 漏洞的声明。
XSURGE 表示,当地时间 8 月 16 日发现了 SurgeBNB 合约的潜在安全漏洞。由于 SurgeBNB 合约不可更改且已被放弃,因此无法追溯修补该代币。XSURGE 没有透露任何关于此漏洞性质的具体细节,但强烈建议用户尽快迁移出 SurgereBNB,因为该漏洞随时都可能被攻击者触发。
说时迟那时快,在声明发布后,XSURGE 随后便表示遭遇攻击,这甜蜜一击让项目方防不胜防。官方称,攻击者通过后门漏洞在 SurgeBNB 中窃取了 500 万美元。由于 SurgeUSD 或 SurgeETH 不提取 BNB,因此它们不能成为未来攻击的目标。
回到本次闪电贷攻击,让我们看看这一次的攻击者是如何实现「空手套白狼」的。
事件具体分析
攻击者如何得手(Event overview)
攻击者地址:
0x59c686272e6f11dC8701A162F938fb085D940ad3
攻击合约
以交易
0x8c93d6e5d6b3ec7478b4195123a696dbc82a3441be090e048fe4b33a242ef09d 为例
Round 0
先通过闪电贷借出 10,000BNB。
Round 1
用所有的的 BNB 去购买 SURGE,根据当前价格,能买到 1,896,594,328,449,690 SURGE。
获取的 SURGE
Round 2
调用 sell 函数卖出所获得的 SURGE,卖出了 9346 个 BNB。
Round 3
因为 sell 函数是先转账后修改数据,且转账代码中存在重入漏洞。在攻击合约收到 BNB 时,SURGE 合约的状态改变前(第 595 行代码),攻击合约可通过重入漏洞再次购买 SURGE。
由于攻击合约每次都将所有 BNB 余额用于购买 SURGE,合约的 bnbAmount 不变,而 SURGE 的代币总量 _ totalSupply 未更新(仍为 sell 之前的数量),因此 SURGE 价格降低,导致攻击者可以买到更多的 SURGE。
Round 4
重复 3 次 Round2、Round3,攻击者通过重入累积了大量的 SURGE,之后将所有的 SURGE 全部卖出便可以获利。
这笔交易的最后,攻击合约卖了 1,864,120,345,279,610,000 SURGE,获得了 10327 BNB,最后将获利的 297 BNB 发送给攻击者地址。
事件复盘
我们需要注意什么 (Case Review)
对于本次攻击事件,成都链安技术团队给出的修改建议为:
为防止重入攻击,任何转账操作都应该发生在状态改变后;
使用 transfer 或 send 进行转账,不要使用 call.value。
在此类安全事件中,攻击者通常属于「空手套白狼」,先使用闪电贷获取大量资金,拥有了攻击的启动「砝码」后,再通过一系列手段出入各类抵押、借贷、交易等协议,在实现操纵、扭曲资产价格数据后,实施套利,最后归还「本金」。
注意
本次事件,攻击者利用合约的重入漏洞获利超过 13111BNB,成都链安在此提醒各位用户注意风控,比如在官方发布关于 SurgeBNB 漏洞的声明后,要及时采取相应措施。
内容搜集自网络,整理者:BTCover,如若侵权请联系站长,会尽快删除。