返回部落格

重探蟲洞攻擊

Code Auditing
2022年3月22日
閱讀約 5 分鐘

1. 背景

Wormhole,亦即愛因斯坦-羅森橋(Einstein-Rosen bridge),是一種連接時空中不同點的假設性結構。在區塊鏈世界中,Wormhole 被用作不同鏈(例如 Solana 和 Ethereum)之間的橋樑。使用者可以透過 Wormhole 在區塊鏈之間轉移代幣化資產。

2022 年 2 月 2 日,Wormhole 遭到駭客攻擊,攻擊者成功鑄造了 120,000 個包裝以太幣(wrapped Ether),價值 3.2 億美元,這是 DeFi 歷史上繼 Poly Network 之後第二大規模的損失。

2. Wormhole 的運作方式

Wormhole 的運作原理是監控各鏈上發出的訊息。受監控的訊息會被轉發到目標鏈,從而建立跨鏈通訊協定。

一個直觀的問題是:如何保證受監控的訊息是可信的?為了解決這個問題,Wormhole 引入了 19 個額外的節點,稱為守護者(Guardians)。目前的守護者名單可以在 Wormhole Explorer 中查看。每位守護者都可以獨立驗證受監控的訊息並進行簽名。

在 Wormhole 中,訊息以 VAA 格式組織。VAA 由兩部分組成:一是標頭(header),用於收集守護者的簽名;另一是主體(body),其中包含目標鏈資訊、訊息負載(payload)等。

一旦守護者的簽名達到共識閾值,VAA 就可以發布到鏈上。

總而言之,守護者負責傳輸訊息的完整性。

3. 代幣橋(Token Bridge)

在介紹了訊息如何在不同鏈之間傳輸後,理解作為 Wormhole 主要應用的代幣橋運作方式就不難了。

若要將代幣從 A 鏈轉移到 B 鏈,Wormhole 會在 A 鏈上鎖定代幣,並在 B 鏈上鑄造它們。這是其高階運作思路。具體而言,分為三個步驟:首先,鎖定 A 鏈上的代幣;其次,廣播 A 鏈上的代幣應轉移至 B 鏈的訊息;第三,B 鏈接收該訊息後,鑄造相應的代幣。至此完成。

4. Solana 指令(Instructions)

在 Solana 中,一筆 交易 由多個指令組成。每個指令包含一個程式 ID(program ID)、帳戶列表和數據內容。程式 ID 代表將處理該指令的程式(智慧合約)。程式會解析這些數據並對提供的帳戶進行操作。

5. Wormhole 攻擊事件

簡而言之,攻擊者在沒有於以太坊上鎖定任何資產的情況下,在 Solana 上鑄造了 120,000 個 ETH。交易紀錄在此。

因此,問題在於攻擊者是如何在 Solana 上成功鑄造這 120,000 個 ETH 的。讓我們詳述其步驟。為了鑄造代幣,合約呼叫了 complete_wrapped 指令。此指令接收多個位址,而第三個位址就是儲存簽名訊息的位址。在鑄造 120,000 ETH 之前,B 鏈(即 Solana)理應收到一份簽名訊息(VAA),證明 120,000 ETH 已在 A 鏈(即以太坊)上鎖定。

為了發布訊息,系統呼叫了定義在 post_vaa.rs 中的 post_vaa。隨後會建立一個帳戶以儲存該訊息。然而,post_vaa 並未檢查來自守護者的簽名。相反,簽名驗證是由定義在 verify_signatures.rs 中的 verify_signatures 來完成的。

傳送給 verify_signatures 的第四個帳戶是系統指令帳戶(system instruction account)。現在讓我們探討 verify_signatures 是如何運作的。

在 第 103 行,函數 load_instruction_at 被呼叫以載入先前執行的指令 secp_ix。secp_ix 會呼叫 Secp256k1 簽名驗證函數。因此,verify_signatures 是透過檢查先前執行的指令 secp_ix 來驗證簽名的。現在你找出原因了嗎?load_instruction_at 函數並沒有檢查應從何處載入指令!!!預期中應該是從 Sysvar:Instructions 載入指令的。

然而,攻擊交易的第四個帳戶是 2tHS1cXX2h1KBEaadprqELJ6sV9wLoaSdX68FqsrrZRd,而不是 Sysvar:Instructions。在這種情況下,攻擊者成功繞過了簽名驗證過程。Wormhole 認為驗證已通過並將訊息發布到鏈上,導致在未鎖定任何資產的情況下鑄造了 12 萬個 ETH!

讓我們看看一個合法的驗證 指令。該交易由兩個指令組成。第一個指令呼叫 Secp256k1 驗證函數,而第二個指令呼叫 verify_signatures 指令。請注意,此處的第四個帳戶是 Sysvar:Instructions。

