XSURGE 攻击事件的全面梳理 -ODAILY

前言

8月17日,BSC链上的XSURGE协议遭到闪电贷攻击,损失超过500万美元。对此,知道创宇区块链安全实验室对攻击流程和代码细节进行了全盘梳理。

全盘梳理

基础信息

-攻击tx:0x7e2a6ec08464e8e0118368cb933dc64ed9ce36445ecf9c49cacb970ea78531d2-攻击合约:

0x1514AAA4dCF56c4Aa90da6a4ed19118E6800dc46

-SurgeToken:

0xE1E1Aa58983F6b8eE8E4eCD206ceA6578F036c21

0xScope:某EOA地址现持有约5900万枚ARB,或为Upbit热钱包地址:3月31日消息,Web3知识图谱协议0xscope在社交媒体上发文表示,某EOA地址在过去一日内收集了大量ARB,目前已持有约5900万枚,价值约合8440万美元。0xScope补充表示,据活动数据显示,0xScope认为该地址可能是Upbit热钱包地址,若推测是正确的,那么Upbit平台持有的ARB数量将仅次于Binance。

此前报道,韩国加密交易平台Upbit昨日表示将上线ARB,设有ARB/KRW以及ARB/BTC交易对,计划于北京时间3月30日14:00开始交易。[2023/3/31 13:37:05]

攻击流程

0xScope联创:KuCoin中USDT数量下滑或为整理钱包所致:11月9日消息,加密研究员Claude GU发推回应0xScope联合创始人Oar,称KuCoin里USDT数量下滑的原因是正好有一笔3亿枚ERC20USDT被换成了TRC20USDT,应该是用来平衡交易所稳定币水位的。Oar回复称应该是整理钱包。[2022/11/9 12:38:05]

这里有个小细节,代币转移流程中的顺序是按照事件先后顺序来显示的,而重入之后的买操作引起的事件会在卖操作引起的事件之前,所以在流程中看到的每一个单独的重入攻击中是SURGE的买入发生在卖出之前。

漏洞原理

漏洞点在于SurgeToken合约中的sell()函数,其中对调用者msg.sender的BNB转账采用的call()函数,并且在转账之后才更新代币总量_totalSupply,是典型的重入漏洞场景。

Axie Infinity将养殖费用由4AXS降为2AXS:8月11日消息,NFT游戏Axie Infinity基于AXS和SLP相对价值的变化,将养殖费用由4AXS降为2AXS,用于平衡Axie经济。与此同时,在过去的24小时内AXS涨幅逾50%,创下历史新高。

注,养殖费用是玩家繁殖Axies以创造新宠物时收取的费用,是Axie经济系统的核心,在此系统中玩家生产出新的Axies并消耗SLP。[2021/8/11 1:48:00]

虽然\nsell()函数使用了nonReentrant修饰防止了重入,但purchase()函数并没有。重入转回BNB给合约,触发\nfallback函数调用purchase(),由于_totalSupply尚未减去卖出量,而导致可买入相较正常更多的SURGE代币。

聚币Jubi将于2021年1月13日18:00上线FXS/USDT:据官方消息,聚币Jubi将于2021年1月13日18:00(UTC+8)上线FXS(Frax),FXS的充值提现已开放。在聚币Jubi存入FXS可获得“充币挖矿”双倍算力。

Frax是一个分数算法稳定币。Frax协议向世界介绍了一种加密货币的概念,即部分靠抵押支撑,部分靠算法稳定。[2021/1/13 16:04:46]

复现

价格分析

声音 | FXStreet分析师:9000美元将成为比特币主要支撑线:FXStreet分析师John Isige分析指出:近期上涨受到趋势线阻力下降的限制,同时近期下跌受到200日均线的保护。在MACD处于正区域的情况下,买家处于相对控制之中,且MACD还出现看涨交叉。相对强度指数(RSI)水平移动到60日线,并且已经持续一个多星期。接下来,9000美元将成为BTC的主要支撑线,但8800美元也将在需要时提供支持。[2019/11/4]

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代币而获利。

简而言之,典型的重入漏洞场景,教科书级的案例。

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

银河链

Polygon详解货币交易专业术语-ODAILY

货币术语 学习任何新技能之前,你需要学习相关的术语。作为货币交易的新手,在进行第一笔交易之前,你需要知道货币相关的术语。 主流货币和非主流货币 交易量最大的8种货币被称为主流货币或主要货币,它们是流动性最强的货币.

[0:15ms0-1:422ms