By:flush@慢雾安全团队
据慢雾区情报,MDEX的XSquid和HT代币池子中HT代币在没有进行swap的情况下被频繁抽取,慢雾安全团队对此介入分析,并将简要分析分享如下。
攻击核心
本次攻击的核心在于利用XSquid映射通缩型代币的模型,在转账后会发生通缩,自身合约所获取的balanceOf与通过Mdexpair池所获取到的reserve不匹配的问题,使得攻击者可以抽取池中的HT代币。
攻击细节
Polygon链上自由职业和招聘平台DeeLance已募集超12万美元融资:金色财经报道,Polygon链上自由职业和招聘平台DeeLance已募集超12万美元预售轮融资,该平台主要为世界各地用户用来找工作(自由职业者)和找人雇用(企业),利用区块链技术改变自由职业者与潜在雇主的联系方式。DeeLance还打造了元宇宙环境,自由职业者可以在其中拥有自己的办公室并支持通过语音或视频电话会议与雇主互动。(augustafreepress)[2023/4/14 14:03:42]
由链上分析工具我们可以看到,这笔交易中Mdexpair池最终向攻击者转移了0.003枚WHT代币,而链上的交易记录显示还有很多笔这样的交易与之相同。
Aptos Labs宣布启动其区块链主网Aptos Autumn:金色财经报道,Aptos Labs于周一宣布启动其区块链主网Aptos Autumn,区块链代码基于Move编写,Move是一种基于Rust的编程语言,Move智能合约可升级并支持所有Aptos应用程序的安全演进。当前的Aptos区块链利用了Aptos BFT(第4版)的最新迭代,Aptos BFT第5版的开发已经在进行中,并将在未来的升级中发布。虽然Aptos Labs已宣布其网络上线,但其生态系统还远未完成。
此前报道,在获得由a16z领投的两亿美元融资后,Aptos项目备受行业关注。此前7月份,Aptos完成了由FTX Ventures和Jump Crypto领投、币安实验室参与的1.5亿美元A轮融资,第二轮融资将该公司的估值定为20亿美元,是该公司六个月前估值的四倍。[2022/10/18 17:29:37]
接下来我们仔细观察这笔交易的细节,这是一个XSquid和HT的MdexPair池,在对XSquid进行swap转账前pair合约通过getReserves接口所获取到池子中_reserve0为1010.505640800917497232。但在下一步通过XSquid合约的balanceOf获取pair余额后我们却发现结果为1010.5060773394782,数量上存在明显的差异。
Celsius提出新提议以每月9.2万美元雇用其前CFO已帮助解决破产程序:金色财经报道,破产的Celsius已经提出新的提议,要求以每月9.2万美元的价格重新雇用其前首席财务官Rod Bolger。该公司称需要Bolger作为顾问帮助其驾驭破产程序。该议案进一步强调,Bolger此前曾领导努力在动荡阶段保持业务稳定。
此外,该文件还显示,由于Bolger先生对债务人业务的熟悉,债务人已要求,并且Bolger先生已同意在法院批准之前根据咨询协议继续向债务人提供咨询和咨询服务。
据悉,由纽约南区决定是否批准Bolger重新加入Celsius,并将于于8月8日星期一举行Zoom听证会,以审议该动议。[2022/8/4 12:01:50]
但是在最后一次更新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进来。这时攻击者只需要调用MdexPair合约的swap函数根据上诉计算的差额来抽取代币,或者是调用skim函数直接转走代币。由此,可从池子中抽离这一小部分“多余”而不属于他的HT。对此,我们可以在每次转账最后通过调用sync函数强制准备金与余额匹配同步更新,来避免以上不匹配的问题。
总结
此次抽池的核心问题在于“通缩映射型代币”与项目合约不兼容所导致的。而代币与DeFi项目合约代码不兼容所导致的安全问题已是重复出现的老问题了,慢雾安全团队再次提醒:由于DeFi项目需要多个合约间进行交互,在进行设计时项目方应充分考虑不同合约间交互的兼容性问题,并确保交易对与项?是相互兼容的。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。