Synthesizing Multi-Agent Harnesses for Vulnerability Discovery

Hanzhi Liu, Chaofan Shou, Xiaonan Liu, Hongbo Wen, Yanju Chen, et al.

View Original ↗
AI 導讀 technology AI 重要性 5/5

AgentFlow 自動合成多代理 harness,TerminalBench-2 達 **84.3%** 排行榜最高分,並在 Google Chrome 挖出 **10 個** zero-day 含 2 個 Critical CVE。

  • 相同 Claude Opus 4.6 在相同任務集,不同 harness 設計讓通過率差達 **4 倍**(20% vs 80%)。
  • 型別化 DSL 讓搜尋涵蓋全部五個 harness 元件,約 **20%** 不合法提案被型別系統提前過濾節省成本。
  • Chrome 3500 萬行 C/C++ 中找到 **10 個** zero-day,含 2 個 Critical 沙箱逃脫 CVE,廠商已確認。

相同的 Claude Opus 4.6 跑相同 89 道長視野任務,不同的 harness 設計讓通過率從 20% 跳到 80%,差了整整 4 倍。AgentFlow 把 harness 的設計自動化,在 TerminalBench-2 公開排行榜取得 84.3%,並在 Google Chrome 的 3500 萬行 C/C++ 程式碼中挖出 10 個未知 zero-day 漏洞,包含兩個 Critical 等級的沙箱逃脫 CVE(CVE-2026-5280 和 CVE-2026-6297),均已通過 Chrome 漏洞回報計畫確認。

同模型差 4 倍:harness 設計是 LLM 安全代理的核心變數

LLM 代理已開始發現人類安全審計員和自動 fuzzer(隨機輸入測試工具)數十年來都未能找到的真實漏洞。Google 的 Big Sleep 代理在 SQLite 中發現了記憶體損毀零日漏洞 CVE-2025-6965;Anthropic 的 Claude Mythos Preview 找到 OpenBSD TCP SACK 實作中長達 27 年的 DoS(拒絕服務)漏洞,只需兩個封包就能讓任何 OpenBSD 主機崩潰。這些成果表明代理系統的能力真實存在,且正在加速。

然而單一代理系統有三個根本限制:第一,大型目標(如 Chrome)一次執行就產生幾 MB 的 sanitizer(記憶體錯誤偵測器)和覆蓋率資料,很快超出約 200K token 的上下文視窗;第二,原始碼分析、輸入製作、崩潰分類等異質子任務搶奪同一個上下文,導致「中段遺忘」效應;第三,單一推理軌跡無法同時探索多個假設。這也是為什麼現代系統普遍採用多代理架構,讓 analyst(分析師代理)、explorer(探索者代理)、verifier(驗證者代理)各司其職。

決定「哪些代理存在、彼此如何溝通、每個代理用哪些工具、失敗時如何重試」的協作腳本就是 harness(代理協作框架),它才是決定成效的關鍵。在 TerminalBench-2 同一組任務上,三個系統跑同一個 Claude Opus 4.6,通過率範圍達到 4 倍寬——在模型固定的情況下,是 harness 的設計決定了最終成效。

現有四個 harness 最佳化系統各有侷限

過去幾年出現了幾個試圖自動設計 harness 的系統,但各自只搜尋設計空間的一個切片。Meta-Harness 只修改單一代理的提示詞和工具綁定,通訊圖固定為「無通訊」。ADAS 可以生成新的代理程式碼,但代理之間的通訊圖固定在手寫的階層式迴圈中。AFlow 對預定義的工作流程算子庫做樹狀搜尋,可改變連線方式,但代理池、提示詞、工具都不變。MaAS 從預定義代理池中取樣代理組合,但通訊方式和控制流固定為路由串聯。

這些系統有兩個共同缺陷。其一是搜尋範圍窄:任何需要跨元件變更的最佳解——例如「同時新增一個代理、重接通訊圖、並調整它的提示詞」——都超出它們的搜尋能力,而評估顯示這類跨元件變更正是讓有競爭力的 harness 脫穎而出的關鍵。其二是反饋粗糙:它們只依賴二元的通過/失敗訊號,無法診斷「失敗發生在哪裡」——到底是輸入從未到達漏洞函數?崩潰被不相關的斷言遮蓋?還是目標的防禦機制從未被觸發?在大型搜尋空間中,粗糙的反饋讓最佳化退化為隨機漫步。

AgentFlow 的設計:型別化 DSL 搭配執行時診斷

AgentFlow 的核心是一個型別化圖形 DSL(Domain-Specific Language,領域專用語言),把 harness 的所有維度統一成同一種可搜尋的表示。一個 harness 由五個元件組成:代理集合 A、通訊拓撲 G、訊息模板 Σ、工具分配 Φ、協作協議 Ψ。每個元件都是 DSL 程式中的一個可編輯欄位,因此單次最佳化步驟可以同時新增代理、重接通訊圖、重寫提示詞、更改工具綁定——全都是對同一個程式的局部改寫。

為了讓全空間搜尋可行,AgentFlow 的型別系統在執行昂貴的 LLM 推理之前,先做一次線性時間的圖形合法性檢查:(1)每個提示詞模板中的所有自由變數,必須解析到某個上游代理的輸出或某個反饋頻道;(2)每條宣告的邊,下游代理的模板必須真的引用了上游輸出;(3)圖是連通的,沒有孤立節點。在實驗中,約 20% 的提案因為結構不合法而被提前過濾,節省了大量推理成本。

