732 字节就能拿 root:Linux 内核 "Copy Fail" 漏洞深度解析
🐛 一个 732 字节的 Python 脚本,只用标准库,就能在任意 Linux 发行版上从普通用户直接拿到 root shell 2026 年 4 月 29 日,Theori 安全研究团队公开了一个潜伏近九年的 Linux 内核本地提权(LPE)漏洞——CVE-2026-31431,代号 Copy Fail。 一个 732 字节的 Python 脚本,只用标准库,不需要竞态条件、不需要内核版本偏移、不需要编译二进制载荷——就能在任何主流 Linux 发行版上从普通用户直接拿到 root shell。 01|从 Dirty Cow 到 Copy Fail:一类危险的漏洞家族如果你记得 2016 年的 Dirty Cow(CVE-2016-5195)和 2022 年的 Dirty Pipe(CVE-2022-0847),那 Copy Fail 的漏洞类型你应该不陌生。 这三者的共同点:利用内核的内存管理缺陷,无权限用户直接修改页面缓存(page cache)中的敏感数据。 · Dirty Cow:利用 copy-on-write 的竞态条件· Dirty Pipe:利用 pipe 缓冲区与页面缓存的意外共享· Copy Fail:利用内核加密 API 的在位(in-place)操作逻辑缺陷 Copy Fail 不需要竞态条件,不需要特定内核版本适配。Theori 的公告里写得很直接:"no race-winning, no kernel version offsets, no recompilation, and no compiled payloads."
提交 72548b093ee3 对 algif_aead.c 做了一个在位操作优化。AEAD(Authenticated Encryption with Associated Data)是内核加密子系统中的认证加密模板,AF_ALG 是内核暴露给用户空间的加密套接字接口。 这个优化的意图很合理:减少内存拷贝,提升加密性能。问题在于:当用户通过 splice() 系统调用把文件内容送入 AF_ALG socket 时,AEAD 输入的 scatterlist 会持有页面缓存的直接引用——不是副本,是原始页面。 algif_aead.c 中设置 req->src = req->dst,让源和目标指向同一个 scatterlist。这意味着页面缓存页面被放进了可写的目标 scatterlist 中。 然后 authencesn 算法(IPsec 的 64 位扩展序列号支持)在处理过程中,会在声明输出边界之外写入 4 字节——正好落在链式连接的页面缓存页面上。 2011 年、2015 年、2017 年,三处独立的代码变更各自合理,但它们的交集创造了一个十年无人发现的利用窗口。 1. 对一个可读文件(比如 /usr/bin/su 这样的 setuid 二进制)触发这 4 字节的受控写入2. 当该文件被执行时,被篡改的代码以 root 权限运行因为写入发生在页面缓存中,内核永远不会将这些页面标记为脏页——磁盘上的原始文件完好无损。这意味着基于校验和的文件完整性检查工具完全无法发现这次篡改。 Theori 和 Xint Code Research 团队联手,把这个逻辑缺陷武器化成了一个完整的利用链。最终的 PoC 是一份 732 字节的 Python 脚本。 影响范围:所有从内核 4.14(2017 年)开始的 Linux 发行版。九年的窗口期,覆盖了绝大多数在线服务器。 根据 Xint Code 的披露,这个漏洞同样可以作为 Kubernetes 容器逃逸原语使用。因为页面缓存在主机的所有进程之间共享——包括跨越容器边界。一个被攻陷的容器可以篡改其他容器和宿主机内核可见的 setuid 二进制文件。 在云原生架构成为主流的今天,这意味着即使攻击者只拿到了一个低权限容器的访问权,也可能通过 Copy Fail 突破容器边界,控制整个宿主节点。 Theori 团队使用了他们自研的 Xint Code 系统——一个 AI 驱动的代码安全分析平台。根据 Bugcrowd 首席 AI 和科学官 David Brumley 的评论: "Xint Code 在约一小时的扫描时间内,只用了一个操作员提示词,零手工编排,就发现了这个漏洞。" Theori 不是普通的创业公司。作为 DEF CON CTF 的九冠王(与 CMU 的 PPP 和 UBC 的 Maple Bacon 并称 MMM 三巨头),并且是 DARPA AI 网络挑战赛的决赛选手,他们在攻防安全领域的实力是顶级的。 当 Theori 说"一个提示词、一小时",这大概率就是字面意思。这个发现意义深远:AI 正在从辅助分析工具进化为主力漏洞发现引擎。传统上,一个像 Copy Fail 这样的通用 Linux 零日漏洞,在黑市上的报价可能是数十万到数百万美元(Zerodium 的公开报价曾高达 50 万美元,继任者 Crowdfense 的报价区间为 1 万到 700 万美元)。而现在,AI 系统在一小时内就能从源码中把它找出来。 这对防守方也是好消息:同样的一小时扫描,可以变成持续的内核安全审计。
Linux 内核安全团队在 2026 年 3 月 23 日收到报告,4 月 1 日完成了修复(commit a664bf3d603d),4 月 22 日分配 CVE,4 月 29 日公开披露。 修复方案很直接:将 algif_aead 恢复为异地(out-of-place)AEAD 操作,永久分离 TX 和 RX scatterlist,切断暴露页面缓存的 sg_chain() 链接。 如果你的系统还不能立即更新内核,可以用以下命令临时缓解:echo "install algif_aead /bin/false" > /etc/modprobe.d/disable-algif-aead.confrmmod algif_aead 2>/dev/null安全建议:立即对所有 Linux 系统执行内核更新。PoC 已经公开,自动化利用只是时间问题。 Copy Fail 是一个教科书式的内核漏洞案例:· 根源:一次看似无害的性能优化,在多个代码变更的交集下创造了安全缺口· 影响:九年窗口期,覆盖所有主流发行版,影响范围极广· 利用:732 字节、无需竞态条件、无需偏移量、无需编译——门槛低到令人不安第一,内核代码中的"优化"需要比想象中更多的安全审查。2011 年、2015 年、2017 年的三处独立变更,各自都合理,合在一起就是一场灾难。 第二,AI 辅助安全分析的时代已经到来。对于一个成熟的攻防团队来说,一小时扫描一个子系统的效率,正在改变漏洞发现的成本曲线。 对于运维人员和开发者:今天就去检查你的内核版本,确认已包含补丁或采取了缓解措施。 · Xint Code Research: Copy Fail - 732 Bytes to Root· Bugcrowd: What we know about Copy Fail· oss-sec: CVE-2026-31431 disclosure· Linux kernel commit a664bf3d603d (fix)· Cyberpress: Linux Kernel 0-Day "Copy Fail"· GitHub PoC C port: copy-fail-c