模型 / 資料集
google/oss-fuzz-gen avatar
google/oss-fuzz-gen

oss-fuzz-gen:用 LLM 生成 fuzz target,再丟回 OSS-Fuzz 打分

LLM powered fuzzing via OSS-Fuzz.

1,436 個 Star221 個 ForkPythonApache-2.0
GitHub

秒懂

它是什麼?
這個框架把「寫 fuzz target」拆成生成與評分兩段:模型產生候選檔案,OSS-Fuzz 負責編譯、跑、量覆蓋率。判斷重點在於它是一套實驗評測工具,不是能直接接上 CI 的 fuzzing 服務。
適合誰用?
如果你手上已經有 OSS-Fuzz 專案、想系統性比較不同模型與 prompt 產出的 fuzz target 品質,這個框架值得先照 USAGE.md 跑一次單一專案的小規模實驗,確認 API 額度與建置環境撐得住,再決定是否擴大。若你只是想替自己的程式庫加一個 fuzz target,或沒有 OSS-Fuzz 上的專案與對應的雲端模型憑證,這條路徑的成本遠高於手寫。
可以商用嗎?
可以。Apache-2.0 是寬鬆授權:你可以使用、修改並販售以它為基礎的軟體,只需保留著作權與授權聲明。
還在維護嗎?
活躍度在下降。儲存庫最近一次提交在 6 個月前。
用什麼語言寫的?
主要是 Python(依據 GitHub 的語言統計)。

以上回答依據專案的 GitHub 資料(最近同步於 2026年9月15日)與我們的分析,不構成法律意見。

開源專案深度解析

它處理的是 fuzz target 的產出,不是 fuzzer 本身

Fuzzing 的瓶頸通常不在 fuzzer。libFuzzer、AFL 這類引擎早就成熟,真正卡住的是每個專案都得有人寫出一個能餵進正確輸入、又能走到深層程式路徑的 fuzz target。這件事需要對專案的 API、輸入格式與初始化流程都熟,寫完還要反覆調,所以很多專案的 fuzz target 覆蓋範圍長年停在入門範例的層級。oss-fuzz-gen 針對的就是這一段:讓 LLM 讀專案內容後產生候選 target,再交給 OSS-Fuzz 實際建置與執行。README 開頭把定位寫得很清楚,這是一個 fuzz target 的生成與評測框架,對象是需要大量產生並比較 target 品質的人,而不是想隨手替一個小專案加 fuzzing 的開發者。它支援的語言是 C、C++、Java 與 Python,這也決定了它的適用邊界。

四個指標決定一個 target 是留下還是丟掉

生成只是前半段,這個框架真正的設計重心在評分。README 列出四項評估指標:可編譯性、執行期崩潰、執行期覆蓋率,以及相對於 OSS-Fuzz 中既有手寫 target 的執行期行覆蓋率差異。最後一項是關鍵,它讓「這個 target 有沒有價值」變成可比較的數字,而不是看模型輸出順不順眼。README 說明這些評估是對照生產環境的最新資料進行,並提到一份 2024 年 1 月 31 日的樣本實驗,涵蓋 297 個開源專案、1300 多個 benchmark。同一段也給了整體結果:對 160 個 C/C++ 專案成功產生有效 target,最大行覆蓋率增幅為 29%。這些數字是報告中的樣本結果,不是可外推的常態表現,而且 README 明講完整報告不對外公開,因為可能含有尚未揭露的漏洞。也就是說,你能拿到的只有自己跑出來的那一份。

模型清單很長,但實際可用的取決於你的憑證

README 列出的支援模型分成兩個來源。Vertex AI 這邊有 code-bison、code-bison-32k、Gemini Pro、Gemini Ultra、Gemini Experimental 與 Gemini 1.5;OpenAI 這邊有 GPT-3.5-turbo、GPT-4、GPT-4o、GPT-4o-mini、GPT-4-turbo,以及透過 Azure 存取的 GPT-3.5-turbo、GPT-4 與 GPT-4o。清單長不代表每個都能立刻跑,因為這些模型全部需要對應的雲端存取權與計費設定,而框架本身不代管這件事。模型版本同時也牽動實驗的可重現性:同一個 prompt 在不同模型上產出的 target 差異很大,所以任何比較都必須把模型名稱與版本一起記錄。README 沒有提供任何模型之間的品質排序,只提供清單,選擇得靠自己的實驗結果。

從 USAGE.md 進場,而不是從 README 進場

README 的 Usage 段落沒有塞任何指令,只指向 USAGE.md,並說明那裡有執行框架與產生報告的完整步驟。這個安排反映專案的實際狀態:它是一套需要設定環境、憑證與實驗參數的工具,不是裝完就能跑的一行指令。同樣地,想單獨執行或評估某個 agent、而不跑完整實驗的人,README 指向 agent_tests/readme.md 裡的 agent 執行框架。值得注意的是 README 中出現的 prompts/template_xml 這個路徑,它在 bugs 表格裡作為預設的 prompt builder 被反覆引用,代表 prompt 模板是可以替換的元件,而不是寫死在程式裡的常數。專案目錄中另有 benchmark-sets/all 作為基準集合的位置。至於具體的設定鍵與命令列參數,README 沒有列出,必須以 USAGE.md 為準,這裡無法憑現有材料補上。

