潜伏10年!Linux Copy Fail漏洞:732字节脚本root提权
这是我掘金平台开篇,我先把这两天在安全圈已经炸锅的漏洞发布一下,后续我将持续输出安全方面的知识学习过程和实战技巧,欢迎各位大佬关注!
潜伏10年!Linux爆出"Copy Fail"漏洞:732字节脚本root提权。更有阴谋论者说这个是XX国预埋的漏洞,被AI检查出来了!!
2026年4月29日,安全研究团队Theori披露了一个震撼整个Linux社区的高危漏洞——CVE-2026-31431,代号 "Copy Fail" 。
这不是一个普通的漏洞。
它潜伏在Linux内核中近10年,影响2017年以来所有主流发行版,而利用它只需要一个732字节的Python脚本,无需竞态条件,无需版本适配,一击必杀。
一、漏洞概述:核弹级别的简单
基本信息:
| CVE编号 | CVE-2026-31431 |
|---|---|
| 漏洞类型 | 本地权限提升(LPE)/ 容器逃逸 |
| 严重程度 | CVSS 7.8(High,CNA初步评估) |
| 影响组件 | Linux内核 authencesn加密模块 |
| 发现者 | Theori公司,Taeyang Lee |
| 披露日期 | 2026年4月29日 |
| POC状态 | 已公开 |
一句话概括: 任何Linux系统的普通用户,只需要运行一个732字节的Python脚本,就能直接拿到root权限。
影响范围:
- Ubuntu 24.04 LTS
- Amazon Linux 2023
- RHEL 10.1
- SUSE 16 及以上
- Debian、Arch等所有主流发行版
- 所有使用默认内核配置(AF_ALG默认启用)的Linux系统
更可怕的是——这个漏洞可以穿透容器边界。受感染的容器可以篡改宿主机上的文件,对Kubernetes节点和多租户云环境构成严重威胁。
二、技术原理:内核把不该写的地址写入了
2.1 漏洞的"三合一"
这个漏洞的形成,需要三个看起来各自合理的内核改动在时间线上交叉:
| 时间 | 事件 | 当时看起来 |
|---|---|---|
| 2011年 | authencesn加入内核 | 支持IPsec 64位扩展序列号 |
| 2015年 | AF_ALG新增AEAD支持,splice()可传文件缓存页 | 把文件缓存送进加密操作 |
| 2017年 | 关键优化:AEAD改为in-place操作 | 性能优化,无问题 |
2.2 攻击链路
整个攻击链路可以浓缩成一句话:内核把文件缓存页放进了本不该有写权限的散列表中,然后一个算法不讲武德地往里写了4个字节。
具体步骤:
Step 1:用户通过AF_ALG套接字调用内核加密功能
Linux内核允许任何普通用户使用AF_ALG接口调用内核加密功能,无需任何特殊权限。
Step 2:通过splice()把目标文件的缓存页传入加密操作
攻击者使用splice()系统调用,将目标文件(比如/usr/bin/su)的缓存页传入加密操作。
Step 3:内核优化路径将这些缓存页链入可写的散列表
2017年的in-place优化,将这些缓存页直接链入了可写的散列表中。
Step 4:authencesn解密时写入4字节
authencesn算法在解密过程中,把攻击者控制的4个字节写入了缓存页——恰好落在setuid程序的内存副本中。
关键代码示意(来自内核源码):
if (req->src == req->dst) { /* in-place操作:往散列表里写4字节 */ dst[assoclen + cryptlen] = auth_tag; }
结果:内存中的/usr/bin/su被静默篡改,磁盘上的文件纹丝不动。
任何用户执行这个被注入shellcode的su程序,将直接以UID 0(root) 身份运行——root shell手到擒来。
三、横向对比:它比Dirty Cow更可怕
历史上,Linux本地提权漏洞不少,但每一个都有它的"脾气":
| 特性 | Dirty Cow (2016) | Dirty Pipe (2022) | Copy Fail (2026) |
|---|---|---|---|
| 利用难度 | 需赢竞态,可能崩溃 | 需精操作管道缓冲区 | 无需竞态,直通执行 |
| 版本适配 | 需针对不同内核调整 | 版本相关 | 一套脚本通杀全系 |
| 隐蔽性 | 会修改磁盘文件 | 会修改磁盘文件 | 只改内存,磁盘不动 |
| 容器穿透 | 无 | 无 | 可穿透容器边界 |
| 成功率 | 不稳定 | 相对稳定 | 极高 |
Copy Fail的可怕之处:
- 利用门槛低到离谱:不需要堆喷、不需要竞态条件、不需要内核版本匹配
- 通杀所有版本:同一个Python脚本,在Ubuntu 24.04、Amazon Linux 2023、RHEL 10.1上测试,全部一击必杀
- 检测不出来:只改内存缓存,磁盘上的文件MD5/SHA1完全不变,现有完整性监控工具全部失效
- 容器穿透:Linux页缓存在容器边界间共享,容器内提权后可以逃逸到宿主机
四、漏洞潜伏9年的原因
一个这么简单的逻辑bug,为什么能潜伏这么久?
答案:每个改动单独审查都"没问题"。
- 2011年加入authencesn:功能正常
- 2015年AF_ALG支持splice():加密接口扩展
- 2017年in-place优化:性能提升这三件事,分开看都是合理的内核改动。但它们的组合,就是一颗定时炸弹。
发现过程中的AI助力:
研究员Taeyang Lee在识别出攻击面后,利用AI辅助审计工具Xint Code扫描crypto/子系统,仅耗时约1小时便定位到这一最高严重性漏洞。
五、实战验证:732字节脚本
研究人员放出的POC脚本只有732字节,在四个主流发行版上测试:
- Ubuntu 24.04 LTS
- Amazon Linux 2023
- RHEL 10.1
- SUSE 16
测试内核版本包括
Linux 6.12、6.17和6.18。
结果:每次都成功获取root shell。
POC链接:不公开推荐,有需要的私信给我获取
六、修复方案
6.1 官方补丁(推荐)
内核社区已发布修复补丁,直接回退了2017年的in-place优化,将AF_ALG的AEAD操作改回out-of-place模式。
修复版本:
- Linux 6.18.22(主线)
- Linux 6.19.12
- Linux 7.0
升级命令:
# Ubuntu/Debian sudo apt update && sudo apt upgrade linux-image-$(uname -r) # RHEL/CentOS sudo dnf update kernel # 重启生效 sudo reboot
6.2 临时缓解措施
如果无法立即更新内核,可通过禁用algif_aead内核模块来缓解:
# 创建黑名单配置 echo "install algif_aead /bin/false" | sudo tee /etc/modprobe.d/disable-algif-aead.conf # 立即卸载模块(不影响IPsec正常功能) sudo rmmod algif_aead 2>/dev/null || true
6.3 容器环境
在容器/沙箱环境中,可通过seccomp策略阻止AF_ALG套接字创建:
# 使用seccomp禁止AF_ALG docker run --security-opt seccomp=/path/to/af_alg_blocker.json ...
七、紧急建议
立即行动:
- 检查你的Linux内核版本:
uname -r或cat /proc/version - 确认是否在受影响范围内:2017年至补丁发布前构建的内核
- 优先修复云服务器和容器宿主机:这些是攻击者最可能突破的目标
- 开启内核模块加载审计:监控是否有人尝试加载algif_aead
- 检查命令:
# 检查当前内核版本 uname -r # 检查algif_aead模块状态 lsmod | grep algif_aead # 如果模块已加载且无法立即更新,执行缓解措施 sudo rmmod algif_aead
结语
Copy Fail的披露,再次提醒我们:最危险的漏洞,往往不是那些复杂的逻辑漏洞,而是多个"合理"改动叠加后产生的意外组合。
这个漏洞的利用门槛低到令人发指——732字节Python脚本,无需root权限,无需版本适配,一击必杀。
建议所有Linux用户立即检查并修复。
原创于微信公众号:逆熵寻生