8月4日,去中心化造市商Popsicle Finance和收益聚合平台Wault Finance接连遭到骇客攻击,分别损失2,070万美元和88.8万美元。
PeckShield安全人员第一时间定位分析,发现在Popsicle Finance的安全事件中,攻击者创建了3个合约,即合约A、B、C,并在8个流动池中重复调用A.deposit()、A.transfer(B)、B.collectFees()、B.transfer(C)、C.collectFees()进行攻击。
简述Popsicle Finance攻击过程:
第一步:攻击者从Aave中通过闪电贷借出3,000万USDT、1,300WETH、1,400BTC、3,000万USDC、3,000万DAI和200,000UNI。
第二步:调用合约A的deposit()函数,在USDT-WETHPLP流动池中添加3,000万USDT和5,460WETH,同时获得10.52PLPtokens。
第三步:A将10.52PLPtokens转给B。
第四步:调用合约B的collectFees()函数,旨在更新tokenRewards。
第五步:B将10.52PLPtokens转给C。
第六步:调用合约C的collectFees()函数,旨在更新tokenRewards。
第七步:C将10.52PLPtokens转给A,便于A移除流动性。
第八步:调用合约A的withdraw()函数,移除流动性,A获得3,000万USDT和5,460WETH。
第九步:调用合约B的collectFees()函数,获得奖励215万USDT和392WETH。
第十步:调用合约C的collectFees()函数,获得奖励215万USDT和402WETH。
最后,攻击者重复操作二至十的步骤,归还闪电贷完成攻击。
PeckShield安全人员发现Wault Finance的攻击手段和此前损失1,000多万美元的yDAI相似,即使在USDT-WEX交易对的价格被操纵的情况下,stake()函数仍可通过相关的USDT-WEX交易对,强制将USDT兑换为WEX。
简述Wault Finance攻击过程:
第一步:攻击者通过闪电贷从WUSD-USDT池中借出1,683万WUSD。
第二步:调用WUSD Master赎回1,503万USDT(90%)和1.065亿WEX(10%),此时WEX的价格为0.015USDT。
第三步:攻击者从PancakeSwap通过闪电贷借出4,000万USDT,并将其中2,300万USDT兑换为WEX,此时WEX的价格上升至0.044USDT,攻击者获得5.179亿WEX。
第四步:攻击者重复调用stake()函数,质押68次25万USDT(总计1,700万USDT),每次质押WUSD Master都会将其中10%的USDT强制兑换为WEX,此时WEX的价格为0.14USDT。
第五步:攻击者归还1,688万WUSD闪电贷。
第六步:攻击者用6.24亿WEX兑换为USDT,获得2,593万USDT,随后归还4,012万USDT的闪电贷;此时攻击者获利11万WUSD和84万USDT,并将这些代币在PancakeSwap上兑换为370ETH,并通过AnySwap跨链到以太坊上。
受到安全事件的影响,WEX一度腰斩,从0.012美元跌至最低0.006美元,截稿前已回调至0.0099美元。