时间:2023-06-13|浏览:168
分析如下: - 攻击地址1:0x117c0391b3483e32aa665b5ecb2cc539669ea7e9 - 攻击地址2:0x8b4c1083cd6aef062298e1fa900df9832c8351b3 - 攻击交易hash:0x20a6dcff06a791a7f8be9f423053ce8caee3f9eecc31df32445fc98d4ccd8365和0x600373f67521324c8068cfd025f121a0843d57ec813411661b07edc5ff781842 - 攻击合约:0xea0c959bbb7476ddd6cd4204bdee82b790aa1562
首先攻击者从Tornado.Cash取出900ETH为拉高INV代币价格做准备。攻击者使用300个ETH,兑换出374个INV代币,再用200ETH兑换1372个INV代币,累计兑换1746个INV代币。这里可以发现第一个池子用300个ETH只兑换出374个INV,而后面却使用200ETH兑换出1372INV代币,第一个池子WETH/INV中的INV价格已经明显被拉高。
在计算Xinv代币价格时,依靠WETH/INV(0x328dfd0139e26cb0fef7b0742b49b0fe4325f821)这个pair去计算。因为pair这个池子已经被操纵了,再加上timeElapsed间隔时间短,那么攻击者需要满足不在当前区块调用,就可以利用操纵的价格,那么就可以操纵xINV代币的价值。
可以看到当攻击操纵了pair之后,就不停的发送mint交易,用于确保自己能够最大化利用时间窗口。同时,攻击者巧妙的避开了操纵价格的区块(14506358)去mint,不然将会使用操纵价格区块的前面区块去计算价格。
然后攻击者直接把自己持有的1746INV代币全部mint(这里算是抵押),换取1156个xINV代币(LP代币),再依靠持有的xINV借出大量代币。
Inversefinance项目方累计损失估计大约在1500万美元。
在此,成都链安建议项目方使用足够长的时间窗口,例如可以参考以下Uniswap的示例代码,timeElapsed必须大于24小时以上。