CertiK:Solana跨鏈橋蟲洞事件分析 - 冷萃財經

CertiK:Solana跨鏈橋蟲洞事件分析

CertiK:Solana跨鏈橋蟲洞事件分析

CertiK:Solana跨鏈橋蟲洞事件分析北京時間2022年2月3日凌晨1點58分,Solana跨鏈橋項目蟲洞(Wormhole)遭受攻擊者發起的攻擊。黑客繞過了 Solana 上的Wormhole Bridge驗證過程,並為自己鑄造了Wormhole ETH (wETH)。

此次事件中,攻擊者通過注入一個欺騙性的 sysvar 帳戶繞過了系統驗證步驟,並成功生成了一條惡意「消息」,指定要鑄造12萬枚wETH。最後,攻擊者通過使用惡意「消息」調用了「complete_wrapped」函數,成功鑄造了12萬枚wETH,價值約3.2億美元

該事件造成的損失金額之大,令其成為了DeFi史上第二大黑客攻擊事件。

蟲洞(Wormhole)簡介

蟲洞(Wormhole),又稱愛因斯坦-羅森橋,也譯作蛀孔。是宇宙中可能存在的連接兩個不同時空的狹窄隧道。

言歸正傳,其實Solana的跨鏈橋蟲洞協議(Wormhole Protocal),確有蟲洞在科學乃至科幻小說里相同的意思和定位。

蟲洞可連接兩個不同時空的隧道,從而節約時間進行「傳送」。而Solana的跨鏈橋蟲洞協議(Wormhole Protocal),是連接以太坊的橋。簡單來說,它幫助我們節約了交易的時間和周期,避開以太坊的擁堵從而體驗到Solana的快速交易。

漏洞利用交易

鑄幣12萬枚Wormhole ETH: 

https://solscan.io/tx/2zCz2GgSoSS68eNJENWrYB48dMM1zmH8SZkgYneVDv2G4gRsVfwu5rNXtK5BKFxn7fSqX9BvrBc1rdPAeBEcD6Es 

將代幣轉到以太坊: 

https://etherscan.io/address/0x629e7da20197a5429d30da36e77d06cdf796b71a#internaltx 

漏洞攻擊流程

步驟一:攻擊者使用假 sysvar account調用「verify_signatures」函數:https://solscan.io/tx/25Zu1L2Q9uk998d5GMnX43t9u9eVBKvbVtgHndkc2GmUFed8Pu73LGW6hiDsmGXHykKUTLkvUdh4yXPdL3Jo4wVS①以偽造的「sysvar account」作為參數調用的「verify_signatures」函數:

CertiK:Solana跨鏈橋蟲洞事件分析

相比之下,以下截圖是以真實的「sysvar account」作為參數的「verify_signatures」函數:

CertiK:Solana跨鏈橋蟲洞事件分析② 「verify_signatures」函數從 sysvar (L92) 載入當前指令。

CertiK:Solana跨鏈橋蟲洞事件分析③ 然而,函數「load_current_index」並不能驗證「sysvar account」是否真的是「system sysvar」。由於從「sysvar」中檢索到的當前指令(L92)是由攻擊者控制的,因此它可以順利通過以下驗證過程。

步驟二:攻擊者隨後使用上一步驗證的簽名調用「post_vaa」函數,並創建一個惡意消息帳戶,聲明要鑄造12萬枚wETH:https://solscan.io/tx/2SohoVoPDSdzgsGCgKQPByKQkLAXHrYmvtE7EEqwKi3qUBTGDDJ7DcfYS7YJC2f8xwKVVa6SFUpH5MZ5xcyn1BCK

CertiK:Solana跨鏈橋蟲洞事件分析① Account2 是通過「verify_signatures」指令生成的簽名集。② Account3 是將在「complete_wrapped」函數中使用的消息帳戶。

步驟三:攻擊者調用「complete_wrapped」函數讀取惡意消息賬戶中的數據並鑄造 12萬枚wETH:https://solscan.io/tx/2zCz2GgSoSS68eNJENWrYB48dMM1zmH8SZkgYneVDv2G4gRsVfwu5rNXtK5BKFxn7fSqX9BvrBc1rdPAeBEcD6Es

