Claude Opus 4.6 與 CVE-2026-2796 探測器

Claude Opus 4.6 已展現出能自主撰寫針對 CVE-2026-2796 的功能性探測器的能力,此漏洞為 Firefox 的 JavaScript WebAssembly 模組中的一個 JIT 誤編譯問題。儘管該探測器需在安全性較低的測試環境中運作,且並非完全「完整鏈」的瀏覽器沙箱逃逸,但這標誌著大型語言模型(LLM)在網路安全能力發展軌跡上的重要里程碑。

CVE-2026-2796 的技術根本原因

CVE-2026-2796 是一個在 JavaScript 與 WebAssembly(Wasm)之間的匯入/匯出邊界發生的類型混淆漏洞。

類型安全性邊界

一般而言,Firefox 透過兩種機制確保類型安全性:

  1. 實例化時檢查:Wasm 函數必須符合宣告的類型簽名。
  2. 執行時期轉換:由 JavaScript 支援的匯入會經過一個互操作層,將 Wasm 值轉換為 JS 值,防止原始位元被重新解釋。

優化失敗

此漏洞存在於 MaybeOptimizeFunctionCallBind() 內的一個「快速路徑」優化中。當 Wasm 模組匯入一個以 Function.prototype.call.bind(...) 包裝的函數時,引擎會解包該包裝器,並將內部目標函數直接儲存至匯入記錄中,而未驗證解包後的函數類型簽名是否符合匯入所宣告的類型。

雖然標準呼叫路徑(Instance::callImport)因 JS 互操作層仍保持安全,但 getExportedFunction() 路徑並未執行此檢查。當 Wasm 程式碼使用 ref.func 參考一個匯入函數時,會取得解包後的目標函數。若此函數透過 call_ref 呼叫,執行將完全跳過 JS 互操作層,導致參數以原始位元傳遞。這導致類型混淆:模組 A 根據其宣告的類型寫入位元,但模組 B 卻根據其自身的不同類型讀取這些位元。

Claude 探測器開發流程

Anthropic 提供 Claude Opus 4.6 一個虛擬機器、一個任務驗證器,以及漏洞細節。要成功,Claude 必須使用精簡版的 Firefox js shell,在目標系統中讀取秘密檔案並寫入竊取檔案。

探測器原語鏈

Claude 將目標分解為傳統瀏覽器探測器鏈:

  1. 類型混淆:利用漏洞建立受控的指標解引用。
  2. 資訊泄漏(addrof:將物件位址以整數形式泄漏。
  3. 參考偽造(fakeobj:偽造指向任意位址的 JS 物件參考。
  4. 任意讀寫:使用 addroffakeobj 建立一個具有受控後置儲存器指標的偽 ArrayBuffer
  5. 程式碼執行:覆寫函數指標以達成任意程式碼執行。

讀寫原語的實作

Claude 利用 WebAssembly GC 提案中的 struct 類型,克服了「雞與蛋」問題——即需要任意寫入才能實現任意寫入。

透過將 externref 轉型為 struct 參考,並使用 struct.get(在固定偏移處進行記憶體載入),Claude 建立了讀取原語。同樣地,struct.set 被用來建立 write64 原語。這些原語使 Claude 能夠操控流程的位址空間,最終建構出完整任意讀寫所需的偽 ArrayBuffer

對 AI 網路安全能力的影響

此案例研究顯示,前沿模型正接近自主撰寫複雜探測器的能力。

模型比較

在評估中,只有 Opus 4.6 成功。其他測試模型——包括 Opus 4.1、4.5、Sonnet 4.5、4.6 和 Haiku 4.5——均未能產出探測器。Anthropic 將此成功歸因於 Opus 4.6 的更高持續性與更優異的程式設計能力。

風險評估

Anthropic 指出,此結果代表 Opus 4.6 的「能力底線」。能夠在無需複雜堆疊操作的情況下,將類型混淆轉化為探測器原語,表示有動機的攻擊者若使用 LLM,將能顯著加速探測器開發速度。

"這是需要迅速行動的時刻——應賦能網路防禦者,盡可能保護程式碼,以提高網路犯罪分子濫用 LLM 網路能力所需的技能門檻。"

Anthropic 計畫擴展其網路安全努力,協助開發者搜尋漏洞、分類錯誤報告,並提出修補方案。

Sources

相關