發現並修復Polygon zkEVM 中的嚴重漏洞

本文為機器翻譯
展示原文

Polygon zkEVM 是一個第 2 層解決方案,旨在透過鏈下交易處理和零知識證明的使用來增強以太坊的可擴展性。該漏洞位於 zkProver 組件內,引入了一個重大的安全漏洞,使網路容易受到證明偽造攻擊,這可能對區塊鏈第 1 層和第 2 層資金的完整性和安全性構成重大威脅。

在發現漏洞後,Verichains 和Polygon團隊合作開發了修復程序,然後在 2023 年 12 月在主網進行了審查和實施。

發現

這個漏洞是 Verichains 在零知識虛擬機器 (zkVM) 安全研究過程中發現的。在成功重現該錯誤後,攻擊者能夠產生偽造的證據並操縱網路內的狀態變化,該發現很快就透過 Immunefi 錯誤賞金平台報告。 Immunefi 認知到問題的嚴重性,將問題上報給Polygon zkEVM 團隊。團隊討論了該錯誤的性質,該錯誤被認為是至關重要的。由於該漏洞利用依賴來自 zkEVM 團隊運營的集中式模組 Trusted Aggregator 的惡意,因此被利用的可能性較低。

背景

Polygon zkEVM 是一種稱為零知識Rollup的第 2 層解決方案,旨在透過處理鏈下交易並使用零知識證明驗證狀態轉換來增強以太坊的可擴展性。它將零知識證明與模擬以太坊虛擬機器(EVM)的虛擬機器整合在一起,確保與現有以太坊工具和智慧合約的兼容性。

漏洞

Polygon zkEVM 的核心功能錨定在 zkProver 模組中,負責用零知識證明驗證交易。 zkProver 執行複雜的數學計算,透過產生正確性證明來驗證交易,然後由底層 1 上的智能合約進行驗證。這些證明對於確保交易有效性至關重要,同時提供更有效率、更便宜的執行環境。經過驗證的證明會導致網路狀態改變;因此,偽造證據的能力使可信任聚合器能夠惡意改變網路狀態,如果他們願意的話,可能會導致資金損失或凍結整個網路的資產。

此漏洞源自於 zkProver 複雜的遞歸證明生成過程中的弱點,使攻擊者能夠操縱網路狀態。我們透過在任何條件下都能發揮作用的關鍵證明偽造攻擊證明了這一點。由於系統的零知識特性,產生偽造證明的方法仍然是隱藏的。

zkEVM 中的證明者採用eSTARK (STARK 的擴展版本)作為其主要後端協議。為了降低第 1 層證明驗證的 Gas 成本,zkEVM 使用遞歸證明技術。在最後的遞歸步驟中,STARK 被轉換為 SNARK,以實現恆定的證明大小和驗證時間。然而,STARK 和 SNARK 運作的領域之間存在不相容性。 STARK 使用 F p^3中的元素(其中 p = 2 64 – 2 32 + 1)來促進高效率的算術運算。相較之下,SNARK 使用 F q中的元素,其中q與配對友好的橢圓曲線組聯繫在一起,在我們的例子中,q 的長度為 254 位元。這種不相容性會帶來潛在的安全問題。

第一個弱點涉及 Merkle 根的計算(基於 FRI 的多項式承諾)。樹的葉子是多個 F q元素的雜湊值。鑑於元素 (x, y, z) ∈ F p^3 (大約 192 位元熵)可以由 F q (約 254 位元熵)的元素唯一表示,因此在雜湊之前進行轉換是有意義的F p^3的每個元素通過映射: (x, y, z) ↦ x + 2 64 y + 2 128 z 到 F q的元素以節省一些電路限制。然而,此過程並不能確保與 x、y、z 關聯的值均限制為 64 位,從而可能允許它們成為 F q 中的任何元素。

第二個弱點來自算術門,該算術門對三個 F p^3元素a、bc 執行乘加運算,返回 F p^3的元素(a*b + c) 。考慮到a * b在進行模約減之前大約為 128 位元長,因此,第三個操作數c被分配了比所需更多的空間。

zkEVM 證明者後端的這些數學漏洞足以造成系統妥協。

