又現價格操縱 —— Arbitrum鏈上WooPPV2合約項目被攻擊分析

2024-03-07 10:43 Beosin


來源:Beosin

北京時間2024年3月5日深夜,據Beosin Trace平台顯示,Arbitrum鏈上的WooPPV2合約項目受到價格操控攻擊,造成約850萬美元的損失。黑客利用閃電貸借出USDC.e和Woo代幣,然後通過WooPPV2合約進行頻繁的代幣兌換。由於WooPPV2合約的價格計算存在缺陷,黑客能夠操控兌換過程中的價格,導致大量Woo代幣被盜。Beosin安全團隊第一時間對本次事件進行了分析。

漏洞分析

WooPPV2合約中存在一個swap函數,用戶可以調用該函數進行代幣兌換,這裏主要是USDC.e和Woo兩者的兌換(下文均按USDC.e與Woo之間的兌換來分析),其中函數中的quoteToken變量表示的就是USDC.e。

_sellQuote函數和_sellBase函數邏輯差不多,都是根據價格計算兌換的代幣數量,再將代幣發送給調用者。_sellQuote是當調用者用USDC.e來兌換Woo代幣時調用的函數,其中主要的函數是state以及_calcBaseAmountSellQuote,state是用於返回保存Woo價格的結構體,_calcBaseAmountSellQuote是用戶計算兌換數量以及新價格的函數。

接下來我們看_calcBaseAmountSellQuote函數實現邏輯,baseAmount爲計算出來的兌換數量,其中主要邏輯是USDC.e數量除以Woo的價格,得到能兌換出的Woo的數量,接下來根據當前價格以及兌換數量計算出兌換之後的新價格。

_sellBase函數與_sellQuote函數相同,只是_calcQuoteAmountSellBase函數有些許不同,主要邏輯是Woo數量乘以Woo的價格,得到能兌換出的USDC.e的數量。

根據兌換邏輯我們能發現一個問題,這種兌換數量的計算邏輯與Uniswap等傳統swap的乘積恆定模型不同,這種模式是直接根據價格做乘除來計算數量,使得兌換過程不存在滑點,但價格又會隨着兌換而變化。如果調用者精心計算,就能將裏面的代幣套取出來。

舉個例子:

如果池子裏面初始存在1000個A代幣和1000個B代幣,B代幣價格爲1。那么如果使用500個A代幣,便能兌換出500個B代幣,此時池子變爲1500:500,B代幣價格將上漲,例如變爲2。接下來,使用兌換出的500個B代幣,將兌換出1000個A代幣,最終池子變爲500:1000,憑空套出500A代幣。

此次事件,攻擊者便是使用了該安全問題,我們來看看攻擊者是如何進行攻擊的。

攻擊流程

本次事件攻擊者通過多次相同的手法進行攻擊,這裏以

0xe80a16678b5008d5be1484ec6e9e77dc6307632030553405863ffb38c1f94266這筆交易爲例。

1.攻擊者通過閃電貸借出1000多萬枚USDC.e以及272萬枚Woo代幣。 

2.接下來,攻擊者分三次使用10萬枚USDC.e兌換Woo代幣,此時可以看到Woo價格還處於正常價格,攻擊者目前持有800多萬枚Woo。 

3.緊接着,攻擊者直接使用800多萬枚Woo代幣去兌換USDC.e,由於上述問題,此時800多萬枚Woo是全部按照正常價格進行兌換的,兌換了200多萬枚USDC.e,並且根據上述公式計算出此時Woo的價格爲7,縮小了近1000萬倍。

4.最後,由於Woo代幣價格極小,導致攻擊者使用極少的USDC.e就將800多萬枚Woo代幣兌換出來,最後歸還閃電貸離場。

資金追蹤

黑客攻擊後,攻擊者將200枚ETH通過跨鏈橋轉至以太坊鏈上的地址上,其余2000多枚ETH保存在Arbitrum鏈的地址上,截止發稿時,資金均未移動。

鑑於此次在Arbitrum鏈上發生的價格操控攻擊事件,我們必須認識到在虛擬資產領域中安全風險的重要性。

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播信息之目的,不構成任何投資建議,如有侵權行為,請第一時間聯絡我們修改或刪除,多謝。

標題:又現價格操縱 —— Arbitrum鏈上WooPPV2合約項目被攻擊分析

地址:https://www.sgitmedia.com/article/25116.html

相關閱讀: