本次事件也再次提醒各位,安全不可掉以輕心,2024 剛開始,我們已經面對多起安全事件。
封面:Photo by Moritz Erken on Unsplash
2024 年 1 月 17 日,據 Beosin 旗下 EagleEye 安全風險監控、預警與阻斷平臺監測顯示,Socket 協定遭受攻擊者 call 注入攻擊,導致大量授權用戶資金被盜。 目前攻擊者將被盜資金兌換為 ETH,並保存在攻擊者位址上。
攻擊發生之後,Socket 官方確認被攻擊,並第一時間暫停受影響的合約。
同時,MetaMask 在 X 平台發文稱,MetaMask Bridge 使用者不受今天發生的 Socket 漏洞的影響。 MetaMask 稱設計跨鏈橋合約時採用了獨特的架構,旨在防範此類攻擊。
關於本次攻擊,Beosin 安全團隊對本次漏洞進行了分析。
漏洞分析
該事件發生的主要原因是 Socket 合約的 performAction 函數存在不安全的 call 調用。 如下圖,該函數的基本功能是將使用者的 ETH 和 WETH 進行轉換,如果調用者選擇 fromToken 為 ETH,那麼將會查詢合約的 toToken(WETH)餘額,隨後通過 call 調用 toToken(正常邏輯下,此處必須調用 WETH 的 deposit 函數),並轉入使用者指定的 ETH 數量,接下來查詢合約的 toToken(WETH)新餘額,如果等於轉入使用者指定的 ETH 數量,那麼通過,並將 toToken 轉給調用者指定位址。 如果調用者選擇 fromToken 不為 ETH,那麼與上述同理,函數功能就是將調用者的 WETH 兌換成 ETH(正常情況下,call 調用必須是調用 WETH 的 withdraw 函數)併發送給使用者指定位址。
雖然函數中並沒有對 fromToken 與 toToken 進行任何檢查限制,但是除了傳入 WETH 位址,其他 ERC20 位址都將導致餘額檢查失敗,從而無法偽造這兩個參數,間接將 token 位址限制為 WETH。
雖然對 token 位址有所限制,但是該函數還存在一個問題,便是未對 amount 進行限制,如果調用者傳入的 amount 為 0,則函數的檢查條件將恆通過,並不需要調用 WETH 的 deposit 與 withdraw 函數。 此時便可以在 call 中注入異常的數據,從而達到攻擊的目的。
攻擊流程
明白了函數問題點,我們來看看攻擊者是如何實施攻擊的。
1. 攻擊者首先創建了一個攻擊合約。
2. 隨後,攻擊者多次查詢不同位址的 WETH 餘額,並且查詢該地址對於 Socket: Gateway 合約的授權數量,最後調用 Socket: Gateway 合約。
3. 可以看到,這裏調用 performAction 函數的時候,swapExtraData 參數傳入的是 0x23b872dd...,該數據是 transferfrom 的函數簽名,說明這裡將直接調用 token 的 transferfrom 函數。
4. 可以看到,攻擊者傳入 fromToken 為 WETH,amount 正是我們上述的 0,合約將攻擊者的 WETH 轉入合約,但轉的是 0,而在 call 調用中,攻擊者指定一個使用者位址向攻擊者轉了 16 枚 WETH。
5. 攻擊者通過大量操作,將無數使用者的 WETH 轉移給自己。
6. 攻擊者使用相同的方式,將授權給該合約的 USDT 轉移給自己。
7. 還包括 WBTC、DAI 以及 MATIC 三種代幣。
截止發稿,被盜的近 330 萬美元的資金,部分被攻擊者兌換為了 ETH,並且一直存在駭客位址未移動,Beosin Trace 將對被盜資金進行持續監控。
目前,互操作性協定 Socket 在 X 平台發佈安全事件更新:Socket 現已恢復運營,受影響的合約已暫停,損害已得到完全控制。 在 Bungee 的橋接以及其大多數合作夥伴前端的橋接已經恢復。 詳細的事件分析和後續步驟將很快公佈。
Socke 提醒道:“小心回復中試圖對您進行網络釣魚的虛假 Socket 帳戶。 在採取任何行動之前,請務必仔細檢查帳戶。 ”
本次事件也再次提醒各位,安全不可掉以輕心,2024 剛開始,我們已經面對多起安全事件,Beosin 作為一家全球領先的區塊鏈安全公司,業務涵蓋項目上線前的代碼安全審計、專案運行時的安全風險監控、預警與阻斷、虛擬貨幣被盜資產追回、安全合規 KYT/AML 等 “一站式” 區塊鏈安全產品+服務,我們致力於 Web3 生態的安全發展,如果有需要, 請與我們聯繫。
免責聲明:作為區塊鏈資訊平臺,本站所發佈文章僅代表作者及嘉賓個人觀點,與 Web3Caff 立場無關。 文章內的資訊僅供參考,均不構成任何投資建議及要約,並請您遵守所在國家或地區的相關法律法規。