北京時間2022年2月3日凌晨1點58分,Solana跨鏈橋項目蟲洞(Wormhole)遭受攻擊者發起的攻擊。黑客繞過了Solana 上的Wormhole Bridge驗證過程,並為自己鑄造了Wormhole ETH (wETH)。
二級標題
二級標題
蟲洞(Wormhole)簡介
蟲洞(Wormhole),又稱愛因斯坦-羅森橋,也譯作蛀孔。是宇宙中可能存在的連接兩個不同時空的狹窄隧道。
漏洞利用交易
漏洞利用交易
漏洞利用交易
二級標題
https://solscan.io/tx/2zCz2GgSoSS68eNJENWrYB48dMM1zmH8SZkgYneVDv2G4gRsVfwu5rNXtK5BKFxn7fSqX9BvrBc1rdPAeBEcD6Es
二級標題
https://etherscan.io/address/0x629e7da20197a5429d30da36e77d06cdf796b71a#internaltx
漏洞攻擊流程
步驟一:攻擊者使用假sysvar account調用“verify_signatures”函數:https://solscan.io/tx/25Zu1L2Q9uk998d5GMnX43t9u9eVBKvbVtgHndkc2GmUFed8Pu73LGW6hiDsmGXHykKUTLkvUdh4yXPdL3Jo4wVS①以偽造的“sysvar account”作為參數調用的“verify_signatures”函數:
相比之下,以下截圖是以真實的“sysvar account”作為參數的“verify_signatures”函數:
② “verify_signatures”函數從sysvar (L92) 加載當前指令。
③ 然而,函數“load_current_index”並不能驗證“sysvar account”是否真的是“system sysvar”。由於從“sysvar”中檢索到的當前指令(L92)是由攻擊者控制的,因此它可以順利通過以下驗證過程。
步驟二:攻擊者隨後使用上一步驗證的簽名調用“post_vaa”函數,並創建一個惡意消息帳戶,聲明要鑄造12萬枚wETH:https://solscan.io/tx/2SohoVoPDSdzgsGCgKQPByKQkLAXHrYmvtE7EEqwKi3qUBTGDDJ7DcfYS7YJC2f8xwKVVa6SFUpH5MZ5xcyn1BCK
① Account2 是通過“verify_signatures”指令生成的簽名集。 ② Account3 是將在“complete_wrapped”函數中使用的消息帳戶。
步驟三:攻擊者調用“complete_wrapped”函數讀取惡意消息賬戶中的數據並鑄造12萬枚wETH:https://solscan.io/tx/2zCz2GgSoSS68eNJENWrYB48dMM1zmH8SZkgYneVDv2G4gRsVfwu5rNXtK5BKFxn7fSqX9BvrBc1rdPAeBEcD6Es
① Account3 是“post_vaa”函數生成的消息賬戶。
總結
這個漏洞的根本原因是在驗證簽名過程(“verify_signatures”)中,程序使用了一個在Solana更新至1.8.0時即被廢棄的“load_current_index”函數。該函數不會驗證輸入的“sysvar account”是否真的是“system sysvar”,從而攻擊者可以趁機偽造這個關鍵帳戶。
https://solscan.io/tx/j3jUDG43di8Dsg7Q3jQhstamtBovu1GLqnDJ7yNvM3r4pnK9e7uqgt9uBobCjT5S1BKhZZFQNQwDxypEYqLknec
https://solscan.io/tx/5UaqPus91wvAzKNve6L8YAHsESomZQ7GWi37gPFyzTHcXNMZA641bb8m8txo7bS7A5cAnzKDKYyiKcQC8GgDcAuf
https://solscan.io/tx/3AugXqrXunBa96YfqENhPBiWZWpnSnJdqAHS64qcHTVU9KtfGon8cN9cUuXsDmBobBBXjYUtuRxnYxgERS42nh6G
合約漏洞分析
這個漏洞的根本原因是在驗證簽名過程(“verify_signatures”)中,程序使用了一個在Solana更新至1.8.0時即被廢棄的“load_current_index”函數。該函數不會驗證輸入的“sysvar account”是否真的是“system sysvar”,從而攻擊者可以趁機偽造這個關鍵帳戶。
總結
總結
目前,Wormhole團隊已修復漏洞並已恢復網絡。在此,CertiK給開發者提出如下幾點建議:
開發者在使用外部依賴的函數時,需要對這個函數有足夠的了解。
隨時關注外部依賴代碼庫的重要更新,在有重大版本變動時及時對自己的代碼庫做出相應的調整。
當代碼版本更新時,也需及時進行全面審計,並將審計後的代碼及時更新到已部署上鍊的代碼中。
農曆破五將至,希望大家“破五窮”。同時也希望每一個項目在經過嚴格的審計之後上線部署從而獲得更高的安全性並減少財產損失的可能。好運從新的一年起開始不斷“循環”;安全從嚴格的審計開始,每個項目都有更好的“開端”!
迄今為止,CertiK已獲得了2500家企業客戶的認可,保護了超過3110億美元的數字資免受損失。歡迎點擊CertiK公眾號底部對話框,留言免費獲取諮詢及報價!