30 個漏洞的表格同時說明了它擅長什麼

README 的 Bugs Discovered 段落列出 30 個由自動生成 target 找到的漏洞,表格欄位包含專案、漏洞、使用的 LLM、prompt builder 與 target oracle。多數列出自 Vertex AI 搭配 Default prompt builder,少數來自 Test-to-harness。專案涵蓋 cJSON、libplist、hunspell、zstd、gdbm、pjsip、gpac、sqlite3、htslib、libical、croaring、openssl、liblouis、libucl、openbabel 等。其中 openssl 一列對應到 CVE-2024-9143,屬於 OOB read/write。這份表格的價值不只在於數量,更在於它把「哪一種 oracle 條件下找到漏洞」一起記錄下來,例如 Far reach, low coverage、Low coverage with fuzz keyword + easy params far reach、All、Test identifier 這幾類。這暗示評分條件與發現結果之間有可觀察的關聯,也是這個框架相對於單純叫模型寫 target 的差異所在。

它假設你已經在 OSS-Fuzz 裡面

最容易被忽略的限制是前置條件。這個框架的評測完全建立在 OSS-Fuzz 平台之上,README 說生成出來的 target 是對照生產環境的最新資料來評估。這意味著你的目標專案必須已經存在於 OSS-Fuzz 的專案清單中,有可用的建置腳本與既有的手寫 target 作為對照基準;否則「行覆蓋率差異」這個指標根本無從計算。第二個限制是成本與時間:每個候選 target 都要真的編譯、真的執行,實驗規模一大,雲端模型呼叫與建置資源兩邊都在燒。第三個限制是輸出本身的性質,README 明白表示報告可能包含未揭露的漏洞,所以不對外公開,這也代表這套流程適合在受控環境中運行。如果你的專案不在 OSS-Fuzz 上,或你只需要一個穩定的 fuzz target,這個框架帶來的設定負擔明顯不划算。

與其手寫 target,不如先想清楚要換掉哪一段

直觀的替代做法就是由熟悉專案的工程師手寫 fuzz target,再交給 libFuzzer 或 OSS-Fuzz 執行。兩者的差異不在執行引擎,而在產出方式:手寫版本通常覆蓋專案最核心的入口,品質穩定但數量少,而且受限於寫的人對專案的理解深度;oss-fuzz-gen 走的是廣撒候選、用覆蓋率與崩潰把不合格的濾掉,代價是大量無效產出與隨之而來的建置開銷。另一種替代是直接對模型下 prompt、自己收 target 檔案,省掉整個評測管線,但你也就失去了可編譯性、崩潰與覆蓋率差異這三個判準,最後仍然得靠人工逐一檢視。這個框架的價值就在於它把「哪個 target 值得留」變成自動化的門檻,而這個門檻只有在 OSS-Fuzz 的資料上才成立。

維護成本落在模型與平台兩端

README 沒有提供版本號或 release 記錄,只說明預設分支為 main,最近的推送時間是 2026 年 3 月。這代表你追的是主線程式碼,而不是有版本保證的發行版。維護成本因此有兩個來源。一端是模型:支援清單裡同時存在 Gemini Experimental 這類會變動的模型,以及多個 OpenAI 世代,模型端一旦更名或下線,實驗設定就得跟著改。另一端是 OSS-Fuzz 平台,README 說明評測是對照生產環境的最新資料進行,平台側的建置環境或基準資料變動,都會讓先前的實驗結果難以直接對照。授權方面,專案採用 Apache-2.0,這是寬鬆授權,但這裡不提供法律意見;實際使用前仍應確認模型供應商的服務條款,因為生成內容與 API 使用受其約束,與程式碼授權是兩件事。

編輯結論

如果你手上已經有 OSS-Fuzz 專案、想系統性比較不同模型與 prompt 產出的 fuzz target 品質,這個框架值得先照 USAGE.md 跑一次單一專案的小規模實驗,確認 API 額度與建置環境撐得住,再決定是否擴大。若你只是想替自己的程式庫加一個 fuzz target,或沒有 OSS-Fuzz 上的專案與對應的雲端模型憑證,這條路徑的成本遠高於手寫。動手前先確認三件事:目標專案是否已在 OSS-Fuzz 中、你能否取得 Vertex AI 或 OpenAI 的存取權、以及 benchmark-sets/all 裡是否已有可對照的基準。

官方來源

  1. google/oss-fuzz-gen on GitHub
  2. Issues
  3. License: Apache-2.0
  4. README
社群筆記

社群筆記