OpenAI o3模型在Linux内核中成功发现了一个高危0-day漏洞(CVE-2025-37899),展现出令人瞩目的能力。接下来,我们将从“零日漏洞”的基本概念出发,逐步剖析o3模型的具体表现、发现过程及其带来的深远影响。
一、什么是“零日漏洞”?
零日漏洞(zero-day vulnerability)是指软件或硬件中一个尚未获得有效补丁的安全漏洞,且该软件或硬件的供应商通常对此毫不知情。利用此类漏洞发起的攻击被称为零日攻击(zero-day exploit)。“零日”一词最初用于描述“零天”(即未公开发布)的盗版软件,后来引申为修复漏洞的时间极为紧迫。由于漏洞已被发现或利用,留给供应商准备补丁的时间几乎为零,因此得名“零日”。
通俗地讲,零日漏洞就像房屋中一个未被发现的隐秘入口,入侵者已经进入,而屋主并不知道这个入口的存在,更谈不上修复它。

二、o3模型在Linux内核中的卓越表现
安全研究员Sean Heelan在审计Linux内核中的ksmbd模块(一个在内核空间实现SMB3协议的文件共享服务)时,为测试OpenAI o3模型的能力,提出了一个极具挑战性的问题:o3能否发现Linux内核中的安全漏洞?
2.1 基准测试:o3与Claude Sonnet的对比
Sean首先使用一个他此前手动发现的漏洞(CVE-2025-37778,一个“Kerberos认证漏洞”)来检验o3。该漏洞出现在处理Kerberos认证路径中的“会话设置”请求时,是一个典型的UAF(Use-After-Free,释放后使用)漏洞。
- 漏洞原理简述: 当函数
krb5_authenticate检测到会话状态为SMB2_SESSION_VALID时,会释放sess->user。代码逻辑假设后续要么重新初始化sess->user,要么在返回错误后不再使用它。但实际情况并非如此,攻击者可构造特殊路径,使sess->user未被重新初始化,并在返回错误后仍被访问,从而触发UAF漏洞。 - LLM测试设置:
- 代码范围:Sean提取了“会话设置”命令处理函数及其调用的三层深度内的所有函数代码,加上数据读取、请求解析、连接拆除等部分,总计约3.3k行C代码(约2.7万tokens)。
- Prompt核心:明确要求LLM寻找UAF漏洞;提供ksmbd的高级概述、架构和威胁模型;强烈引导LLM避免误报,宁可漏报也不可错报。
测试结果(100次运行):
- o3模型:成功识别该漏洞达8次,66次漏报,28次误报。真实漏洞与误报的比例约为1:4.5。这意味着平均每查看最多5个误报,就能发现1个真实漏洞。
- Claude Sonnet 3.7:在100次运行中成功找到3次。
- Claude Sonnet 3.5:在100次运行中成功找到0次。
值得注意: Sean强调,1:4.5的比例仅代表o3在特定代码片段上的表现。但关键在于,面对3.3k行真实且非平凡的C代码,o3能以合理的信噪比和2-3倍于竞品的效率识别出这个UAF漏洞,这无疑是LLM能力的一次重大飞跃。
此外,o3生成的报告风格更接近人类编写的漏洞报告,内容精炼且重点突出;而Sonnet 3.7的风格则更像工作日志或思考过程。尽管各有优劣,但o3的输出在结构和重点方面更易于理解。
三、意外发现:o3独立识别出一个0-day漏洞(CVE-2025-37899)
在确认o3能发现已知漏洞后,Sean进一步扩大了测试范围:他将ksmbd中所有命令处理相关代码(主要在smb2pdu.c,约9k LoC),加上连接设置、拆除、命令分发等代码,总计约12k LoC(约10万输入tokens),全部提供给o3,同样运行了100次。
结果如何?
- 对于之前的“Kerberos认证漏洞”,在更大的代码量下,o3仅成功找到1次,性能有所下降。
- 然而,在另一次运行中,o3的报告里出现了一个全新的、类似的UAF漏洞!这次问题出现在SMB的“logoff”(注销)命令处理中。这就是后来的CVE-2025-37899!
漏洞详解: 这个新漏洞同样是sess->user被释放后,仍被其他线程访问所致。o3的描述非常精准:“在logoff过程中,如果另一个线程在ksmbd_free_user之后、sess->user = NULL之前这极其短暂的窗口期内访问sess->user,就会触发UAF漏洞。”
Sean表示,读到这份报告时,他对AI工具在漏洞研究中的潜力有了全新的认识。即使AI止步于此,安全研究员也应开始思考如何将其整合进自己的工作流程。当然,针对这个0-day漏洞,o3的信噪比大约在1:50左右,处理起来仍具挑战,但这已是实实在在的进步。
四、o3的洞察力:甚至超越了人类专家?
更有趣的是,Sean最初修复“Kerberos认证漏洞”时,他给出的补丁如下:
- if (sess->state == SMB2_SESSION_VALID)
- ksmbd_free_user(sess->user);
+ if (sess->state == SMB2_SESSION_VALID) {
+ ksmbd_free_user(sess->user);
+ sess->user = NULL;
+ }
这个补丁仅仅是在释放sess->user后将其设置为NULL。
但在阅读了o3关于logoff漏洞(CVE-2025-37899)的报告后,Sean意识到他原来的修复方案并不彻底。原因在于:SMB协议允许不同连接“绑定”到同一个会话。在logoff场景下,即使sess->user被设为NULL,如果另一个线程在ksmbd_free_user之后、sess->user = NULL之前这极短的窗口期内访问sess->user,依然会触发UAF。
回过头再看o3针对Kerberos认证漏洞的某些报告,Sean发现o3有时也犯了和他同样的错误。但令Sean惊讶的是,在其他一些报告里,o3正确地指出将sess->user设为NULL不足以完全修复问题,因为它充分考虑到了会话绑定的可能性。
这意味着,如果Sean当初借助o3辅助发现和修复Kerberos漏洞,理论上他能做得比自己单独修复更好!当然,他也坦言,以当前o3的误报率,要仔细甄别每一份报告并找到那个“正确”的解决方案,任务依然艰巨。但不可否认的是,这个趋势极为积极。
五、常见问题与解答
Q1:o3模型为什么能发现这个漏洞?
A1:o3在代码推理、问答和问题解决方面表现出色。它能够阅读并理解复杂的C语言代码逻辑,识别出函数调用之间的错误假设。例如,它识别出krb5_authenticate函数假设释放sess->user后不会再被使用,但实际存在竞争条件导致失效。这种人类专家式的逻辑推理能力,是它发现漏洞的关键。
Q2:o3误报率这么高,实际应用价值大吗?
A2:尽管误报率较高(例如在发现0-day时信噪比约为1:50),但其价值在于发现了人类专家可能遗漏的漏洞。对于安全研究员而言,利用o3可以极大地增加发现新型漏洞的概率,并且它生成的报告比传统工具(如符号执行、Fuzzing)更具可读性和洞察力,值得投入时间去深入研究其输出。
Q3:o3能完全取代人类安全专家吗?
A3:不能。o3目前仍然是一个强大的辅助工具,而不能完全替代人类专家。它可能产生无意义的结果,且信噪比还有待提升。但是,它给出正确结果的几率已经“高到值得你投入时间和精力”,可以显著提升人类在漏洞研究中的效率和表现。
六、总结与未来展望
Sean Heelan的经历充分证明了LLM在程序分析能力上已达到一个前所未有的、更接近人类的水平。相比传统的符号执行、抽象解释或Fuzzing等技术,LLM在创造力、灵活性和通用性方面,更像是一个人类代码审计员。
自GPT-4以来,LLM在漏洞研究中的潜力初现端倪,但真实世界问题的效果往往不尽如人意。o3的出现改变了这一点。我们现在拥有一个在代码推理、问答、编程和问题解决方面足够出色的模型,它能够真正地提升人类在漏洞研究中的表现。
o3并非完美无缺,它仍然可能产出无意义的结果,令人感到沮丧。但最关键的区别在于:给出正确结果的几率,已经高到足以值得我们投入时间和精力,在真实的安全问题上进行尝试。 这无疑是AI在安全领域中的一个重要里程碑。
