损失约900万美元——WOOFi 攻击分析
来源:深圳零时科技
背景介绍2024年3月5日,我们监测到一笔arbitrum链上的异常交易:https://arbiscan.io/tx/0xe80a16678b5008d5be1484ec6e9e77dc6307632030553405863ffb38c1f94266
经分析,我们发现是一次针对WOOFi的攻击事件,事件共造成约900万美元的损失。
WOOFi是由WOO Network构建的一体化去中心化应用程序(DApp)。WOOFI旨在通过提供超低滑点、有竞争力的兑换费用以及其他有用功能,优化用户对去中心化金融(DeFi)的体验。
WOOFi用户可兑换热门数字资产,还有机会通过质押和向网络提供流动性来赚取收入。WOOFi平台为DeFi用户打造的一大价值主张是深度流动性。
本次受攻击的为WOOFi中的swap合约,合约地址为:https://arbiscan.io/address/0xeff23b4be1091b53205e35f3afcd9c7182bf3062#code
攻击及事件分析攻击者从Uniswap、TraderJoe中利用flashLoan获得攻击初始资金,共计10504796 USDC.e和2721172 WOO。
随后,攻击者将借来的USDC.e在Slio Finance中抵押(共抵押7000000 USDC.e),借出5092663 WOO。
接着,攻击者利用剩下的USDC.e通过WOOFi的swap功能,兑换为WOO,因此拉高WOO的价格。
经过3次swap操作,将WOO的价格由56884100拉高到了60400479,为后续的攻击创造了条件。
真正的攻击发生在攻击者将WOO兑换为USDC.e时,
可以看到,经过此次swap,WOO的价格变为了7,即0.00000007 USD。对比之前的价格暴跌了862万倍。
通过查看合约代码我们发现,WOOFi合约中在进行将BaseToken兑换为QuoteToken时存在数据处理缺陷。
我们看卖出BaseToken得到QuoteToken时,BaseToken的价格计算方法
newPrice = (1 - 2 * k * oracle.price * baseAmount) * oracle.price
攻击者可以控制oracle.price和baseAmount,因为k值不变。攻击者可以通过多次swap操纵oracle.price即BaseToken的价格,并且可以操纵baseAmount。由这个公式可以看出,newPrice必定小于oracle.price。所以,攻击者可以控制oracle.price和baseAmount的组合,将newPrice操纵到极低。
最后,攻击者利用小额的USDC.e兑换出了大量的WOO,归还借贷本金并套现。
2天后,WOOFi官方人员与攻击者沟通,表示可以提供10%作为Whitehat奖金。不过截至发文时,攻击者还未归还被盗资金。
随后,官方修复了这个问题,可以看到,官方修复的方式就是取消了2倍的系数。https://github.com/woonetwork/WooPoolV2/commit/f5fe28acc77cf3801ac379db9bf99bb61b73ba17
总结本次漏洞的成因是经济模型计算存在漏洞,攻击者可以控制价格的买卖数量从而使Token价格大幅缩水,最终导致攻击者用极少的USDC.e掏空了项目方的WOO代币。建议项目方在设计经济模型和代码运行逻辑时要多方验证,合约上线前审计时尽量选择多个审计公司交叉审计。