前言
8月17日,BSC链上的XSURGE协议遭到闪电贷攻击,损失超过500万美元。对此,知道创宇区块链安全实验室对攻击流程和代码细节进行了全盘梳理。
全盘梳理
基础信息
-攻击tx:0x7e2a6ec08464e8e0118368cb933dc64ed9ce36445ecf9c49cacb970ea78531d2-攻击合约:
0x1514AAA4dCF56c4Aa90da6a4ed19118E6800dc46
StraitsX在Hedra上推出新加坡元稳定币XSGD:5月24日消息,数字资产支付基础设施StraitsX在Hedra上推出新加坡元稳定币XSGD,用户可通过StraitsX平台在Hedera网络上发送和接收XSGD。Hedra基金会表示XSGD可能会在未来几个月内上线交易所。[2023/5/24 22:15:30]
-SurgeToken:
0xE1E1Aa58983F6b8eE8E4eCD206ceA6578F036c21
攻击流程
0xScope:PSYOP创建者持有代币总供应量的93.45%,请注意风险:5月22日消息,Web3知识图谱协议0xScope发推文称,由加密KOL ben.eth推出的新Meme币项目PSYOP的代币分配极度中心化,该代币的供应量的93.45%由Ben持有,5%属于流动资金池。这意味着Ben收到了 650万美元,并向捐助者发送了他新代币的1%。请投资者注意风险。据悉,而在PSYOP启动前,ben.eth曾在5月5日启动过另一个Meme币BEN,在Bitboy推销BEN使其价格上升后,他在该代币推出不到72小时后便将其交给了Bitboy,尽管Ben曾承诺BEN是他一生的项目。[2023/5/22 15:18:37]
这里有个小细节,代币转移流程中的顺序是按照事件先后顺序来显示的,而重入之后的买操作引起的事件会在卖操作引起的事件之前,所以在流程中看到的每一个单独的重入攻击中是SURGE的买入发生在卖出之前。
Axie Infinity团队地址将40万枚AXS转入币安,约合319万美元:3月16日消息,Web3知识图谱协议0xscope发推表示,属于Axie Infinity团队的地址于半个小时前再次将40万枚AXS(约合319万美元)转入币安。[2023/3/16 13:07:59]
漏洞原理
漏洞点在于SurgeToken合约中的sell()函数,其中对调用者msg.sender的BNB转账采用的call()函数,并且在转账之后才更新代币总量_totalSupply,是典型的重入漏洞场景。
虽然sell()函数使用了nonReentrant修饰防止了重入,但purchase()函数并没有。重入转回BNB给合约,触发fallback函数调用purchase(),由于_totalSupply尚未减去卖出量,而导致可买入相较正常更多的SURGE代币。
复现
价格分析
sell()函数卖出过程中,输入tokenAmount与输出amountBNB的关系:
purchase()函数买入过程中,输入bnbAmount与输出tokensToSend的关系:
在重入过程中,sell()函数卖出后获得的BNB通过重入打回SurgeToken合约传入purchase()函数故令sell()函数的输出amountBNB与purchase()函数的输入bnbAmount相等,可得到整个利用流程中输入与输出的关系:
若要实现套利,需要输出大于输入,则有:
最后得到:
也就是说重入套利过程中调用sell()卖出的代币量必须在代币总量的12.383%以上
模拟演示
为方便调试,将SurgeToken合约中的mint()函数可见性改为public,并为构造函数增加payable修饰,在部署时传入10^15wei。
SurgeToken合约初始化的代币总量为10^9,根据前面推导出的结论,为攻击合约铸币200000000,则攻击合约拥有大约SURGE代币总量16%的代币。
攻击合约调用Attack()函数攻击,查看攻击合约的代币余额已变为209549307,获利9549307。
总结
XSURGE协议被攻击的本质原因在于sell()函数中存在重入漏洞,导致可通过purchase函数买入较多的SURGE代币而获利。
简而言之,典型的重入漏洞场景,教科书级的案例。
Gate.ioNFT魔盒交易手续费优惠期现已结束,即日起手续费将调整为1%,欢迎用户前往体验:https://www.gate.tv/nft此外.
尊敬的用户:?????????????BKEXGlobal即将上线TALK,详情如下:上线交易对:TALK/USDT币种类型:ERC20?充值功能开放时间:2021年10月8日14:30交易功能.
尊敬的Orangex用户:Orangex关于“国庆狂欢月,嗨翻一整周:注册交易即可领5000U&7日百万红包雨”活动已圆满结束,活动奖励已于10月9日全部发放完毕至用户资金账户中.
本文来自Coinmarketcap,原文作者:BrendanMurray,由Odaily星球日报译者Katie辜编译。跨链桥是区块链生态系统的重要部分.
亲爱的用户:币安将于2021年10月07日15:00上线Radicle,并开通RAD/BTC、RAD/BNB、RAD/BUSD、RAD/USDT交易对.
链闻消息,印度加密交易所CoinSwitchKuber以19亿美元估值完成2.6亿美元C轮融资,a16z和CoinbaseVentures领投.