AI成功找到Linux安全漏洞,還是內核級別的零日漏洞。
剛剛,OpenAI總裁轉發了獨立研究員Seen Heelan的實驗成果:用o3模型找到了Linux內核SMB實現中的一個遠程零日漏洞。
更讓人驚訝的是,整個過程中沒有用到任何復雜的工具——沒有腳手架、沒有智能體框架、沒有工具調用,僅僅是o3 API本身。
這個漏洞被編號為CVE-2025-37899,是SMB”注銷”命令處理程序中的一個釋放后使用(use-after-free)漏洞。
據作者透露,這是首次公開討論的由大模型發現的此類漏洞。
有網友看過發現過程后感嘆,原以為會有很瘋狂的實驗設置,但其實只是把一堆代碼縫到一起,讓o3檢查100次。
希望其他白帽黑客已經開始像這樣檢查其他關鍵操作系統了。
OpenAI首席研究官Mark Chen表示:像o3這樣的推理模型正開始助力深度技術工作和有意義的科學發現。接下來一年,類似這樣的成果將會越來越普遍:
AI不僅找到漏洞,還能輔助修復
Sean Heelan是一位獨立研究員,專注于基于大模型的漏洞研究和漏洞利用自動化生成。
他原本在手動檢查Linux內核的KSMBD(內核態SMB3協議實現)漏洞,想要暫時遠離大模型相關的工具開發。
但o3發布后,他忍不住想測試一下:”既然我手里已經有這些漏洞,不如看看o3能不能找到它們?”
他先用一個自己手動發現的漏洞CVE-2025-37778作為測試。這是Kerberos認證路徑中的一個釋放后使用漏洞,是測試大模型能力很好的基準,因為:
接下來開始實驗之前,還需要搞清楚一個問題,該給大模型展示哪些代碼?
理想情況當然是大模型讀取整個代碼庫并輸出結果,但實踐中上由于上下文窗口的限制還無法事先。
最終Heelan為 LLM 提供了“會話設置”命令處理程序的代碼,包括它調用的所有函數的代碼等等,直到調用深度達到3(這是包含推理漏洞所需代碼所需的深度),還包含了命令處理器、連接建立/拆除、請求分發等完整上下文。
提示詞中告訴o3專門尋找use-after-free漏洞,提供KSMBD架構說明,強調要避免誤報,每個實驗運行100次,統計成功率。
相關代碼和提示詞已開源在GitHub上。
Heelan還按同樣流程測試了Claude3.7和Claude 3.5作為對比,結果o3的表現讓人眼前一亮:
此外有意思的的是,o3和Claude的輸出風格完全不同。
o3生成的像人類寫的漏洞報告,結構清晰、重點突出
Claude更像思維流或工作日志,細節豐富但略顯冗長。
接下來發生的事情更精彩了。
Heelan想測試o3在更大代碼量下的表現,于是給它提供了所有SMB命令處理程序的代碼,約12000行代碼。
雖然找到原始漏洞的成功率降到了1%,性能明顯下降。但在運行結果中,o3報告了一個全新的漏洞。
Heelan自己之前也不知道這個漏洞,它同樣是由于sess->user的釋放造成的,但這次是在會話注銷處理程序中。
o3自己對這個漏洞的解釋如下。
當一個ksmbd工作線程還在執行使用sess->user的請求時,另一個處理同一會話SMB2 LOGOFF的線程釋放了該結構。沒有同步機制保護該指針,所以第一個線程會解引用已釋放的內存——這是一個經典的釋放后使用漏洞,會導致內核內存損壞和任意代碼執行。
更有意思的是,研究員發現o3不僅能找到漏洞,某些情況下修復方案比人類更完善。
對于之前的Kerberos認證漏洞,Heelan最初提出的修復是簡單地將指針置空:
if (sess->state == SMB2_SESSION_VALID) {
ksmbd_free_user(sess->user);
sess->user = NULL; // 添加這行
}
但o3的報告中有指出這個修復不夠充分,因為SMB協議允許兩個不同的連接”綁定”到同一個會話,在釋放和置空之間的短暫窗口期,另一個線程仍可能訪問這個指針。
最終Heelan承認,如果使用o3來找和修復原始漏洞,“理論上”會比自己完成更好。
之所以加上“理論上”的限定,是因為現在AI誤報的比例有點高,人類很難認真仔細地查看o3的每份報告。
不過他也認為隨著技術的發展,這個比例只會越來越低。
Heelan在報告結尾感慨道:
大模型在程序分析技術的能力空間中,處于一個比我們見過的任何東西都更接近人類的位置。考慮到創造力、靈活性和通用性,LLM更像是人類代碼審計員,而不是符號執行、抽象解釋或模糊測試。
他特別強調,如果你從事安全研究工作,現在應該開始密切關注了:
不過也有人看到了其中的風險:
如果壞人利用AI的能力找到類似的漏洞并攻擊系統又如何呢?