复制失败与脏碎片:Linux 页面缓存漏洞影响所有主流发行版

在一周内,两处 Linux 内核本地权限提升漏洞相继被公开披露。其中,由安全公司 Theori 于 2026 年 4 月 29 日披露的“复制失败(Copy Fail)”(CVE-2026-31431), 以及由研究员 Hyunwoo Kim 于 2026 年 5 月 7 日披露的“脏碎片(Dirty Frag)”( CVE-2026-43284 和 CVE-2026-43500 ),均可以使无特权的本地用户在受影响的发行版上获得 root 权限。这两个漏洞都会影响页面缓存,而且与 2022 年的“脏管道(Dirty Pipe)”漏洞属于同一漏洞大类。

复制失败漏洞是由 Theori 团队利用其基于 AI 的安全工具 Xint Code 发现的。该团队表示,该漏洞是对 Linux 的 crypto/ 子系统进行扫描约一小时后发现的,整个过程仅需要一个操作符提示,而且不需要自定义测试框架。该漏洞本身源于内核模块 algif_aead 的逻辑缺陷,这个模块是在 2017 年的一次就地优化中引入的。一个没有任何特权的进程可以将数据插入 AF_ALG 套接字,并对不属于它的文件页面缓存执行小规模地写入操作。由于页面缓存在主机上共享,相同的写入操作可能影响属于 setuid 二进制文件的文件。Theori 发布了一个独立的 Python 概念验证程序( 732 字节)。它只需要 Python 标准库,即可在未经修改的情况下攻破 Ubuntu 24.04 LTS、Amazon Linux 2023 、RHEL 10.1 和 SUSE 16 系统的 root 权限。

“复制失败仅需一个无特权的本地用户账户——无需网络访问权限、内核调试功能或预装的加密组件。内核加密 API(AF_ALG)在几乎所有主流发行版的默认配置中均处于启用状态,因此,从 2017 年起至补丁发布前的整个时间段内,该漏洞都处于可利用状态。”

——Theori,copy.fail

披露时间线显示,Theori 于 2026 年 3 月 23 日向 Linux 内核安全团队报告了该问题。该团队次日便进行了初步确认,并于 3 月 25 日前提出了补丁并完成审核,4 月 1 日完成主线提交,4 月 22 日分配了 CVE-2026-31431 编号。该漏洞于 2026 年 4 月 29 日向公众披露。此后数日,各大发行版陆续发布了修复补丁。Bugcrowd 安全研究员 Casey Ellis 在 Bugcrowd 博客中写道,Theori“并非为了追逐潮流而转向 AI 漏洞利用开发。他们之所以转型,是因为当前的数学模型更倾向于这一方向。”

在复制失败漏洞披露一周后,Hyunwoo Kim 发布了脏碎片漏洞,并将其描述为同一类漏洞的延伸。脏碎片串联了两个独立的漏洞:CVE-2026-43284(影响 esp4 和 esp6 模块的 xfrm-ESP 页面缓存写入漏洞)以及 CVE-2026-43500(影响 rxrpc 的 RxRPC 页面缓存写入漏洞)。这两者结合所覆盖的配置范围比单独任何一个漏洞都要广泛,这源于它们能在不同发行版的默认配置下相互弥补彼此的不足。

“xfrm-ESP Page-Cache Write 提供了一种强大的任意 4 字节 STORE 原语(类似于复制失败),并且包含在大多数发行版中,但它需要创建命名空间的权限。Ubuntu 有时会通过 AppArmor 策略阻止没有特权的用户创建命名空间。在这种环境下, xfrm-ESP Page-Cache Write 无法被触发。虽然 RxRPC Page-Cache Write 不需创建命名空间的权限,但 rxrpc.ko 模块本身并未包含在大多数发行版中。不过,在 Ubuntu 上,rxrpc.ko 模块默认会被加载。"

—— Hyunwoo Kim,dirtyfrag GitHub 存储库

Kim 指出,这种链式攻击使这两个变体能够相互弥补对方的盲点,从而在所有经过测试的主要发行版上都能获取 root 权限。与许多内核漏洞利用不同,脏碎片并不依赖于竞争条件。Kim 将其描述为一个确定性的逻辑漏洞:内核在尝试失败时不会发生恐慌,而且成功率很高。CVE-2026-43284 影响了 2017 年 1 月至 2026 年 5 月补丁发布前的内核版本。CVE-2026-43500 覆盖的范围则比较狭窄,从 2023 年 6 月(受影响的 RxRPC 代码路径引入之时)起,至 2026 年 5 月 10 日止。

复制失败与脏碎片:Linux 页面缓存漏洞影响所有主流发行版

脏碎片漏洞的披露过程颇为特殊。Kim 在 README 文件中指出,在 2026 年 5 月 7 日首次发布时,由于外部因素导致信息保密被打破,而且当时尚未发布补丁或分配 CVE 编号。当时,linux-distros 邮件列表的维护者们便建议 Kim 立即发布该文档,而非继续等待。发布后几天内,相关补丁和 CVE 标识符相继发布。AlmaLinux 在漏洞披露当天就发布了详细说明,并很快发布了包含补丁的测试内核,生产库的更新则于 2026 年 5 月 8 日上线。

