#1 事件概览
简单来说,MonoX创建的是代币-vCASH交易对,添加流动性时,只需要添加代币,进行任意代币兑换时,兑换路径为:代币A -> vCASH -> 代币B,而不需要像Uniswap一样经过多个交易对:代币A -> Pair1-> Pair2-> Pair3-> Token B。
#2 事件具体分析
由于两个平台代码完全一致,下面的分析将基于以太坊上的攻击交易进行。
Round 1
Round 2
漏洞1:
Round 3
Round 4
利用Monoswap合约中的代币兑换价格覆写漏洞,反复进行同种代币的兑换,拉升MONO的价格。
漏洞2:
(1) 在_getNewPrice函数计算应输入输出代币数量时,未考虑到兑换过程中交易池代币储量的变更,同种代币是基于相同的初始价格进行兑换后价格的计算。
(2)在最后一步更新代币过程中,未考虑到同种代币进行兑换时,兑出代币的价格更新操作(图6 第841行)会覆盖兑入代币更新的操作(图6 第830行)。该漏洞导致MONO代币兑换MONO代币时,MONO的价格异常增长。此外不止攻击者使用的swapExactTokenForToken函数存在该问题,swapTokenForExactToken函数也存在该问题。
币种数量USDC4,029,106.880396 (兑换为847.2066974335073 WETH)USDT4,525,120.098829 (兑换为949.0325798508261 WETH)WETH452.9120530334938WBTC21.42797145DUCK5,155,863.718616853MIM4,125.858256772IMX274.9390440877583
#3 事件复盘
(1)任何地址都可以任意移除指定地址的流动性;(2)特殊情况下的价格写入操作覆盖问题。
0 条评论
请「登录」后评论