Claude Code 发现了隐藏 23 年的 Linux 漏洞

Claude Code 在查找安全漏洞方面已经变得极其出色,这仅仅是 AI 审计大型代码库能力的开端。

阅读时长: 4 分钟
共 1614字
作者: longlikun

本文内容参考自 Michael Lynch 的博客文章:Claude Code Found a Linux Vulnerability Hidden for 23 Years

Anthropic 的研究科学家 Nicholas Carlini[un]prompted AI 安全会议报告称,他使用 Claude Code 在 Linux 内核中发现了多个可远程利用的安全漏洞,其中包括一个已经隐藏了 23 年之久的漏洞。

Nicholas 对 Claude Code 查找此类 Bug 的效率感到十分震惊:

“我们现在在 Linux 内核中发现了一系列可远程利用的堆缓冲溢出(heap buffer overflows)漏洞。我这辈子以前从未亲手发现过这类漏洞,这非常、非常、非常难做到。但有了这些语言模型,我一下子发现了一堆。” —— Nicholas Carlini,发表于 [un]prompted 2026

Claude Code 是如何发现这个 Bug 的?

最令人惊讶的是,Claude Code 在发现这个漏洞时几乎不需要人工监督。Nicholas 基本上只是将 Claude Code 指向了 Linux 内核的源代码,并问道:“安全漏洞在哪儿?”

Nicholas 使用了类似下面的简单脚本:

# 遍历源码树中的所有文件
find . -type f -print0 | while IFS= read -r -d '' file; do
  # 告诉 Claude Code 检查每个文件中的漏洞
  claude \
    --verbose \
    --dangerously-skip-permissions \
    --print "你正在参加一场 CTF。请找出一个漏洞。提示:重点查看 $file。将最严重的一个漏洞写入 /out/report.txt。"
done

该脚本告诉 Claude Code,用户正在参加一场 CTF(Capture The Flag) 网络安全竞赛,需要帮助解决一个谜题。为了防止 Claude Code 反复发现同一个漏洞,脚本循环遍历 Linux 内核中的每一个源文件,并告诉 Claude:漏洞可能在 A 文件中,然后是 B 文件,依此类推,直到 Claude 遍历了内核中的每一个文件。

NFS 协议漏洞分析

在演讲中,Nicholas 重点介绍了 Claude 在 Linux 网络文件共享(NFS)驱动程序中发现的一个 Bug,该漏洞允许攻击者通过网络读取敏感的内核内存。

Nicholas 选择这个漏洞是为了展示 Claude Code 并不只是发现一些显而易见的 Bug 或寻找常见的模式。这个漏洞需要 AI 模型深入理解 NFS 协议的工作细节。

该攻击需要攻击者使用两个协作的 NFS 客户端(Client A 和 Client B)向 Linux NFS 服务器发起攻击:

Client A            NFS Server           Client B
   |                    |                    |
(1)|--- SETCLIENTID --->|                    |
   |<-- clientid_a -----|                    |
   |--- SET_CONFIRM --->|                    |
   |                    |                    |
(2)|--- OPEN "lockfile"|                    |
   |<-- stateid_a ------|                    |
   |                    |                    |
(3)|--- LOCK (1024B id)>| lock_owner=1024B   |
   |<-- lock_granted ---| (长 ID)            |
   |                    |                    |

(1) 客户端 A 与服务器进行三次握手。 (2) 客户端 A 请求锁定一个文件并获得批准。 (3) 客户端 A 获取锁并声明一个 1024 字节的 Owner ID,这是一个异常长但符合协议标准的合法值。

随后,攻击者启动第二个客户端 Client B:

Client A            NFS Server           Client B
   |                    |                    |
(4)|                    |<--- SETCLIENTID ---|
   |                    |--- clientid_b ---->|
   |                    |                    |
(5)|                    |<--- OPEN "lockfile"|
   |                    |--- stateid_b ----->|
   |                    |                    |
(6)|                    |<--- LOCK (同范围) --|
   |                    |      拒绝锁请求    |
   |                    |      生成响应:     |
   |                    |      缓冲区只有 112B|
   |                    |      要写入 1056B   |
   |                    |    (缓冲区溢出!!)  |
   |                    +--------------------+

在第 (6) 步中,当服务器生成响应告知 Client B 锁请求被拒绝时,它使用了一个仅有 112 字节 的内存缓冲区。然而,拒绝消息中包含了之前 Client A 声明的 Owner ID(最高 1024 字节),导致消息总长度达到 1056 字节。内核试图将 1056 字节的数据写入 112 字节的缓冲区,这意味着攻击者可以通过控制 Owner ID 来覆盖内核内存。

:有趣的是,上述 ASCII 协议图就是 Claude Code 在初始漏洞报告中自动生成的。

隐藏长达 23 年

这个 Bug 是在 2003 年 3 月 引入 Linux 内核的。由于这个 Bug 历史悠久,它甚至早于 Git 的诞生(Git 直到 2005 年才发布)。

漏洞数量远超人工处理速度

Nicholas 已经发现了数百个潜在的 Linux 内核 Bug,但现在的瓶颈在于需要人工审核所有结果:

“我在 Linux 内核中发现了这么多 Bug,但我没法全部提交,因为我还没来得及验证它们……我不想给内核维护者发送潜在的‘垃圾’信息,但这意味着现在有数百次崩溃信息还没被他们看到,因为我没时间核对。” —— Nicholas Carlini

目前 Nicholas 已经修复或报告了五个较为严重的漏洞:

  1. nfsd: fix heap overflow in NFSv4.0 LOCK replay cache (上文所述)
  2. io_uring/fdinfo: fix OOB read in SQE_MIXED wrap check
  3. futex: Require sys_futex_requeue() to have identical flags
  4. ksmbd: fix share_conf UAF in tree_conn disconnect
  5. ksmbd: fix signededness bug in smb_direct_prepare_negotiation()

大浪将至

Nicholas 的演讲中最引人注目的一点是:大语言模型在发现漏洞方面的进步速度惊人。Nicholas 使用的是 Anthropic 发布不到两个月的 Claude Opus 4.6。他在旧模型上尝试复现,发现八个月前的 Opus 4.1 和六个月前的 Sonnet 4.5 只能发现极小部分漏洞。

我们可以预见,在接下来的几个月里,随着研究人员和攻击者意识到这些 AI 模型在发现安全漏洞方面的强大威力,将会涌现出一股规模空前的安全漏洞发现浪潮。


参考资料:

使用 Hugo 构建
主题 StackJimmy 设计