首页 > DEFI > 老调重弹,浅谈“通缩型代币”兼容性问题
路安  

老调重弹,浅谈“通缩型代币”兼容性问题

摘要:By:flush@慢雾安全团队据慢雾区情报,MDEX 的 XSquid 和 HT 代币池子中 HT 代币在没有进行 swap 的情况下被频繁抽取,慢雾安全团队对此介入分析,并将简要分析分享如下。攻击核

By:flush@慢雾安全团队

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

攻击核心

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

攻击细节

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

慢雾

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

慢雾

但在最后一次更新 reserve 之后,没有用户将其转移到合同中。所以我们可以定位在 balancOf 获取时造成的误差。于是我们开始查 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 进来。此时攻击者只需调用 Mdex Pair 合约的 swap 函数根据上诉计算的差额提取代币或调用 skim 函数直接转移代币。因此,这一小部分多余可以从池中抽出,而不是属于他的 HT。在这方面,我们可以在每次转账结束时调用 sync 函数强制准备金与余额匹配同步更新,避免上述不匹配问题。

总结

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

免责声明
世链财经作为开放的信息发布平台,所有资讯仅代表作者个人观点,与世链财经无关。如文章、图片、音频或视频出现侵权、违规及其他不当言论,请提供相关材料,发送到:2785592653@qq.com。
风险提示:本站所提供的资讯不代表任何投资暗示。投资有风险,入市须谨慎。
世链粉丝群:提供最新热点新闻,空投糖果、红包等福利,微信:juu3644。