來源:深圳零時(shí)科技
2024年3月5日,我們監(jiān)測到一筆arbitrum鏈上的異常交易:https://arbiscan.io/tx/0xe80a16678b5008d5be1484ec6e9e77dc6307632030553405863ffb38c1f94266
經(jīng)分析,我們發(fā)現(xiàn)是一次針對WOOFi的攻擊事件,事件共造成約900萬美元的損失。
WOOFi是由WOO Network構(gòu)建的一體化去中心化應(yīng)用程序(DApp)。WOOFI旨在通過提供超低滑點(diǎn)、有競爭力的兌換費(fèi)用以及其他有用功能,優(yōu)化用戶對去中心化金融(DeFi)的體驗(yàn)。
WOOFi用戶可兌換熱門數(shù)字資產(chǎn),還有機(jī)會通過質(zhì)押和向網(wǎng)絡(luò)提供流動(dòng)性來賺取收入。WOOFi平臺為DeFi用戶打造的一大價(jià)值主張是深度流動(dòng)性。
本次受攻擊的為WOOFi中的swap合約,合約地址為:https://arbiscan.io/address/0xeff23b4be1091b53205e35f3afcd9c7182bf3062#code
攻擊者從Uniswap、TraderJoe中利用flashLoan獲得攻擊初始資金,共計(jì)10504796 USDC.e和2721172 WOO。
隨后,攻擊者將借來的USDC.e在Slio Finance中抵押(共抵押7000000 USDC.e),借出5092663 WOO。
接著,攻擊者利用剩下的USDC.e通過WOOFi的swap功能,兌換為WOO,因此拉高WOO的價(jià)格。
經(jīng)過3次swap操作,將WOO的價(jià)格由56884100拉高到了60400479,為后續(xù)的攻擊創(chuàng)造了條件。
真正的攻擊發(fā)生在攻擊者將WOO兌換為USDC.e時(shí),
可以看到,經(jīng)過此次swap,WOO的價(jià)格變?yōu)榱?,即0.00000007 USD。對比之前的價(jià)格暴跌了862萬倍。
通過查看合約代碼我們發(fā)現(xiàn),WOOFi合約中在進(jìn)行將BaseToken兌換為QuoteToken時(shí)存在數(shù)據(jù)處理缺陷。
我們看賣出BaseToken得到QuoteToken時(shí),BaseToken的價(jià)格計(jì)算方法
newPrice = (1 - 2 * k * oracle.price * baseAmount) * oracle.price
攻擊者可以控制oracle.price和baseAmount,因?yàn)閗值不變。攻擊者可以通過多次swap操縱oracle.price即BaseToken的價(jià)格,并且可以操縱baseAmount。由這個(gè)公式可以看出,newPrice必定小于oracle.price。所以,攻擊者可以控制oracle.price和baseAmount的組合,將newPrice操縱到極低。
最后,攻擊者利用小額的USDC.e兌換出了大量的WOO,歸還借貸本金并套現(xiàn)。
2天后,WOOFi官方人員與攻擊者溝通,表示可以提供10%作為Whitehat獎(jiǎng)金。不過截至發(fā)文時(shí),攻擊者還未歸還被盜資金。
隨后,官方修復(fù)了這個(gè)問題,可以看到,官方修復(fù)的方式就是取消了2倍的系數(shù)。https://github.com/woonetwork/WooPoolV2/commit/f5fe28acc77cf3801ac379db9bf99bb61b73ba17
本次漏洞的成因是經(jīng)濟(jì)模型計(jì)算存在漏洞,攻擊者可以控制價(jià)格的買賣數(shù)量從而使Token價(jià)格大幅縮水,最終導(dǎo)致攻擊者用極少的USDC.e掏空了項(xiàng)目方的WOO代幣。建議項(xiàng)目方在設(shè)計(jì)經(jīng)濟(jì)模型和代碼運(yùn)行邏輯時(shí)要多方驗(yàn)證,合約上線前審計(jì)時(shí)盡量選擇多個(gè)審計(jì)公司交叉審計(jì)。