CVE-2026-31431 — "Copy Fail" Linux 内核本地提权漏洞
AF_ALG 密码学套接字接口中的逻辑漏洞,一个 732 字节的 Python 脚本即可无条件获取 root 权限。
漏洞概述
| 项目 | 内容 |
|---|---|
| 漏洞名称 | Copy Fail(也称 CopyFail) |
| CVE 编号 | CVE-2026-31431 |
| 漏洞类型 | 页缓存写入(Page-Cache Write)/ 越界写入 |
| CWE | CWE-787 — Out-of-bounds Write |
| CVSS | 7.8(High) |
| 发现者 | Theori 团队(使用 AI 静态分析工具 Xint Code 发现) |
| 公开时间 | 2026 年 4 月 29 日(披露)/ 5 月 8 日(PoC 广泛传播) |
| CISA KEV | ✅ 已收录(2026 年 5 月 1 日加入已知被利用漏洞目录) |
| 在野利用 | ✅ 确认 |
影响范围
| 属性 | 内容 |
|---|---|
| 影响组件 | Linux 内核 algif_aead 模块(AF_ALG AEAD 套接字接口) |
| 内核引入 | 2017 年(commit 72548b093ee3) |
| 受影响版本 | 内核 4.17+,所有使用该版本范围的主流发行版 |
| 不受影响 | 已合入修复的内核(≥ commit a664bf3d603d) |
| 利用复杂度 | 低 — 确定性利用,无竞态条件,无需内核偏移 |
各发行版修复版本
| 发行版 | 修复版本 |
|---|---|
| AlmaLinux 8 | kernel-4.18.0-553.121.1.el8_10+ |
| AlmaLinux 9 | kernel-5.14.0-611.49.2.el9_7+ |
| AlmaLinux 10 | kernel-6.12.0-124.52.2.el10_1+ |
| Rocky Linux 8.10 | kernel-4.18.0-553.123.1.el8_10+ |
| Rocky Linux 9.7 | kernel-5.14.0-611.54.1.el9_7+ |
| Rocky Linux 10.1 | kernel-6.12.0-124.55.1.el10_1+ |
| Proxmox VE | 6.14.11-4-pve+ |
| Linux 主线 | 7.0-rc7+ / commit a664bf3d603d |
漏洞原理
根因
algif_aead 模块的 authencesn 模板中的一个逻辑缺陷,结合 AF_ALG 和 splice() 系统调用,允许无特权用户向任何可读文件的页缓存中写入 4 个受控字节。
利用链
- 攻击者通过
AF_ALG套接字创建一个 AEAD 密码操作上下文 - 使用
splice()将目标文件(如/usr/bin/su)的页缓存页导入管道 algif_aead的原地加密操作直接覆盖共享页缓存,未进行写时复制- 4 字节的越界写入足以修改 SUID 二进制文件的校验逻辑
- 执行被篡改的二进制文件 → root shell
关键特性
| 特性 | 说明 |
|---|---|
| 可靠性 | 确定性 — 100% 成功率,无需竞态条件 |
| 可移植性 | 同一 PoC 在 Ubuntu、Amazon Linux、RHEL、SUSE 上无修改运行 |
| 隐匿性 | 仅修改页缓存,磁盘文件不变,文件完整性工具无法检测 |
| 逃逸能力 | 可跨容器边界利用(页缓存是主机级别的) |
| 利用大小 | PoC 仅为 732 字节的 Python 脚本 |
影响面
由于 algif_aead 通常是编译为模块(=m)或内置(=y),几乎所有 Linux 发行版都受影响。
缓解措施
方案一:升级内核(强烈推荐)
# Ubuntu/Debian
sudo apt update && sudo apt dist-upgrade
sudo reboot
# RHEL/CentOS/AlmaLinux/Rocky
sudo dnf update kernel
sudo reboot
# Fedora
sudo dnf upgrade --refresh kernel
sudo reboot
方案二:临时缓解 — 禁用 algif_aead 模块
当 algif_aead 为可加载模块(=m)时:
# Ubuntu/Debian 等
echo "install algif_aead /bin/false" | sudo tee /etc/modprobe.d/disable-algif-aead.conf
sudo rmmod algif_aead 2>/dev/null || true
当 algif_aead 为内置(=y,RHEL 系)时:
# RHEL/CentOS 等 — 通过内核命令行黑名单
sudo grubby --update-kernel=ALL --args="initcall_blacklist=algif_aead_init"
sudo reboot
方案三:Seccomp 阻止 AF_ALG
# 在容器或应用中通过 seccomp 阻止 AF_ALG 套接字(协议 38)
方案四:限制用户命名空间
sudo sysctl -w kernel.unprivileged_userns_clone=0
影响说明
禁用 algif_aead 不会影响以下常用功能:
- ✅
dm-crypt/ LUKS 磁盘加密 - ✅ kTLS
- ✅ IPsec / XFRM
- ✅ SSH
- ✅ OpenSSL / GnuTLS / NSS
- ⚠️ 仅影响直接使用 AF_ALG 套接字进行 AEAD 加密的应用程序(极为罕见)
检测方法
# 检查 algif_aead 模块是否已加载
lsmod | grep algif_aead
# 检查内核版本是否在受影响范围
uname -r
# 检查日志中是否有异常利用痕迹
dmesg | grep -i "algif_aead\|AF_ALG" | tail -20
时间线
| 日期 | 事件 |
|---|---|
| 2026-04-01 | 上游修复提交(a664bf3d603d)合入主线 |
| 2026-04-29 | 安全研究团队公开披露漏洞细节 |
| 2026-05-01 | CISA 将 CVE-2026-31431 加入已知被利用漏洞目录(KEV) |
| 2026-05-08 | PoC 广泛传播 |
| 2026-05-11 | Rocky Linux 发布修复内核 |
参考资料
💬 评论