前言
8月17日,BSC链上的XSURGE协议遭到闪电贷攻击,损失超过500万美元。对此,知道创宇区块链安全实验室对攻击流程和代码细节进行了全盘梳理。
全盘梳理
基础信息
-攻击tx:0x7e2a6ec08464e8e0118368cb933dc64ed9ce36445ecf9c49cacb970ea78531d2-攻击合约:
0x1514AAA4dCF56c4Aa90da6a4ed19118E6800dc46
-SurgeToken:
0xE1E1Aa58983F6b8eE8E4eCD206ceA6578F036c21
公告 | Pundi X:将于5月11日从总供应量中永久移除约69亿枚NPXSXEM和75亿枚NPXS:5月4日,Pundi X官方发布消息称,2019年第一季度的NPXS和NPXSXEM代币移除将于5月11日进行。移除数量分别为:NPXSXEM:6,952,786,956.99(约69亿枚);NPXS:7,592,770,954.46(约75亿枚),一共将从总供应量中永久移除14,545,557,911.45(约145亿枚)代币。[2019/5/4]
攻击流程
声音 | fxstreet分析师:持仓者应留意未来一周行情以调整仓位:据fxstreet分析师分析,比特币在上周一开始就试探到了最近的低点,在6154.00附近触底。到目前为止,比特币一直处于平衡状态,无法突破目前6230.00附近的上限,因为买家阻止比特币进一步上涨。持仓者应留意未来一周的牛市行情,以调整仓位,然后再回到稳定的空头仓位,这是自8月中旬以来BTC/USD的常见走势。[2018/10/15]
这里有个小细节,代币转移流程中的顺序是按照事件先后顺序来显示的,而重入之后的买操作引起的事件会在卖操作引起的事件之前,所以在流程中看到的每一个单独的重入攻击中是SURGE的买入发生在卖出之前。
漏洞原理
漏洞点在于SurgeToken合约中的sell()函数,其中对调用者msg.sender的BNB转账采用的call()函数,并且在转账之后才更新代币总量_totalSupply,是典型的重入漏洞场景。
NPXS继续领涨市值前百币种:NPXS涨幅29.84%,现全球均价0.0035美元,市值前100的币种中涨幅第一,这是NPXS继昨日领涨前百币种后继续强势上涨。据Pundi X昨日消息,NPXS将以0.0030美元至0.0036 美元的价格回购,回购总额相当于2000个ETH,并将分阶段推出,第一阶段将在未来数周内完成。[2018/4/18]
虽然\nsell()函数使用了nonReentrant修饰防止了重入,但purchase()函数并没有。重入转回BNB给合约,触发\nfallback函数调用purchase(),由于_totalSupply尚未减去卖出量,而导致可买入相较正常更多的SURGE代币。
MegaXstore.com 将接受HTML付款:网上零售平台 MegaXstore.com 官方推特称将于3月2日起接受HTML付款。HTML现全球均价0.000774 美元,24小时涨幅10.68%。[2018/2/25]
复现
价格分析
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代币而获利。
简而言之,典型的重入漏洞场景,教科书级的案例。
撰文:Footprint分析师Bella(bella@footprint.network)日期:2021年11月公链发展的背景公链,简单的说就是承载各种类型的defi等应用开发的网络.
1900/1/1 0:00:00DAOrayakiDAO研究奖金池:大约一周前,我们发布了下面这条推文,并收到了大量回复: 文档和团队知识管理工具是DAO的一大痛点.
1900/1/1 0:00:00PocketNetwork是去中心化的基础设施中间件协议,通过全节点实现DApps与区块链网络之间的互操作与匹配,为区块链上的DApps提供RPC中继服务.
1900/1/1 0:00:00#二次方信任概念来源我们如何才能更轻松的支持开源项目:二次方融资,是大众通过资金支持项目发展的方式之一。但并不是每个人都有闲钱展开支持。项目也可以从非金钱支持中受益,比如建议、人脉或时间.
1900/1/1 0:00:00吴说作者|袁奔本期编辑|ColinWu近期,比特币将迎来自己的的一次重要的软分叉升级Taproot,超过90%的矿工同意了这次升级,因此不太可能会出现SegWit升级时出现的社区分叉论战.
1900/1/1 0:00:00非洲需要数字化转型。为了在非洲创建一个综合和包容的数字社会和经济,改变社区、经济和公民的生活,它必须利用数字技术和创新.
1900/1/1 0:00:00