自 Trusty Tahr(14.04 LTS)以来的所有 Ubuntu 版本均受到了影响。Canonical 发布了一份缓解指南,涵盖了这两个脏碎片漏洞(CVE)。根据 kernel.org 的 CNA 评估,该指南将 CVE-2026-43284 的 CVSS 3.1 评分定为 8.8 (高危),并根据 Canonical 自身的评估将 CVE-2026-43500 的 CVSS 3.1 评分定为 7.8(高危)。同时,该指南还指出, CVE List 尚未为其分配评分。Canonical 的指南详细说明了如何通过 /etc/modprobe.d 阻止三个受影响的模块(esp4、esp6、rxrpc),包括重新生成 initramfs、卸载模块以及确认它们已经不再出现在 /proc/modules 中。使用 IPsec(StrongSwan) 或 AFS(RxRPC)的组织在应用此缓解措施前,应评估回归风险,因为该措施会禁用相关内核模块。

这两个漏洞都与脏管道(CVE-2022-0847)属于同一个领域,后者是 2022 年的一个 Linux LPE 漏洞,当时相关的安全报道曾对此进行过讨论。脏管道允许无特权用户将数据插入只读文件的页面缓存中。虽然复制失败和脏碎片使用相同的页面缓存写入原语,但是通过不同的内核子系统进入该原语:复制失败通过加密 API 进入,而脏碎片则通过 IPsec 和 RxRPC 进入。这些漏洞能在经过严格审查的代码中存活多年,很可能是因为在审查 crypto/ 子系统、ESP 快速路径以及 RxRPC 接收路径时,主要关注的是加密正确性属性,例如 IND-CPA 安全性和抗侧信道攻击能力。而内存来源以及内核是否应通过该内存进行写入则属于另一类问题,标准审查流程并未针对此类问题进行检测。

Sysdig 威胁研究团队在 LinkedIn 上发文称,“脏碎片漏洞表明,页面缓存写入漏洞正成为一种反复出现的攻击类型”,并且指出,鉴于已经有公开利用该漏洞的代码,防御方应假设,在未打补丁的 Linux 系统上,任何本地立足点都可能迅速演变为 root 权限。Sysdig 安全研究员 Crystal Morin 于 5 月 7 日(即漏洞披露当天)发布了一条针对脏碎片的 Falco 检测规则。

对于这两项漏洞来说,容器隔离机制是一个复杂的因素。来自 Bugcrowd 的 Ellis 指出了复制失败漏洞暴露的三个攻击面:运行在共享内核上的多租户 Kubernetes 集群、执行不可信拉取请求代码的自托管 CI/CD 运行器,以及在容器内运行模型生成 shell 命令的 AI 代理代码执行沙箱。由于页面缓存是在整个主机上共享的,所以一个容器的写入操作会影响其他所有租户。那些不提供独立内核的隔离机制(如 Linux 命名空间)无法阻止这两种漏洞利用方式。Ellis 指出,“共享内核的多租户架构正是复制失败所反映出的结构性风险”,并且建议,对于执行不可信代码的工作负载,应采用 Firecracker 等微虚拟机(microVM)运行时,或 gVisor 等用户空间内核。

复制失败漏洞的发现之所以引人注目,不仅在于漏洞本身,还因为其中涉及的 AI 技术。InfoQ 在 2026 年 4 月的一篇报道中曾经提到,Anthropic 研究员 Nicholas Carlini 利用 Claude Code 发现了五个 Linux 内核漏洞,其中包括 NFS 驱动程序中一个存在达 23 年之久、可被远程利用的堆缓冲区溢出漏洞。Carlini 仅使用了一个简单的 bash 循环遍历内核树中的每个源文件,并没有借助任何定制工具。Linux 内核维护者告诉 Carlini ,AI 生成的漏洞报告已经从“噪音”转变为“有效发现”,安全邮件列表如今每天会收到 5 到 10 份有效的报告。Theori 在发现复制失败漏洞的工作中采用了类似的方法,但更为精准,他们将扫描范围限定在 crypto/ 子系统内。Ellis 的文章将 Xint Code 的成果描述为一个数据点,这表明发现内核级逻辑缺陷的成本可能已经大幅降低。他还指出,组织应预见新报告的数量将会增加。

对于目前正在采取应对措施的组织而言,针对复制失败的主要措施是更新至包含主线提交 a664bf3d603d 的内核包。该提交撤销了 2017 年的 algif_aead 就地优化。在该补丁发布之前,Theori 提出的缓解方案是将 algif_aead 模块加入黑名单,并结合 seccomp 配置文件,阻止不受信任的进程创建 AF_ALG 套接字。针对脏碎片漏洞,缓解措施是将 esp4、esp6 和 rxrpc 加入黑名单并清空页面缓存,并随后在发行版发布更新时应用内核补丁。Kim 的 README 文件指出,复制失败公布的将 algif_aead 加入黑名单的缓解措施无法防范脏碎片,因为 xfrm-ESP 原语与复制失败共享相同的接收端,但并不依赖于 algif_aead 的存在。