在鑄造 12 萬個 ETH 後,攻擊者將其提現回以太坊,並兌換成其他代幣以獲取利潤。

6. 修補方案

正如 程式碼倉庫 中提到的,自 1.8.0 版本起,load_instruction_at 已不安全,且 Sysvar 帳戶位址未經檢查。建議轉而使用 load_instruction_at_checked。

7. 我們的思考

  • 開發人員應非常熟悉他們所使用的外部函數。
  • 持續關注所用函式庫的重要變更。若函式庫發生變化,使用該函式庫的程式碼可能需要相應調整。
  • 函式庫維護者應意識到特定變更帶來的潛在風險,並及時通知整個社群。僅僅添加註釋可能是不夠的。
  • 如果函式庫版本或程式碼變更,您的合約程式碼需要重新進行審計。

關於 BlockSec

BlockSec 是一家開創性的區塊鏈安全公司,由一群全球傑出的安全專家於 2021 年創立。公司致力於增強新興 Web3 世界的安全性和易用性,以促進其大規模採用。為此,BlockSec 提供智慧合約與 EVM 鏈的安全審計服務,開發了用於安全開發與主動阻斷威脅的 Phalcon 平台,用於資金追蹤與調查的 MetaSleuth 平台,以及協助 Web3 開發者在加密世界中高效航行的 MetaSuites 插件。

迄今為止,公司已服務超過 300 家知名客戶(如 MetaMask、Uniswap Foundation、Compound、Forta 和 PancakeSwap),並獲得了包括 Matrix Partners、Vitalbridge Capital 和分佈式資本(Fenbushi Capital)等頂尖投資者的兩輪數千萬美元融資。

官方網站:https://blocksec.com/

官方 Twitter 帳號:https://twitter.com/BlockSecTeam

訂閱最新動態
Bitget 3.875億美元鏈下違規事件:超越金鑰與合約的範疇
Security Insights

Bitget 3.875億美元鏈下違規事件:超越金鑰與合約的範疇

2026年9月24日,攻擊者利用第三方安全產品漏洞,獲取內部憑證並偽造提款指令,導致約3.875億美元從Bitget部分營運錢包(涵蓋Ethereum、其他EVM網絡、XRP Ledger、Zcash及TRON)轉出;私鑰及冷錢包未受影響。本文深入梳理事件路徑與資金流向,分析快速轉換為原生資產及生態恢復應對,提出機構縱深防禦框架,並說明授權區塊鏈滲透測試如何驗證跨層假設。

約1130萬美元損失:Multicall Router、Nostra|BlockSec Weekly
Security Insights

約1130萬美元損失:Multicall Router、Nostra|BlockSec Weekly

本報告涵蓋2026/09/14至2026/09/20期間,探討以太坊與Starknet上兩起合計損失約1130萬美元的安全事件。較大一起中,多重呼叫路由器將自身位址接受為分派目標,導致巢狀呼叫以路由器自身已授權身分而非外部呼叫者身分進入Safe錢包的Gateway模組,約2900枚`aEthrsETH`被轉出至攻擊者建立的Uniswap v4池。在Starknet上,Nostra預言機整合僅要求最少一個聚合來源,當三個設定價格來源中僅兩個達成聚合時,操縱的薄池報價與正常報價平均後將`NSTR`估值約49.52美元,支撐約350萬美元以高估抵押品借貸。

损失約3.2億美元:Liquid Network與Symbiosis遭攻擊事件 | BlockSec
Security Insights

损失約3.2億美元:Liquid Network與Symbiosis遭攻擊事件 | BlockSec

本報告涵蓋2026/09/07至2026/09/13,探討兩起造成約3.2億美元損失的安全事件,包括前份報告未提及、發生於2026/09/06的Liquid Network漏洞事件。較大者為該Liquid Network漏洞:Elements中的rangeproof驗證快取藉由雜湊四個欄位(其中兩個長度可變)串接而成金鑰,且未標示欄位邊界,導致某輸出的驗證結果被錯誤套用至另一個未經檢驗證明的輸出,使攻擊者得以憑空創造4,000枚無擔保L-BTC,並將幾乎全數兌回比特幣。在橫跨BNB Smart Chain、Ethereum與Rootstock的Symbiosis跨鏈橋比特幣路徑中,讀取比特幣存款的鏈下程式碼從存款人可自行控制的欄位取得其身份,並在未檢查手續費是否為負值的情況下自存款中扣除,使330聰的存款鑄造出`46,116,860,184.27388234 syBTC`;其須賣出所經之資金池僅有11.26 syBTC,致使流動性提供者與用戶損失約9.97 BTC(約77萬美元)。

Web3 最佳安全審計方

在上線之前驗證設計、程式碼與業務邏輯,對標業內最高安全標準。

BlockSec 審計
重探蟲洞攻擊