CertiK:Solana跨鏈橋蟲洞事件分析① Account3 是「post_vaa」函數生成的消息賬戶。

② Account6 是「收件人」地址,用於接收鑄造的Wormhole ETH。③ Account9 是 Wormhole ETH 的鑄幣機構,是一個 PDA(程序派生地址)。這就是為什麼在簽名驗證通過後,攻擊者可以直接鑄造代幣。

步驟四:部分鑄造的 wETH 被轉移到以太坊,其餘的被交換到 USDC 和 SOL:

  • https://solscan.io/tx/j3jUDG43di8Dsg7Q3jQhstamtBovu1GLqnDJ7yNvM3r4pnK9e7uqgt9uBobCjT5S1BKhZZFQNQwDxypEYqLknec
  • https://solscan.io/tx/5UaqPus91wvAzKNve6L8YAHsESomZQ7GWi37gPFyzTHcXNMZA641bb8m8txo7bS7A5cAnzKDKYyiKcQC8GgDcAuf
  • https://solscan.io/tx/3AugXqrXunBa96YfqENhPBiWZWpnSnJdqAHS64qcHTVU9KtfGon8cN9cUuXsDmBobBBXjYUtuRxnYxgERS42nh6G
  • https://solscan.io/tx/2SndtH3tU4j6v14HJzEde3d3dnpdHqTPn4VnvhTj4zKLo26H5kmtCwjn2nANfjXNVbmFsyEGtD4Jte25azsPwaRk

合約漏洞分析

這個漏洞的根本原因是在驗證簽名過程(「verify_signatures」)中,程序使用了一個在Solana更新至1.8.0時即被廢棄的「load_current_index」函數。該函數不會驗證輸入的「sysvar account」是否真的是「system sysvar」,從而攻擊者可以趁機偽造這個關鍵帳戶。

CertiK:Solana跨鏈橋蟲洞事件分析 

為了防止將來此類問題的發生,必須檢查並驗證函數使用的所有帳戶。特別是在該案例中,由於部分檢查過程依賴於外部調用,而外部調用的可靠性被過度信任,從而引入了風險。

總結

目前,Wormhole團隊已修復漏洞並已恢復網路。在此,CertiK給開發者提出如下幾點建議:

  • 開發者在使用外部依賴的函數時,需要對這個函數有足夠的了解。
  • 隨時關注外部依賴代碼庫的重要更新,在有重大版本變動時及時對自己的代碼庫做出相應的調整
  • 當代碼版本更新時,也需及時進行全面審計,並將審計後的代碼及時更新到已部署上鏈的代碼中。

農曆破五將至,希望大家「破五窮」。同時也希望每一個項目在經過嚴格的審計之後上線部署從而獲得更高的安全性並減少財產損失的可能。好運從新的一年起開始不斷「循環」;安全從嚴格的審計開始,每個項目都有更好的「開端」!

迄今為止,CertiK已獲得了2500家企業客戶的認可,保護了超過3110億美元的數字資免受損失。歡迎點擊CertiK公眾號底部對話框,留言免費獲取諮詢及報價!

冷萃財經原創,作者:awing,轉載請註明出處:https://www.lccjd.top/2022/02/06/certik%ef%bc%9asolana%e8%b7%a8%e9%93%be%e6%a1%a5%e8%99%ab%e6%b4%9e%e4%ba%8b%e4%bb%b6%e5%88%86%e6%9e%90/?variant=zh-tw

0

掃一掃,分享到微信

猜你喜歡

文章評論

電子郵件地址不會被公開。 必填項已用*標註

後發表評論

    上一篇

    3 億美元為Wormhole補窟窿,探究加密風投中最低調的華爾街巨頭Jump Trading

    下一篇

    遊戲界NFT衝突爆發:一堆公司同日劃清界限

    微信公眾號

    微信公眾號