返回部落格

從安全研究員視角回顧 Poly Network 駭客事件

Code Auditing
2021年8月15日
閱讀約 5 分鐘

在本篇部落格中,我們希望回顧 Poly Network 被駭事件的完整過程,並討論從中學到的教訓。

我們於 2021 年 8 月 10 日得知 Poly Network 遭到駭客攻擊(本部落格使用 +8 時區)。然而,當時並不清楚駭客攻擊是如何發生的,以及攻擊的根本原因為何。作為一個安全研究團隊,我們隨即展開了調查。

第一步:找到攻擊交易

我們在我們的交易虛擬化系統 (https://tx.blocksecteam.com) 中重放了攻擊交易 0xd8c1f7424593ddba11a0e072b61082bf3d931583cb75f7843fc2a8685d20033a。

執行軌跡非常簡單,這與其他操縱價格的攻擊不同。那些攻擊通常涉及極為複雜的函數呼叫(請參閱 Popsicle 駭客事件分析)。

第二步:分析合約代碼

在獲得攻擊軌跡後,我們需要審查合約的源代碼。令人驚訝的是,Poly Network 在 Etherscan 上並沒有經過驗證的源代碼。不過,我們最終在 GitHub 上找到了已發佈的源代碼。

在審查源代碼之後,我們沒有發現任何明顯的代碼漏洞。我們還將攻擊軌跡與合法交易的軌跡進行了比較,發現兩者非常相似。

第三步:恢復關鍵狀態

接著,我們恢復了攻擊期間的關鍵狀態。由於攻擊是從呼叫 VerifyHeaderAndExecuteTxEvent 開始的,我們恢復了幾個關鍵變數的值,我們已在初步分析中分享了這些內容 [1]。

在這個過程中,我們發現只有一個看守者 (keeper)(參見上圖)。由於該值是從攻擊軌跡中獲取的,且攻擊交易通過了所有簽名驗證,我們認為潛在原因可能是私鑰洩漏或伺服器簽名流程中的錯誤 [1]。

然而,我們在這裡犯了一個錯誤。分析攻擊就像剝洋蔥一樣。你必須一層一層地剝開,直到找到真正的「根源」。當時,我們並沒有進一步剝開洋蔥來查看看守者是否已被更改!

第四步:新線索

幾個小時後,Kelvin 和慢霧 (SlowMist) 在 Twitter 上提供了新的線索,證明看守者已經被更改。更改過程利用了雜湊碰撞來呼叫一個強大的功能——這是一次「極具智慧」的駭客攻擊。

現在我們意識到,我們的初步分析並不完整。根據最新資訊,我們重放了更改看守者的交易。結果顯示,其軌跡也非常簡單。

但請記住,在此次交易過程中,出現了四個看守者(而不是一個)。所有這些密鑰與其他合法交易的密鑰相同——這意味著這些密鑰是合法的。問題來了:為什麼更改看守者的交易能被成功打包上鏈並執行?

第五步:定位來源交易

我們隨即嘗試定位來源交易,因為 Poly Network 是一個跨鏈橋,理應在某處存在一筆來源交易。我們透過解碼關鍵變數(如下圖所示)完成了這項工作。它顯示了來源鏈和 Poly 鏈上的交易雜湊值。

這裡有一個尚未被其他地方提到的訣竅。該變數中的交易雜湊值,其呈現方式與 Poly 鏈上的官方雜湊值不同。例如,圖中 Poly 鏈的交易雜湊為 0x80cc978479eb082e1e656993c63dee7a5d08a00dc2b2aab88bc0e465cfa0721a。但在 Poly 鏈瀏覽器上,該雜湊值為 1a72a0cf65e4c08bb8aab2c20da0085d7aee3dc69369651e2e08eb798497cc80(你看出差別了嗎?)。我們已於 8 月 11 日 16:55 在 EthereumSecurity Telegram 群組中分享了這一發現。

第六步:定位根本原因

但我們仍然無法回答「為什麼更改看守者的交易」能夠被打包上鏈的問題。為了回答這個問題,我們從 Ontology 鏈開始追蹤,並發現了以下交易流程:

Ontology 交易 -> Ontology 中繼器 (relayer) -> Poly 鏈 -> Ethereum 中繼器 -> Ethereum

我們隨後閱讀了 Ontology 鏈和中繼器的源代碼。幾個小時後,我們發現 Ontology 中繼器對跨鏈交易缺乏足夠的驗證。這使得惡意交易能夠被打包到 Poly 鏈上,進而導致整個系統被攻破。

經過內部討論和反覆核對後,我們於 8 月 12 日 02:41 在 Twitter 和 Medium 上發佈了研究結果 [3]。

教訓

  • 設計安全性 (Security by design)。 安全應貫穿於 DeFi 項目的整個開發過程。用戶將資金託付給項目,項目則必須值得信賴。遺憾的是,我們看到了 Poly Network 對安全的忽視。例如,缺乏驗證是一種老派的安全漏洞,這我在大學課程中都曾教過。

  • 對於像這種擁有超過 6 億美元 TVL 的 DeFi 項目,竟然沒有經過驗證的源代碼。 去中心化基礎設施的基礎是信任,而信任的根基是透明度。遺憾的是,用戶願意將資金投入到一個黑箱項目中,這讓我感到驚訝與擔憂。如何提升用戶的安全意識,可能需要一個全新的解決方案。

參考文獻

[1]https://blocksecteam.medium.com/the-initial-analysis-of-the-polynetwork-hack-270ac6072e2a

[2]https://twitter.com/kelvinfichter/status/1425290462076747777

[3]https://blocksecteam.medium.com/the-further-analysis-of-the-poly-network-attack-6c459199c057

製作團隊:Yufeng Hu, Siwei Wu, Lei Wu, Yajin Zhou @ BlockSecTeam

BlockSec (@BlockSecTeam) / Twitter

訂閱最新動態
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 審計
從安全研究員視角回顧 Poly Network 駭客事件