以太坊上分佈式跨鏈協議Li.Finance 受到了攻擊,攻擊者執行了37次call注入獲取了多個錢包中約60萬美元的資產(204個ETH)。
圖片
一、前言
北京時間3月20日晚,知道創宇區塊鏈安全實驗室監測到以太坊上分佈式跨鏈協議Li.Finance 受到了攻擊,攻擊者執行了37次call注入獲取了多個錢包中約60萬美元的資產(204個ETH)。此次資產損失並沒有非常大,但項目方對於攻擊的處理非常積極並值得學習與肯定(見後文),目前項目方已補償了協議損失並修復後重新部署了協議。知道創宇區塊鏈安全實驗室第一時間跟踪本次事件並分析。
二、分析
1.攻擊者相關信息
攻擊tx:0x4b4143cbe7f5475029cf23d6dcbb56856366d91794426f2e33819b9b1aac4e96
被攻擊合約:
0x5A9Fd7c39a6C488E715437D7b1f3C823d5596eD1–代理合約0x73a499e043b03fc047189ab1ba72eb595ff1fc8e–邏輯合約
攻擊者地址:
0xC6f2bDE06967E04caAf4bF4E43717c3342680d76 — 部署地址0x878099F08131a18Fab6bB0b4Cfc6B6DAe54b177E — 收款地址
2.攻擊流程
攻擊調用流程攻擊者構造payload並調用被攻擊合約0x5a9fd7c3的swapAndStartBridgeTokensViaCBridge函數圖片
具體使用的Payload如下–圖中選中部分即為利用授權轉賬(transferFrom)部分的payload:
圖片
調用一次正常50刀的跨鏈橋功能(為了能正常調用swapAndStartBridgeTokensViaCBridge函數)
圖片
在payload中包括多個call方法(調實際用transferFrom)。讓0x5a9fd7c3調用37個call,藉此利用多個錢包對於0x5a9fd7c3合約的授權(approve)將錢包資產轉賬到攻擊者地址:
圖片
後續執行正常的跨鏈橋邏輯_startBridge(_cBridgeData);。這也是為什麼第一個swap是正常的,這樣才能讓後續邏輯正常執行下去
圖片
3.漏洞細節
導致本次問題的根本原因被攻擊合約0x5a9fd7c3的邏輯合約存在一個批量讓call調用傳入數據的函數swapAndStartBridgeTokensViaCBridge
圖片
該合約將會取出payload中的多個_swapData數據結構並調用,LibSwap.swap(…);實現如下:
圖片
藉此,攻擊者利用該合約的call將各個錢包對0x5a9fd7c3合約的代碼授權轉走了多個錢包中的各種代幣。
圖片
4.項目方進展
在事件發生後,項目方第一時間對合約可能的方法進行了停用,並為其審計和安全性問題進行致歉。圖片
而後,項目方還聯繫了黑客,希望能與其取得聯繫並和平解決:
圖片
同時,最快的時間將漏洞合約修復後上線:
圖片
並將錢包(以Matic為例)對於之前被攻擊合約的授權取消,對新的合約進行了重新授權:
圖片
最後,將用戶資產進行補回:
圖片
同時我們關注到,其在polygon鏈上的合約也已實現了新的部署:
圖片
三、總結
此次攻擊的根本原因是項目方對於swapAndStartBridgeTokensViaCBridge合約的實現過度自由化所導致的call調用注入,但項目方積極的面對問題的態度和後續補救的及時性值得學習和肯定。不貴於無過,而貴與改過。但我們仍希望能將錯誤扼殺在發生之前,應從他人的錯誤中學習並避免自己未來的錯誤,正如Li.Finance所說的那樣:我們的使命是最大化用戶體驗,現在我們痛苦地了解到,為了遵循這種精神,我們的安全措施必須大幅改進。近期,各類合約漏洞安全事件頻發,合約審計、風控措施、應急計劃等都有必要切實落實。
展開全文打開碳鏈價值APP 查看更多精彩資訊