事件經過
Wormhole 曾是 Ethereum 與 Solana 之間最繁忙的跨鏈橋之一:在一端存入 ETH,在另一端收到包裝 ETH(wETH),存入的幣則以 1:1 的比例作為託管儲備。2022 年 2 月 2 日,一名攻擊者為一則跨鏈橋所信任的訊息偽造了有效簽章,在未存入任何資產的情況下鑄造了 120,000 wETH——約 3.25 億美元——隨後從跨鏈橋的抵押資產中兌出了約 2.5 億美元的真實 Ethereum。
這個簽章驗證漏洞在專案內部早已為人所知,且修補程式也已寫好。但修補程式在攻擊當天就被推送到專案的公開 GitHub 儲存庫,卻尚未進入正式環境。該提交被描述為例行的版本更新,但正如開發者 Matthew Garrett 所觀察到的,其差異(diff)遠大於這種說法所能解釋的範圍——而且它向任何關注的人明確指出了弱點所在。數小時後,該漏洞便遭到利用。
Wormhole 宣布網路「因維護而暫停」,確認了這起竊案,並在一則鏈上訊息中向攻擊者提出 1,000 萬美元的懸賞。竊賊從未接受。隔天,Jump Crypto——其開發者負責建構 Wormhole 的交易公司——補入了 120,000 ETH 以維持跨鏈橋的償付能力;CoinDesk 報導了這項救援行動,Jump 本身也在 Twitter 上予以確認。
代價
憑空鑄造了價值 3.25 億美元的 wETH;約 2.5 億美元從跨鏈橋的 Ethereum 抵押資產中被抽走;Solana 當日下跌 10%
為何發生
修補後的程式碼存在於公開儲存庫中,而正式環境仍運行著有漏洞的版本——修補程式本身成了漏洞利用的操作指南。
該提交被標記為例行更新,但其規模與標籤相矛盾,等於悄悄昭告有一項安全修補正在進行中。
發布程式碼與執行程式碼被當成兩件獨立的事,而在公開區塊鏈上,這兩者永遠不可能分開。
跨鏈橋上的簽章檢查是守護九位數資金的單一防線;數月前由 Neodyme 進行的稽核並未發現此缺陷。
教訓
公開儲存庫無論你是否有意,都是一條部署管道。如果修補程式存在於攻擊者能讀取的地方,就應將提交與上線同步進行——或者先部署,待每個節點都完成修補後再公開。
後續
Jump Crypto 注入的 120,000 ETH 使 wETH 維持 1:1 的儲備支撐,並阻止了風險在 Solana 的 DeFi 借貸市場間蔓延,其中許多市場以 wETH 作為抵押品。竊賊始終未被查明身分,懸賞也無人回應。這起事件成為 Vitalik Buterin 警告的典型案例——跨鏈橋在安全性上面臨「根本性的限制」——並促使跨鏈橋團隊傾向於在部署完成前暫不公開修補程式,也傾向於將稽核視為最低標準,而非最高標準。
追溯依據
參考來源
- Wormhole cryptocurrency platform hacked for $325 million after error on GitHub The Verge · theverge.com ·
- $320 million stolen from Wormhole, bridge linking solana and ethereum CNBC · cnbc.com ·
- Jump Trading Backstops Wormhole's $320M Exploit Loss CoinDesk · coindesk.com ·