okx

通缩型代币兼容性问题浅谈

时间:2023-07-05|浏览:198

By: flush@慢雾安全团队

根据慢雾区情报,MDEX的XSquid和HT在代币池中HT代币没有进行swap经常抽取。慢雾安全团队介入分析,简要分析如下。

攻击核心: 这次攻击的核心是使用XSquid映射通缩代币模型,转账后会发生通缩。攻击者通过自己的合同获得balanceOf与通过Mdexpair从游泳池获得的reserve不匹配的问题,从而可以抽取池中的HT代币。

攻击细节: 从链上的分析工具可以看出,在这笔交易中Mdexpair池最终将0转移给攻击者0.003枚WHT代币。链上的交易记录显示有很多这样的交易。

接下来,我们仔细观察这笔交易的细节。这是XSquid和HT的MdexPair池。在XSquid进行swap转账前,pair合同通过getReserves接口所获取到的池子中_reserve0为1010.50564080917497232。但是,通过XSquid合约的balanceOf获取pair余额后,我们发现结果是1010.506077394782,数量有明显差异。

我们发现,最后一次更新reserve之后,没有用户将其转移到合同中。所以我们可以定位在balanceOf获取时造成的误差。于是我们开始查XSquid合同,并定位为balanceOf函数合约715行。通过函数逐步跟踪balanceOf。

其中,balanceOf调用了tokenFromReflection获取tokenFromReflection映射传入函数rAmount.div(currentRate)。currentRate又是由_getRate函数决定。通过_getRate然后我们跟_getCurrentSupply函数。

根据一步一步的定位,我们发现代币在合同中_tTotal总量不会改变,最终会影响_getCurrentSupply输出结果为_rTotal值的变化。从合同中发现,XSquid是映射通缩代币,每次转账时计算_rTotal都会由_reflectFee产生通缩使_rTotal导致currentRate减少,而rAmount.div(currentRate)增加,最终导致获得balanceOf大于getReserves获得的值。

这就造成了一种错觉,让池子觉得外面又进了XSquid进来。此时攻击者只需调用MdexPair合约的swap函数根据上诉计算的差额提取代币或调用skim函数直接转移代币。因此,这一小部分多余可以从池中抽出,而不是属于他的HT。在这方面,我们可以在每次转账结束时调用sync函数强制准备金与余额匹配同步更新,避免上述不匹配问题。

总结: 抽池的核心问题是通缩映射代币与项目合同不兼容。代币和DeFi项目合同代码不兼容造成的安全问题已经是老问题,慢雾安全团队再次提醒:因为DeFi项目需要多个合同之间的交互。在设计过程中,项目方应充分考虑不同合同之间交互的兼容性,并确保交易对兼容。

热点:代币

欧易

欧易(OKX)

用戶喜愛的交易所

币安

币安(Binance)

已有账号登陆后会弹出下载

« 上一条| 下一条 »
区块链交流群
数藏交流群

合作伙伴

非小号交易所排名-专业的交易行情资讯门户网站,提供区块链比特币行情查询、比特币价格、比特币钱包、比特币智能合约、比特币量化交易策略分析,狗狗币以太坊以太币玩客币雷达币波场环保币柚子币莱特币瑞波币公信宝等虚拟加密电子数字货币价格查询汇率换算,币看比特儿火币网币安网欧易虎符抹茶XMEX合约交易所APP,比特币挖矿金色财经巴比特范非小号资讯平台。
非小号行情 yonghaoka.cn 飞鸟用好卡 ©2020-2024版权所有 桂ICP备18005582号-1