近期 Xint 披露了一个影响几乎所有主流 Linux 发行版的严重内核漏洞,其编号为 CVE-2026-31431,代号 “Copy Fail”。
漏洞概述
Copy Fail 是 Linux 内核
"authencesn" 加密模块中的一个逻辑缺陷。它允许一个无特权的本地用户,通过一个仅732字节的 Python 脚本,向系统中任何可读文件的页面缓存中写入4个受控的字节。攻击者可以利用此漏洞篡改
"setuid" 程序(如
"/usr/bin/su"),从而轻松获得系统的 root(最高)权限。
关键特性
与历史上著名的“脏牛”(Dirty Cow)等漏洞相比,此漏洞有几个突出特点:
- 稳定可靠:是直线逻辑漏洞,无需利用竞态条件,不会导致系统崩溃。
- 通用性强:同一攻击脚本可在 Ubuntu、Amazon Linux、RHEL、SUSE 等所有测试过的发行版和架构上直接运行,无需修改。
- 隐蔽性高:漏洞只污染内存中的“页面缓存”,而不修改磁盘上的原始文件。因此,依赖磁盘校验和的文件完整性检查工具无法检测到攻击。
- 影响面广:由于页面缓存在系统内共享,该漏洞不仅能用于本地提权,还是一个容器逃逸原语,可以攻破 Kubernetes 节点。
技术原理(简化)
漏洞源于三个独立功能的危险交集:
- "
authencesn" 算法的“坏习惯”:该算法在处理IPsec扩展序列号时,会“借用”调用者提供的目的缓冲区末尾之外的一点空间作为临时工作区,写入4个字节。正常情况下,这没有问题。 - "
AF_ALG" 接口的“内存共享”:这是一个允许用户空间程序使用内核加密功能的接口。当结合 "splice()" 系统调用时,用户可以将文件的页面缓存(内存中的文件副本)直接作为数据源提供给加密操作。 - 2017年的“优化”:一个内核优化使
"
AF_ALG" 的某些操作采用了“就地”处理模式。这导致来自 "splice()" 的页面缓存页面被意外地链接到了可写的目标缓冲区链中。
组合攻击
攻击者通过
"AF_ALG" 接口,使用
"splice()" 将目标文件(如
"/usr/bin/su")的页面缓存提供给
"authencesn" 算法进行解密操作。此时,
"authencesn" 那个写入工作区的“坏习惯”就变成了向文件页面缓存的指定偏移处写入4个攻击者控制的字节。尽管整个解密操作最终会失败报错,但这4个字节的污染已经永久留在内存中了。当系统后续执行这个被污染的文件时,注入的代码就会以 root 权限运行。
影响范围
- 影响版本:自 2017 年含有缺陷优化的内核发布以来,几乎所有 Linux 发行版均受影响。
- 已验证系统:在 Ubuntu 24.04, Amazon Linux 2023, RHEL 10.1 和 SUSE 16 上利用成功。
修复方案
内核补丁的核心修复非常简单:回退了2017年那个导致问题的“就地”操作优化。修复后的代码确保来自
"splice()" 的页面缓存页面只出现在只读的源缓冲区,而不会进入可写的目的缓冲区,从而从根本上切断了利用路径。
发现过程
此漏洞由 Theori 研究员 Taeyang Lee 在人工研究的基础上,借助名为 Xint Code 的 AI 辅助安全研究工具进行规模化代码分析后发现,是“人机协同”安全研究的成果。
时间线
- 2026-03-23:漏洞报告给内核安全团队。
- 2026-04-01:补丁提交到主线内核。
- 2026-04-22:分配 CVE 编号。
- 2026-04-29:公开披露(本文)。
总结
Copy Fail 是一个由于内核子系统间微妙交互而产生的严重漏洞,其简洁性、通用性和隐蔽性使其威胁极大。幸运的是,其修复方案已进入主线内核,各 Linux 发行版将通过常规内核更新推送补丁。用户应及时更新系统以消除风险。