詳解Socket攻擊事件始末

2024 年1 月16 日,Socket Tech遭到攻擊,損失約330 萬美元。攻擊者利用了Socket某合約中資料驗證環節的漏洞,透過惡意資料輸入盜取了授權合約的使用者資金。這次攻擊共為230 個位址帶來損失,最大的單一位址損失約65.6 萬美元。

背景介紹

Socket 是一種服務於跨鏈安全、高效資料和資產傳輸的互通性協定。 Socket Gateway合約是與Socket 流動性層所有互動的存取點,所有資產橋接器和DEX 在此匯聚成一個唯一的元橋接器,並根據使用者偏好(如成本、延遲或安全性)選擇最佳交易路由。

在駭客攻擊發生的前三天,Socket合約管理員執行了addRoute指令,在系統中加入了一條新路由。增加路由的目的是擴展Socket網關的功能,但無意中引入了一個關鍵漏洞。

下圖為透過合約管理員新增路由的記錄

事件梗概

1. 北京時間1月16日15:03,攻擊者錢包轉入攻擊所用資金,我們的時間分析顯示這筆資金來自0xe620,與從Tornado Cash提取的10 BNB有關。

stJh04TkjPfHuZyxg4Jc4r6nkYupyxUeU2WuMUa4.png

2. 這些資金被用來創建和執行兩個合約,來利用Socket的漏洞。第一個合約針對的是授權了SocketGateway 的地址中的USDC(截圖如下);127 名受害者被騙走約250 萬美元。

6lyQAxmIpwkyzoZjNRylRjkBTcR8XFkPW9BGI5je.png

3. 接下來,第二個合約將目標對準了受害者地址內的WETH, USDT, WBTC, DAI 與MATIC。於是,另外104名受害者損失如下資產:

– 42.47526105 WETH

– 347,005.65 USDT

– 2.88962154 WBTC

– 13,821.01 DAI

– 165,356.99 MATIC

4. 攻擊者將USDC與USDT轉換成了ETH。

GR9DU9e3GXEL6tGQ6GTyUQ5Hx3x9FTlPEJiyoHu6.png

漏洞來源

被攻擊者利用的漏洞存在於新加入的路由位址routeAddress內的performAction函數。

該位址內的performAction函數原本的功能是協助Wrapping與Unwrapping的功能。然而,該函數中出現了一個關鍵漏洞:使用者在無需驗證的情況下,直接在.call() 中透過swapExtraData呼叫外部數據,這意味著攻擊者可以執行任意惡意函數。

8zOChIDLaJim6AbVW5X59wfMHot0M1aRLGuMn5Gs.png

在這次事件中,攻擊者製作了一個惡意的swapExtraData 輸入,觸發transferFrom函數。該惡意調用利用了用戶對SocketGateway 合約的授權,從他們那裡盜走了資金。

雖然合約會透過檢查餘額檢查確保fromToken.call() 呼叫後用戶餘額會出現正確的變化,但函數沒有考慮攻擊者將金額設為0的情況。

kXNfXqMeGCzRj7kcoOPmJZuLYqxCL3u7ioqgTeyH.png

還原攻擊流程

1. 使用攻擊合約,攻擊者在Socket Gateway合約上呼叫了0x00000196()。

gMq5pr4NON2kXUaKVlKxg0EAIQfF8VMQIJmTdGHY.png

2. fallback() 使用六進位簽章196 呼叫了有漏洞的路由位址合約(routerAddress)。

12kIBbXyHTr4ypXaXygZPG7jj1vxqJV2JIi1ZdUa.png

3. 在下面的截圖中,我們可以看到攻擊者使用的虛假輸入,Swapping數量全部為0。

ZApSAr6fE1rLYL3EuSYeuKpZiMuzr89ZyjExQOXQ.png

4. 接下來將會呼叫WrappedTokenSwapperImpl.performAction() 進行Swap。

U4kUpBPRQowAedic6xAzllw7QOgWfjMqJrjP2gP5.png

5. 在沒有進行任何驗證的情況下,虛假的SwapExtraData被fromToken (WETH)接受並執行。

hFYUySPoxPaAcaHpmBc3XDyNQ0LO7jHcWLMBpURP.png

6. 攻擊者重複執行以上流程,直到受害者資產耗盡。惡意交易出現後,Socket 迅速呼叫了disableRoute,屏蔽了先前有漏洞的路由,阻止了更大範圍的攻擊。

7. 1月23日,Socket宣布已經追回1032枚ETH,並在25日宣布將全額補償所有損失。本次事件得到解決。

i4OXBXUYesBkxF3TrHlneLhkpUyyMW6SVx10cS6P.png

事件總結

在有著無限額使用者授權的路由合約中,惡意calldata 攻擊並不罕見。以前類似的攻擊包括Dexible 和Hector Bridge。 2023 年2 月17 日,去中心化交易所Dexible 被攻擊,損失超過150 萬美元。漏洞利用者向Dexible 的fill() 函數輸入惡意calldata,以竊取使用者資產。 2023 年6 月2 日,Hector 網路的協定被攻擊。攻擊者部署了一個虛假的USDC合約,並透過惡意calldata,將65.2萬枚真實的USDC從受害者的合約中轉移出去。

區塊鏈聚合平台通常透過封裝一系列橋樑和路由合約來提高流動性,減少損耗。然而,這種複雜的封裝會為安全性帶來更多難題。我們很欣慰地看到Socket此次事件可以解決,CertiK將繼續致力於為平台提供全方位審計與檢測,降低各類聚合風險,提高社區信任和整個行業的安全水平。

Total
0
Shares
Related Posts