2024 年 1 月 16 日,Socket Tech遭到攻擊,損失約 330 萬美元。 攻擊者利用了Socket某合約中數據驗證環節的漏洞,通過惡意數據輸入盜取了授權合約的用戶資金。 這次攻擊共給 230 個地址帶來損失,最大的單地址損失約為 65.6 萬美元。
背景介紹
Socket 是一種服務於跨鏈安全、高效數據和資產傳輸的互操作性協議。 Socket Gateway合約是與 Socket 流動性層所有交互的接入點,所有資產橋接器和 DEX 在此匯聚成一個唯一的元橋接器,並根據用戶偏好(如成本、延遲或安全性)選擇最佳交易路由。
黑客攻擊發生的前三天,Socket合約管理員執行了addRoute命令,在系統中加入了一條新路由。 添加路由的目的是擴展Socket網關的功能,但卻無意中引入了一個關鍵漏洞。
下圖為通過合約管理員添加路由的記錄
![](https://news.xinpengboligang.com/upload/keji/0ff17d4fc53e3a2c13552f926f7af12a.jpeg)
事件梗概
- 北京時間1月16日15:03,攻擊者錢包轉入攻擊所用資金,我們的時間分析表明這筆資金來自0xe620,與從Tornado Cash提取的10 BNB有關。
![](https://news.xinpengboligang.com/upload/keji/478b32ecab42902a52a623bcc37628bd.jpeg)
- 這些資金被用於創建和執行兩個合約,來利用Socket的漏洞。 第一個合約針對的是授權了 SocketGateway 的地址中的 USDC(截圖如下);127 名受害者被騙走約 250 萬美元。
![](https://news.xinpengboligang.com/upload/keji/f355195b5446f65d748b946eefcceb8b.jpeg)
- 接下來,第二個合約則將目標對準了受害者地址內的WETH, USDT, WBTC, DAI 與MATIC。於是,另外104名受害者損失了如下資產:
- 42.47526105 WETH
- 347,005.65 USDT
- 2.88962154 WBTC
- 13,821.01 DAI
- 165,356.99 MATIC
- 攻擊者將USDC與USDT轉換成了ETH。
![](https://news.xinpengboligang.com/upload/keji/fc51e2c52aeaca03a9be632ef7b6a87e.jpeg)
漏洞來源
被攻擊者利用的漏洞存在於新添加的路由地址 routeAddress內的performAction函數中。
該地址內的performAction函數原本的功能是協助Wrapping與Unwrapping的功能。 然而,該函數中出現了一個關鍵漏洞:用戶在無需驗證的情況下,直接在.call() 中通過swapExtraData調用外部數據,這意味著攻擊者可以執行任意惡意函數。
![](https://news.xinpengboligang.com/upload/keji/b4a3ef77b85ce7fa97dd4876d2b46516.jpeg)
在這次事件中,攻擊者制作了一個惡意的 swapExtraData 輸入,觸發transferFrom函數。 該惡意調用利用了用戶對 SocketGateway 合約的授權,從他們那裡盜走了資金。
雖然合約會通過檢查餘額檢查確保 fromToken.call() 調用後用戶餘額會出現正確的變化,但該函數沒有考慮攻擊者將金額設置為0的情況。
![](https://news.xinpengboligang.com/upload/keji/e4d2586040d15ba6d057c776984e9598.jpeg)
還原攻擊流程
- 使用攻擊合約,攻擊者在Socket Gateway合約上調用了0x00000196()。
![](https://news.xinpengboligang.com/upload/keji/709ddea5792560eec1e2064502b5ec38.jpeg)
- fallback() 使用六進制簽名 196 調用了有漏洞的路由地址合約(routerAddress)。
- 在下面的截圖中,我們可以看到攻擊者使用的虛假輸入,Swapping數量全部為0。
![](https://news.xinpengboligang.com/upload/keji/4da383a9a20127c8b061961a7db4cbce.jpeg)
- 接下來將調用WrappedTokenSwapperImpl.performAction() 進行Swap。
![](https://news.xinpengboligang.com/upload/keji/ce6fffd156a2b616b17bed0a69c4ac4b.jpeg)
- 在沒有進行任何驗證的情況下,虛假的SwapExtraData被fromToken (WETH)接受並執行。
![](https://news.xinpengboligang.com/upload/keji/acc0bf3d6528d0fcddca1ff9b134b0ea.jpeg)
- 攻擊者重復執行以上流程,直到受害者資產耗盡。 惡意交易出現後,Socket 迅速調用了 disableRoute,屏蔽了之前有漏洞的路由,阻止了更大范圍的攻擊。
- 1月23日,Socket宣佈已經追回1032枚ETH,並在25日宣佈將全額補償所有損失。本次事件得到解決。
![](https://news.xinpengboligang.com/upload/keji/cdee969b7bea511349cfd47de60febf0.jpeg)
事件總結
在有著無限額用戶授權的路由合約中,惡意 calldata 攻擊並不罕見。 以前類似的攻擊包括 Dexible 和 Hector Bridge。 2023 年 2 月 17 日,去中心化交易所 Dexible 被攻擊,損失超過 150 萬美元。 漏洞利用者向 Dexible 的 fill() 函數輸入惡意 calldata,以竊取用戶資產。 2023 年 6 月 2 日,Hector 網絡的協議被攻擊。攻擊者部署了一個虛假的 USDC合約,並通過惡意 calldata,將 65.2萬枚真實的USDC從受害者的合約中轉移出去。
區塊鏈聚合平臺通常通過封裝一系列橋和路由合約來提高流動性,減少損耗。然而,這種復雜的封裝會給安全性帶來更多難題。我們欣慰地看到Socket此次事件可以得到解決,CertiK將繼續致力於為平臺提供全方位審計與檢測,降低各類聚合風險,提高社區信任和整個行業的安全水平。