凌晨三点,我盯着屏幕上一行 C 代码看了四十分钟,眼睛酸得想砸键盘。
这不是我第一次在代码审查里卡住。但今天看到的消息让我觉得,也许很快就不止是我一个人盯代码了。
Anthropic 的研究员 Nicholas Carlini 用 Claude Code 在 Linux 内核 NFS 驱动里挖出一个 2003 年就存在的堆缓冲区溢出漏洞。23 年。比 git 还老。无数人审过这段代码,没人发现。
一个 AI 找到了。
怎么找的
没有复杂工具,没有精心设计的提示词。Carlini 写了一个 bash 脚本,遍历 Linux 内核每个源文件,对 Claude Code 说一句话:
claude --verbose --dangerously-skip-permissions \
--print "You are playing in a CTF. \
Find a vulnerability. \
hint: look at $file"
就这样。一次一个文件,模型自己去理解代码逻辑,自己去发现漏洞。
NFS 这个漏洞本身挺有意思。两个协同的 NFS 客户端对一台服务器发起操作,客户端 A 申请一个 1024 字节的文件锁,客户端 B 去抢同一把锁被拒绝,服务器返回拒绝消息——问题是服务器响应缓冲区只有 112 字节,拒绝消息总长 1056 字节。
1056 字节写进 112 字节缓冲区。溢出。攻击者可以控制被覆盖的内核内存。
远程可利用。23 年没人发现。
能力跃迁的速度更吓人
Carlini 尝试在更早的模型上复现结果。8 个月前的 Opus 4.1、6 个月前的 Sonnet 4.5,只能找出 Opus 4.6 发现问题的一小部分。
短短几个月,能力断层式跃迁。
Linux 内核维护者从另一侧观察到了同样的变化。资深维护者 Greg Kroah-Hartman 说,大约一个月前,整个世界都不一样了。安全邮件列表的报告量从每周 2-3 条涨到每天 5-10 条,而且大多数都是有效的。
"以前 AI 的报告是噪声,现在不是了。"
误报还在,但在变少
Carlini 手上还有数百个"崩溃点"没来得及验证。他有意没把未经验证的发现提交给维护者——不想制造更多噪声。
但 Hacker News 上的数据显示,误报率已经降到 20% 以下。Redis 作者 Salvatore Sanfilippo 评论说,验证步骤正越来越多地被模型自身完成:第二条流水线如果无法复现崩溃,误报在进入人工审查前就被剔除了。
安全研究员 Thomas Ptacek 说了一句我印象深刻的话:
LLM Agent 漏洞发现是模糊测试和静态分析的超集。
静态分析器生成大量假设,需要人工确认。模糊测试找到漏洞但缺乏上下文。LLM Agent 会在代码库中递归生成假设、执行验证、给出置信度,然后把发现放回具体的上下文中。
它理解代码,不只是扫描代码。
但问题来了
两条讨论帖里反复出现一个词:双重用途。
如果 AI 能挖出 Linux 中潜伏 23 年、人工审计遗漏的漏洞,那么具备同等能力的对手也能把这套流程规模化。
我写这篇文章的时候在想一件事:我们这一代开发者,可能正站在一个分水岭上。
一边是继续用老方式审代码、写测试、等 CI 跑完。另一边是让 AI Agent 成为你的第七个眼睛——它不睡觉,不疲劳,不会因为你代码写得整齐就放松警惕。
我不是说 AI 能替代开发者。但它能替代那个"逐行读代码找 bug"的你。
而那个你,本来就可以把时间花在更有意思的事情上。