Linux 内核零日漏洞“复制失败”导致攻击者在主流发行版中均可获得 root 权限.
安全研究人员披露了 Linux 内核中一个名为“Copy Fail”(CVE-2026-31431)的严重零日漏洞,该漏洞允许非特权本地用户获得 root 访问权限。
攻击者可以使用一个仅有 732 字节的 Python 脚本,利用 2017 年以来发布的主要 Linux 发行版中存在的逻辑缺陷。
Copy Fail 是 Linux 内核加密子系统中发现的一种本地权限提升 (LPE) 漏洞。与 Dirty Cow 等早期臭名昭著的漏洞不同,后者依赖于竞争条件,并且经常导致系统崩溃,Copy Fail 是一种确定性的逻辑缺陷。
它不需要重试或特定的时间窗口,因此具有很高的可靠性,并且可以在不同的架构之间移植。
该漏洞利用非常隐蔽,因为它改变的是文件的内存页面缓存,而不是物理磁盘上的文件。
内核的回写机制永远不会将损坏的页面标记为脏页,这意味着检查磁盘校验和的标准文件完整性监控工具将无法检测到修改。
漏洞利用原理
复制失败的根本原因在于三个内核特性的组合:AF_ALG 套接字类型、splice 系统调用和身份验证加密模板。
AF_ALG 接口将内核的加密功能暴露给非特权用户。当攻击者使用 splice 命令将文件数据传输到 AF_ALG 套接字时,系统会直接引用内核缓存的该文件页面。
2017 年的内核优化使得加密操作可以就地进行,这意味着输入和输出都使用相同的内存空间。
身份验证算法无意中将此输出边界用作临时草稿纸,写入了超出预期限制的 4 个字节。
这使得攻击者能够对任何可读文件(例如用于用户切换的 setuid-root 二进制文件)的页面缓存执行受控的四字节覆盖。通过将 shellcode 注入到此缓存的可执行文件中,攻击者可以立即获得 root 权限。
此漏洞影响主流 Linux 发行版,包括 Ubuntu、Amazon Linux、Red Hat Enterprise Linux (RHEL) 和 SUSE。由于页面缓存是系统共享的,因此该漏洞不仅限于单台机器上的本地权限提升。
它还可以作为容器逃逸原语,这意味着攻击者有可能通过跨越容器边界来攻破整个 Kubernetes 节点。
该漏洞是在内核版本 4.14 中引入的,并且近十年来一直未被发现,直到Theori 和 Xint Code 的研究人员通过人工智能辅助审查才将其发现。
Linux 内核开发人员已发布补丁,以解决 6.18.22、6.19.12 和 7.0 版本中的 CVE-2026-31431 漏洞。
此修复方案只是移除了存在缺陷的原地操作机制,恢复到更安全的异地处理方式,其中源内存和目标内存映射是分开的。系统管理员应立即更新内核。
如果无法立即进行修补,用户可以通过阻止易受攻击的模块来采取临时缓解措施。
这是通过在 modprobe 配置目录中添加一个 algif_aead 安装规则,使其路由到 /bin/false,然后从运行的系统中移除活动的 algif_aead 模块来实现的。