Erik Zhang 發布 Neo N3 v3.10.2,修補多重簽章見證驗證繞過漏洞
重點速覽
- •Neo 於 10 月 23 日發布 Neo N3 v3.10.2,這是由共同創辦人 Erik Zhang 撰寫的安全性版本,僅包含一項邏輯修正,未加入新功能。
- •此修補消除了因多重簽章合約多載之間公鑰驗證不一致而導致的見證驗證繞過漏洞,該漏洞先前允許格式錯誤的腳本通過某一驗證路徑卻在另一條路徑中失敗。
- •透過對 Helper.cs 的小幅,所有驗證程式碼路徑現在都會在將腳本歸類為有效多重簽章合約之前,強制對公鑰執行完整的密碼學解碼。
- •該提交新增兩項測試並更新一項既有測試,以確認含有無效公鑰的腳本會被所有驗證路徑拒絕,其中包括見證雜湊不符的完整交易案例。
- •目前尚未接獲 Neo N3 MainNet 上確認被利用的通報,且此修補僅在運行已修補版本的節點上生效,因此營運者的採用是關鍵的後續步驟。

Neo 已發布 Neo N3 v3.10.2,這是一項針對性的安全性修補,修復了一個見證驗證繞過漏洞——該漏洞先前允許格式錯誤的多重簽章腳本通過某一驗證路徑,卻在另一條路徑中被攔截。對一般使用者而言,此修補消除了無效交易可能在節點軟體的一部分中被視為有效的途徑。
此次版本由 Neo 共同創辦人 Erik Zhang 撰寫,於 10 月 23 日發布。它僅包含對 Neo N3 多重簽章合約驗證邏輯的一項邏輯修正,並未加入任何新功能。
此修補解決的問題
當交易被提交至 Neo N3 網路時,協議會驗證所附帶的簽章是否有效,以及是否來自正確的參與方。這類授權資料——交易所附帶的簽章與相關檢查——正是協議所稱的見證(witness),也是此次修補所強化的層級。對於多重簽章合約而言——此類合約需要最低數量的授權簽署者批准交易,並常用於多方共同控管同一筆資金的情境——該驗證包括檢查合約腳本中列出的每把公鑰在密碼學上是否有效。
此修補彌補了該項檢查在應用方式上的缺口。Neo N3 的多重簽章驗證邏輯包含多條用於檢視多重簽章腳本的程式碼路徑。其中一條路徑會完整解碼每把公鑰,此過程會立即拒絕任何不是橢圓曲線上有效點的金鑰。第二條路徑僅檢查腳本的結構形狀——正確的位元組長度與正確的金鑰數量——而不執行密碼學解碼。因此,含有格式錯誤公鑰的腳本可能通過第二條路徑卻在第一條路徑中失敗,使兩條路徑對腳本有效產生分歧。這種分歧違背了區塊鏈驗證應具備的基本特性:無論由哪條程式碼路徑檢視,同一腳本都應得到相同的判定結果。
這一不一致性並非無人知曉。自 2024 年起,該行為便已記錄在 Neo 自己的測試套件中,當時 Neo SPCC 開發者 Anna Shaleva 將新的見證驗證程式碼從 NeoGo 移植到 C# 參考節點。該 Pull Request 中新增的一項測試指出,未經修飾的 IsMultiSigContract 多載因跳過金鑰解碼而「不走運」,但卻將該結果視為預期行為而非缺陷。其中涉及的兩種實作——C# 參考節點與 NeoGo——也凸顯了行為一致的重要性:在由多種節點實作共同維護的網路上,每種實作都必須對同一交易作出相同的裁定。
此修補解決了這一不一致。現在,驗證邏輯中的所有路徑都會強制執行完整的金鑰解碼,之後才將腳本歸類為有效的多重簽章合約。
修補與測試涵蓋範圍
此變更是對 src/Neo/SmartContract/Helper.cs 的一處小幅修改。修補程式每次都會解碼金鑰,因此檢視多重簽章腳本的每條路徑現在都執行相同的檢查。
該提交新增了兩項測試,並更新了一項既有測試。第一項新測試將含有損壞公鑰的多重簽章腳本送入所有三條驗證路徑,並確認每一條都予以拒絕。第二項測試則建構一筆帶有損壞多重簽章見證的完整交易,並確認網路拒絕該交易。該測試執行兩次——一次簽署者地址與見證相符,一次不相符——涵蓋了版本說明中提到的「見證雜湊不符」案例。
更新的測試 TestIsMultiSigContract_WrongCurve 先前預期捷徑路徑會接受含有無效金鑰的腳本,現在則預期所有三條路徑都予以拒絕,藉此在測試套件中鎖定修正後的行為,以防範未來的回歸。
Neo 核心開發者、R3E Network 創辦人 Jimmy Liao 在 X 上描述了此次版本:
Neo N3 v3.10.2 — security release. Fixes a witness-verification bypass from inconsistent public-key validation between
IsMultiSigContractoverloads. Keys are now validated before multisig classification.
尚無已知漏洞利用
此次版本發布時並未伴隨正式的安全公告。無論是版本說明還是提交訊息,均未描述 Neo N3 MainNet 上有任何已確認的漏洞利用。
運行 Neo N3 的節點營運者與基礎設施提供者應更新至 v3.10.2——由於這是一項客戶端修補,其更嚴格的檢查僅在實際運行已修補版本的節點上生效,因此營運者的採用是後續值得關注的實際進展。完整版本已發布於 GitHub。