來源:深圳零時科技
背景介紹
2024年3月5日,我們監控一筆arbitrum鏈上的異常交易:https://arbiscan.io/tx/0xe80a16678b5008d5be1484ec6e9e777dc630763203055340586326c1
經分析,我們發現是針對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代幣。建議專案方在設計經濟模型和程式碼運作邏輯時要多方驗證,合約上線前審計時盡量選擇多個審計公司交叉審計。