反饋方面,AgentFlow 從目標程式讀取四類結構化執行時訊號:測試判斷、程式 stdout/stderr、行級覆蓋率圖,以及 AddressSanitizer 和 UndefinedBehaviorSanitizer 的記憶體安全報告。每次迭代的診斷步驟讀取完整的反饋包,定位「哪個代理失敗了、為什麼、應該做什麼樣的 harness 改寫」,再驅動下一輪提案——這套機制讓最佳化有方向可循,而非盲目試誤。

libheif 的三次迭代:從格式錯誤到 heap-buffer-overflow

論文用 libheif(HEIF/HEVC 圖像格式參考實作)上的 CVE-2020-23109 展示三次迭代如何完整觸發一個 heap-buffer-overflow(堆積緩衝區溢位)漏洞:函式讀取 8-bit alpha 通道卻把複製長度硬編碼為 16-bit(width × 2),造成越界讀取。

第一次迭代:單一代理生成 815 位元組的 HEIF 檔案,但二進位在早期格式檢查就拒絕了輸入,根本未執行到漏洞程式碼。AgentFlow 從 stderr 讀到「format constraint not satisfied」,判斷代理在構造有效格式上失敗。第二次迭代:系統拆成 analyzer(讀原始碼、描述有效 HEIF 格式)和 crafter(把描述轉成位元組)兩個代理。新的 817 位元組檔案通過格式檢查,parser 正常執行,但行覆蓋率資料顯示顏色轉換函數進入了,卻從未走到處理 8-bit alpha 通道的分支。第三次迭代:AgentFlow 加入第三個代理 verifier,改用磁碟上真實 HEIF 圖像為起點,只修改控制 alpha 位元深度的欄位,並在迴圈中不斷調整並重跑二進位,直到 AddressSanitizer 回報越界讀取。幾次嘗試後,verifier 成功重現漏洞。三次迭代跨越了「新增代理、重接通訊圖、改寫提示詞策略、接入 sanitizer 反饋頻道」四個維度的變更。

TerminalBench-2 的 84.3% 與 Chrome 的 10 個 zero-day

在 TerminalBench-2 的 89 道長視野終端機任務上,AgentFlow 合成的 harness 搭配 Claude Opus 4.6 取得 84.3% 通過率,是論文評估時公開排行榜快照中所有 harness 的最高分。在 Google Chrome(逾 3500 萬行 C/C++ 程式碼)上,相同的合成迴圈改用開源權重模型 Kimi K2.5(Kimi Team,2026)驅動,發現了 10 個先前未知的 zero-day 漏洞,包含兩個 Critical 等級的沙箱逃脫漏洞 CVE-2026-5280 和 CVE-2026-6297,全部通過 Chrome Vulnerability Reward Program 獲得廠商確認。

值得注意的是,TerminalBench-2 和 Chrome 兩個目標使用了不同的 LLM 模型,顯示 AgentFlow 的框架並不依賴特定模型。此方法有一個明確的適用前提:目標程式的原始碼和構建基礎設施必須可取得,以便編譯並插入覆蓋率與 sanitizer 插樁——這是標準的原始碼層級安全分析前提,不適用於純黑盒情境。論文也指出,手工設計的 harness 單次活動耗費可能高達數萬美元,而良好的 harness 設計可以用更少的推理呼叫解決更多任務。

harness 的設計,而非模型能力,是 LLM 漏洞挖掘系統通過率差 4 倍的真正原因;AgentFlow 自動搜尋全部五個 harness 維度,在 Chrome 找到 10 個 zero-day。

補充數據視覺化

五種 harness 最佳化系統對比
系統可搜尋的 harness 元件通訊圖是否可變反饋訊號
Meta-Harness提示詞、工具綁定(單代理)binary pass/fail
ADAS代理程式碼否(固定階層迴圈)binary pass/fail
AFlow通訊圖、協作協議binary pass/fail
MaAS代理選擇否(固定路由串聯)binary pass/fail
AgentFlow(本文)全部五個元件執行時結構化診斷

Abstract

LLM agents have begun to find real security vulnerabilities that human auditors and automated fuzzers missed for decades, in source-available targets where the analyst can build and instrument the code. In practice the work is split among several agents, wired together by a harness: the program that fixes which roles exist, how they pass information, which tools each may call, and how retries are coordinated. When the language model is held fixed, changing only the harness can still change success rates by several-fold on public agent benchmarks, yet most harnesses are written by hand; recent harness optimizers each search only a narrow slice of the design space and rely on coarse pass/fail feedback that gives no diagnostic signal about why a trial failed. AgentFlow addresses both limitations with a typed graph DSL whose search space jointly covers agent roles, prompts, tools, communication topology, and coordination protocol, paired with a feedback-driven outer loop that reads runtime signals from the target program itself to diagnose which part of the harness caused the failure and rewrite it accordingly. We evaluate AgentFlow on TerminalBench-2 with Claude Opus 4.6 and on Google Chrome with Kimi K2.5. AgentFlow reaches 84.3% on TerminalBench-2, the highest score in the public leaderboard snapshot we evaluate against, and discovers ten previously unknown zero-day vulnerabilities in Google Chrome, including two Critical sandbox-escape vulnerabilities (CVE-2026-5280 and CVE-2026-6297).