影響和啟示

該漏洞具有重大的潛在影響,使可信任聚合器能夠為任何給定的計算製作有效的證明。這種漏洞可能會導致網路內未經授權的修改,最終導致第 2 層網路的資金損失,並可能影響第 1 層的存款。

我們團隊的概念驗證 (PoC) 證明了為以太坊主網zkEVM 的 Fork ID 4 迭代和測試網上的 Fork ID 5 迭代生成欺詐性證明的可行性。作為參考, Polygon zkEVM 的最新主網迭代是 Fork ID 8。

程序涉及:

  • 無效證明的產生:我們產生了兩張偽造證明來驗證以太坊主網區塊高度18066976 和18026062 上的分叉ID 4 zkEVM,以及一張用於驗證Goerli 測試網上區塊高度9679280 上的分叉ID 5 zkEVM。

  • 執行過程:利用特定的腳本,我們透過精確的輸入來編譯和執行它們,以產生和驗證偽造的證明。此程序將 zkEVM 的關鍵狀態參數(StateRoot 和 LocalExitRoot)變更為預定值,從而修改網路的狀態。

  • 觀察:在執行之前,我們驗證並記錄了網路的狀態根,這是合法的。執行後,狀態根被改變,表示操縱成功。

這些證明有效地將 zkEVM 的 StateRoot 和 LocalExitRoot 取消為 0x0(或任何預定值),本質上擦除了網路的狀態,包括餘額和存款。

補救措施

Verichains 披露後, Polygon zkEVM 團隊進行了詳細的審查,以充分掌握漏洞的動態和影響。以下總結了對 pil-stark 所做的調整,並經 Verichains 團隊驗證:

  • GL 值約束:新增約束以確保 recursiveF 驗證器電路的所有輸入都低於 2^64。這些已合併到 StarkVerifier Bn128 模板中。

  • GL 操作:在 BN128 欄位中引入了用於加法和減法的新模板,名稱為 GLSub(和 GLCSub)和 GLAdd(和GLCAdd)。此外,乘法和加法操作被隔離,消除了使用 GLCMulAdd 進行查詢或評估驗證。

  • GL操作標籤: recursiveF驗證器電路中新增了新標籤,以便在BN128欄位的GL操作期間更精確地應用約束。標籤 {maxNum} 表示最大可能訊號值,設定為 p – 1,其中 p = 0xFFFFFFFF00000001。

  • 測試:進行了調整以適應測試中的標籤。設計了兩個新測試來探測VerifyEvaluations 和VerifyQuery 中的邊緣情況,確保正確套用標籤。一項測試使用最大輸入值 (p – 1) 挑戰模板,而另一項測試則修改模板以維持標籤值而不執行減法。

修復連結:

我們感謝Polygon zkEVM 團隊對我們報告的漏洞做出及時有效的回應。此外,我們對錯誤賞金表示誠摯的感謝。此次合作顯示了對網路安全社群的安全和專業精神的明確奉獻。它證明了開放式溝通和建設性知識交流的價值,使開發人員和安全專業人員能夠增強區塊鏈生態系統的安全性。

關於我們

Verichains 是區塊鏈安全解決方案的領先供應商,專注於密碼分析、安全審計和應用安全解決方案。我們以調查和緩解一些最大的 Web3 駭客攻擊(例如Ronin和BNB Chain Bridge)而聞名,我們將突破性的研究與實用的安全解決方案相結合,為區塊鏈行業提供全面的保護。

Verichains 的世界級安全和密碼學研究團隊已成功識別出影響整個行業數十億美元的關鍵漏洞,發現了主要供應商實施的多方計算 (MPC) 和零知識證明 (ZKP) 的核心缺陷。作為BNB Chain、 Polygon Labs、 WEMIX、 Aptos、 Klaytn、Bullish 和DWF Labs領先Web3 公司值得信賴的安全合作夥伴,Verichains 利用其在傳統網路安全方面的深厚根基,為更安全、更可靠的Web3 生態系統提供尖端解決方案。

來源
免責聲明:以上內容僅為作者觀點,不代表Followin的任何立場,不構成與Followin相關的任何投資建議。
喜歡
收藏
評論