被盜約330萬美元 跨鏈互操作協議Socket如何遭受黑客call注入攻擊?

2024-01-18 11:07 Beosin


來源:Beosin

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帳戶。在採取任何行動之前,請務必仔細檢查帳戶。”

本次事件也再次提醒各位,安全不可掉以輕心。

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

標題:被盜約330萬美元 跨鏈互操作協議Socket如何遭受黑客call注入攻擊?

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

相關閱讀: