原标题|千万美元被盗——DeFi平台MonoXFinance被黑分析
作者|九九@慢雾安全团队
2021年11?30?,据慢雾区消息,DeFi平台MonoXFinance遭遇攻击,本次攻击中约合1820万美元的?WETH和1050万美元的MATIC被盗,其他被盗Token包括WBTC、LINK、GHST、DUCK、MIM和IMX,损失共计约3100万美元。慢雾安全团队第?时间介?分析,并将简要分析结果分享如下。
攻击核心
本次攻击的核?在于利?swap合约中没有对池中传?和传出代币是否相同作检查,以此利?价格更新机制的缺陷,使得攻击者传?和传出代币相同时,价格被二次计算并覆盖,导致代币价格不断被推?,并以此代币换出池中的其他代币来获利。
相关信息
MonoX是?种新的DeFi协议,使?单?代币设计?于流动性池。这是通过将存?的代币与vCASH稳定币组合成?个虚拟交易对来实现的。其中的单?代币流动性池的第?个应?是?动做市商系统-Monoswap,它在2021年10?时推出。
在线投资平台BnkToTheFuture推出以太坊质押解决方案测试版:6月28日消息,BnkToTheFuture推出以太坊质押解决方案测试版,测试版共设置25个验证节点,可用于质押800枚以太坊。
BnkToTheFuture允许符合条件的客户投资加密公司、证券Token和以比特币为中心的退休计划等替代金融产品,并表示通过将注册证券业务与注册借贷业务相结合,将能为用户提供符合监管要求的借贷和收益平台。[2023/6/28 22:05:43]
攻击者地址1:
0xecbe385f78041895c311070f344b55bfaa953258
攻击者地址?2:
0x8f6a86f3ab015f4d03ddb13abb02710e6d7ab31b
攻击合约?1:
Coinbase首席法务官:就关于PEPE的不当言论向社区道歉:5月12日消息,加密交易所Coinbase首席法务官Paul Grewal在推特发文称:“我们搞砸了关于PEPE的报道,我们很抱歉”。他表示,昨天该公司分享了有关PEPE的介绍,但没有准确反映出事实全貌,措辞不当,向社区道歉。
此前推特用户borovik.eth表示,其收到了Coinbase最新客户邮件,邮件中称PEPE的青蛙符号源自网络模因,在互联网上以“种族主义”的方式流传,这在推特上引发激烈讨论,“deletecoinbase”标签在周四凌晨成为推特上的热门话题。市场数据显示,PEPE在过去24小时内下跌了超过21%,Coinbase股票下跌超过4%。[2023/5/12 14:58:20]
0xf079d7911c13369e7fd85607970036d2883afcfd
保时捷卡雷拉杯赛车悬挂萨尔瓦多旗帜推动比特币采用:金色财经报道,萨尔瓦多车手Sebastian Melrose首次亮相保时捷卡雷拉杯赛车锦标赛。这位25岁的年轻人去年参加了一部受欢迎的Netflix电视剧,他驾驶着一辆比特币品牌的911,车顶上挂着对加密货币友好的萨尔瓦多国旗。英国赛车队Bitcoin Racing与Richardson Racing一起参加了保时捷卡雷拉杯,这不仅是为了在英国最大的赛车锦标赛之一中获奖,也是为了推广加密技术。双人组聘请了该系列赛的新人,萨尔瓦多车手Sebastian Melrose,他上周末在多宁顿公园赛道首次亮相。[2023/5/1 14:36:38]
攻击合约2:
0x119914de3ae03256fd58b66cd6b8c6a12c70cfb2
攻击交易1:
https://etherscan.io/tx/0x9f14d093a2349de08f02fc0fb018dadb449351d0cdb7d0738ff69cc6fef5f299
Avalanche链上DEX Trader Joe将部署至Arbitrum:12月2日消息,基于 Avalanche 的去中心化交易所 (DEX) Trader Joe 将在未来几天部署至以太坊扩展解决方案 Arbitrum 测试网,预计将于 2023 年初在Arbitrum One主网上启动。
据悉,Trader Joe 是 Avalanche 上最大的 DEX 和借贷服务商,截至周五锁定了价值超过 9500 万美元的代币。[2022/12/2 21:18:32]
攻击交易2:
https://polygonscan.com/tx/0x5a03b9c03eedcb9ec6e70c6841eaa4976a732d050a6218969e39483bb3004d5d
攻击细节
1、首先攻击者调用Monoswap.swapExactTokenForToken:0.1个WETH换出79.986094311542621010个MONO。
范一飞:从信息交互、业务流程、技术规范等维度推动数字人民币标准化建设:9月8日消息,在2022中国(北京)数字金融论坛上,人民银行党委委员、副行长范一飞在主旨发言时表示,数字人民币作为央行向人民群众提供的公共服务,要体现人民性。要从信息交互、业务流程、技术规范等维度,推动数字人民币标准化建设。(证券时报)[2022/9/8 13:16:01]
2、接着攻击者利用漏洞移除池子中其他用户的流动性,并为添加攻击合约的流动性以此来获取最大的利益。
这里移除流动性处的漏洞在Monoswap.sol中的471-510行,移除池中流动性时通过removeLiquidity函数调用_removeLiquidityHelper函数,而这两个函数都未做调用者和传入的to参数的身份验证,所以可直接移除任意用户在池中的流动性。
移除0x7b9aa6的流动性,把1670.7572297649224个MONO和6.862171986812230290个vCASH转出给0x7b9aa6;移除cowrie.eth的流动性,把152.9745213857155个MONO和0.628300423692773565个vCASH转出给cowrie.eth;移除0xab5167的流动性,把99940.7413658327个MONO和410.478879590637971405个vCASH转出给0xab5167;为攻击合约1在MONO代币流动池创建流动性。
3、紧接着攻击者调??55?次?Monoswap.swapExactTokenForToken以此来不断堆?MONO的价格。
这里攻击的核心是在Monoswap.sol中的swapExactTokenForToken函数,攻击者传入MONO代币使得tokenIn和tokenOut是相同的代币。
跟到swapIn函数中:
可以发现在swapIn函数中,调用了函数getAmountOut来计算价格。接着跟到getAmountOut函数中发现是利用了_getNewPrice函数来计算tokenInPrice和tokenOutPrice。
跟到_getNewprice函数中,发现当计算tokenInPrice时候传入的txType参数为TxType.SELL,此时:
当计算tokenOutPrice时候传入的txType参数为TxType.BUY,此时:
如果传入和传出为同一种代币时,价格计算式中的四个变量都相同,所以很容易得出tokenOutPrice会比tokenInPrice要大。
由于tokenIn和tokenOut是同一个token,swapIn函数在计算完价格后会再次调用_updateTokenInfo函数,使得tokenOutPrice的更新会覆盖tokenInPrice的更新,所以导致这个token的价格上涨。
4、最后攻击者调用swapTokenForExactToken函数用MONO来换出池子中的其他代币。
swapTokenForExactToken函数中调用了swapOut函数,而swapOut函数中计算价格是调用的getAmountIn函数。
在该函数中由于tokenInPoolPrice是取的MONO代币在池中的价格,而此价格在之前已被推高,导致tokenInPrice变大,计算最后的amountIn变小,用更少的MONO换出了原来相同数量的WETH、WBTC、MONO、USDC、USDT、DUCK、MIM、IMX等池子中的代币。
5、攻击者最终把攻击获利转入地址
0x8f6a86f3ab015f4d03ddb13abb02710e6d7ab31b。
以上为以太坊主链上的攻击分析,此外,攻击者除了在以太坊主链上进行攻击外,还在Polygon上进行了同样的攻击,攻击手法与以太坊主链上相同,此处不做过多重复的分析。
据慢雾AML统计,MonoXFinance最终损失约3400万美元,包括约2.1K个WETH、1.9M个WMATIC、36.1个WBTC、143.4K个MONO、8.2M个USDC、9.1M个USDT、1.2K个LINK、3.1K个GHST、5.1M个DUCK、4.1K个MIM以及274.9个IMX。
总结
本次攻击是利用了swap合约里没有对池中传入和传出代币作检查,从而利用价格更新机制的问题,由于在swap合约中会对池中传入和传出的代币的价格调用同一个函数_upTokenInfo来进行更新,而当传入和传出的代币为同一种代币时,第二次调用_upTokenInfo函数时,通过价格计算后的更高的tokenOutPrice会覆盖掉价格更低的tokenInPrice,以此来不断推高池中该代币的价格,最后可以换出池中其他的所有代币来获利离场。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。