不安分的黑客又“偷袭”?MonoX被攻击事件全解析
11月30日,链bing搜索-区块链技术安全性入侵检测服务平台舆情监测表明,全自动做市商协议书MonoX遭闪电贷进攻,盈利约3100万美金。有关此次进攻,成都市链安技术性精英团队第一时间开展了事情剖析。
#1 事情概述
进攻产生以后,MonoX在官方网twiter确定其合同遭受进攻,精英团队正在调查并将尽最大的勤奋讨回失窃资产。
MonoX应用一侧代币池实体模型,其应用vCASH稳定币与AMM给予的代币建立虚似的买卖对。简易而言,MonoX建立的是代币-vCASH买卖对,加上流通性时,只要加上代币,开展随意代币兑换时,兑换途径为:代币A -> vCASH -> 代币B,而不用像Uniswap一样通过好几个买卖对:代币A -> Pair1-> Pair2-> Pair3-> Token B。
#2 事情深入分析
攻击者应用同样的详细地址
0xEcbE385F78041895c311070F344b55BfAa953258对以太币及其MATIC上的MonoX进行了进攻,在俩个服务平台开展进攻所实施的合同一致。进攻买卖为:
以太币:
0x9f14d093a2349de08f02fc0fb018dadb449351d0cdb7d0738ff69cc6fef5f299
MATIC:
0x5a03b9c03eedcb9ec6e70c6841eaa4976a732d050a6218969e39483bb3004d5d
因为2个服务平台编码完全一致,下边的研究将根据以太币上的进攻买卖开展。
Round 1
将 0.1 WETH 根据 Monoswap中兑换为79.98609431154262101 MONO;
Round 2
清除Monoswap全部的流通性。这儿运用了Monoswap合同中的随意详细地址流通性清除系统漏洞。
漏洞1:
Monoswap合同中未检验流通性的使用者to是不是为msg.sender。_removeLiquidity函数公式中,如下图2所显示,第443行,获得调用者(进攻合同)最后一次加上流通性的时间格式,回到结论是0,因而第445行的检验根据。第446行,topLPHolderOf要不是调用者(进攻合同)详细地址,第447行的检验根据。此后清除流通性有关编码中,再无msg.sender有关的实际操作。
Round 3
加上非常少总数的MONO到Monoswap中,这一步是为了更好地后边迅速提高MONO的价钱做准备。
Round 4
运用Monoswap合同中的代币兑换价钱覆写系统漏洞,不断开展相同代币的兑换,拉涨MONO的价钱。第3步攻击者将Monoswap合同中MONO的储藏量操纵到了一个较小的值,目地便是快速的以较低的MONO总数来拉涨MONO的价钱。
系统漏洞2:
Monoswap合同的代币兑换全过程为:查验兑换主要参数是不是正常的,随后测算应I/O代币的总数及其代币兑换后的价钱,最终实行兑换实际操作并将新的代币价钱载入帐簿。以上逻辑性在差异种代币兑换的过程中会正常的运作。可是在相同代币兑换时,将发生两处问题:
(1) 在_getNewPrice函数测算应I/O代币总数时,未充分考虑兑换全过程中买卖池代币储藏量的变动,相同代币是根据同样的原始价钱开展兑换后价钱的测算。
(2)在最后一步升级代币全过程中,未充分考虑相同代币开展兑换时,兑出代币的价钱升级实际操作(图6 第841行)会遮盖兑入代币升级的实际操作(图6 第830行)。该系统漏洞造成MONO代币兑换MONO代币时,MONO的价钱出现异常提高。除此之外不仅攻击者应用的swapExactTokenForToken函数存有该问题,swapTokenForExactToken函数也出现该问题。
如今看一下攻击者是怎样运用系统漏洞2开展伤害的:
(1)如下图10所显示,原始MONO的价钱为5.218 vCASH/MONO。
随后攻击者不断开展MONO->MONO的兑换,一共完成了55次兑换,如下图所示:
对在其中一笔兑换买卖开展剖析,每一次兑换的总量是买卖池里MONO的总产量减掉1,这也是可以较大提高MONO价钱的兑换总数(使图8 _getNewPrice第527行,分母为1)。此外因为买卖池里MONO的总产量较低(第3步的实际操作),攻击者已经根据第1步确保了有充足的账户余额开展兑换实际操作。
截止至兑换完毕时,MONO的价位已经被拉升到843,741,636,512.366 vCASH/MONO。进攻合同中剩下51.92049285389317 MONO。
(2)根据Uniswap V2的USDC/WETH池借入了847.2066974335073 WETH。随后攻击者根据Monoswap将0.0709532091008681 MONO 兑换为4,029,106.880396 USDC,随后将USDC退还给USDC/WETH池。留意,这儿事实上是攻击者将从Monoswap中兑换的USDC到Uniswap V2中兑换为WETH,而不是闪电贷进攻。
(3)攻击者全部转走的财产如下所示:
货币
总数
USDC
4,029,106.880396 (兑换为847.2066974335073 WETH)
4,525,120.098829 (兑换为949.0325798508261 WETH)
WETH
452.9120530334938
WBTC
21.42797145
DUCK
5,155,863.718616853
MIM
4,125.858256772
IMX
274.9390440877583
全部失窃财产所有发送至
0x8f6a86f3ab015f4d03ddb13abb02710e6d7ab31b详细地址。
现阶段新项目方已经和攻击者开展了沟通交流,成都市链安将不断对于此事情况开展监管。
#3 事情总结
此次进攻事情中,攻击者运用了合同中的2个系统漏洞:(1)一切详细地址都能够随意清除特定地点的流通性;(2)特殊情况下的价钱载入实际操作遮盖问题。
提议新项目放在开展合同开发设计流程中搞好管理权限的查验;在开发设计及其检测过程中将特殊情况列入考虑到,例如相同代币转帐。
- 免责声明
- 世链财经作为开放的信息发布平台,所有资讯仅代表作者个人观点,与世链财经无关。如文章、图片、音频或视频出现侵权、违规及其他不当言论,请提供相关材料,发送到:2785592653@qq.com。
- 风险提示:本站所提供的资讯不代表任何投资暗示。投资有风险,入市须谨慎。
- 世链粉丝群:提供最新热点新闻,空投糖果、红包等福利,微信:juu3644。