██████╗ ██████╗ ██████╗ ██╗ ██╗ ███████╗ █████╗ ██╗██╗
██╔════╝██╔═══██╗██╔══██╗╚██╗ ██╔╝ ██╔════╝██╔══██╗██║██║
██║ ██║ ██║██████╔╝ ╚████╔╝ █████╗ ███████║██║██║
██║ ██║ ██║██╔═══╝ ╚██╔╝ ██╔══╝ ██╔══██║██║██║
╚██████╗╚██████╔╝██║ ██║ ██║ ██║ ██║██║███████╗
╚═════╝ ╚═════╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝╚═╝╚══════╝
algif_aead 页缓存破坏)⚠️ 仅限授权使用 — 本仓库严格供渗透测试人员、安全研究人员及防御者在合法授权下使用。滥用属刑事犯罪。
| # | 章节 | 描述 |
|---|---|---|
| 1 | 什么是Copy Fail? | 漏洞概述 |
| 2 | 技术深度剖析 | 根本原因分析 |
| 3 | 受影响系统 | 发行版与内核矩阵 |
| 4 | 仓库结构 | 文件布局 |
| 5 | 实验环境搭建 | 安全复现 |
| 6 | 漏洞利用使用 | 渗透测试工作流程 |
| 7 | 检测 | YARA、Sigma、脚本 |
| 8 | 缓解措施 | 补丁与加固 |
| 9 | 渗透测试报告 | 报告模板 |
| 10 | 法律与道德 | 免责声明 |
| 11 | 参考资料 | CVE、公告、博客 |
Copy Fail 是一个本地权限提升(LPE) 漏洞,于2026年4月29日披露,影响自2017年以来几乎所有主流Linux发行版。
非特权用户 ──► AF_ALG + splice() ──► 4字节页缓存写入 ──► ROOT
| 属性 | 详情 |
|---|---|
| CVE ID | CVE-2026-31431 |
| 别名 | Copy Fail |
| CVSS v3.1 | 7.8(高危) |
| 攻击向量 | 本地 |
| 所需权限 | 低(任意非特权用户) |
| 用户交互 | 无 |
| 发现者 | Xint Code (Theori) |
| 披露时间 | 2026年4月29日 |
| 漏洞利用大小 | 732字节(Python PoC) |
| 补丁状态 | ✅ 可用 — 回退提交 a664bf3d603d |
该漏洞源于2017年引入的有缺陷的就地优化(提交 72548b093ee3),位于Linux内核用户空间加密API(AF_ALG)的 algif_aead 模块中。
AF_ALG (用户空间加密API)
└── algif_aead 模块
└── authencesn 模板 ◄── 存在漏洞
└── 就地优化 (2017)
└── req->src == req->dst ◄── 来自 splice() 的页面被链接到可写dst分散列表
步骤1:打开 AF_ALG AEAD socket
socket(AF_ALG, SOCK_SEQPACKET, 0)
步骤2:发送引用目标文件的 splice() 页面
(特权二进制文件的页缓存页面,例如 /usr/bin/sudo)
步骤3:触发 authencesn 草稿写入
authencesn 将 dst 缓冲区用作草稿区 →
在合法输出区域之外写入4个受控字节
步骤4:目标文件的页缓存条目现在被破坏
(磁盘文件未动 — 仅内存副本被修改)
步骤5:执行被修改的二进制文件 → ROOT
Linux内核的页缓存备份文件的内存副本。当文件被读取时,其页面会被缓存。splice() 系统调用可以直接引用这些缓存页面。通过将页缓存页面送入AF_ALG AEAD分散列表,authencesn草稿写入会落在那些缓存页面内部,从而有效地修补任何可读文件的内存副本——包括像 sudo、pkexec 或 passwd 这样的特权二进制文件。
上游补丁回退了2017年有缺陷的优化:
# 在提交 a664bf3d603d 中修复
git show a664bf3d603d
| 内核分支 | 受影响? | 修复版本 |
|---|---|---|
| 4.9.x (LTS) | ✅ 是 | 4.9.340+ |
| 5.4.x (LTS) | ✅ 是 | 5.4.295+ |
| 5.10.x (LTS) | ✅ 是 | 5.10.239+ |
| 5.15.x (LTS) | ✅ 是 | 5.15.185+ |
| 6.1.x (LTS) | ✅ 是 | 6.1.132+ |
| 6.6.x (LTS) | ✅ 是 | 6.6.83+ |
| 6.12.x (LTS) | ✅ 是 | 6.12.19+ |
| < 4.9 (2017年之前) | ❌ 否 | 不适用 — 优化不存在 |
| 发行版 | 受影响版本 | 已修补? | 公告 |
|---|---|---|---|
| Ubuntu | < 26.04 (所有版本) | ✅ 已修补 | USN |
| Ubuntu 26.04 (Resolute) | ❌ 不受影响 | — | — |
| RHEL / CentOS | 7, 8, 9 | ✅ 已修补 | RHSA-2026 |
| Amazon Linux | 2, 2023 | ✅ 已修补 | ALAS |
| SUSE / openSUSE | 所有受影响版本 | ✅ 已修补 | SUSE-SU |
| Debian | Bullseye, Bookworm | ✅ 已修补 | DSA |
| CloudLinux | 8, 9 | ✅ 已修补 | 公告 |
CVE-2026-31431-CopyFail/
│
├── 📄 README.md ← 您当前所在位置
├── 📄 LICENSE ← 研究/教育许可证
├── 📄 DISCLAIMER.md ← 法律与道德使用政策
├── 📄 CHANGELOG.md ← 版本历史
│
├── 📂 docs/
│ ├── vulnerability-analysis.md ← 深度剖析:根本原因与机制
│ ├── exploitation-walkthrough.md ← 分步方法论
│ ├── affected-kernels.md ← 完整内核/发行版版本矩阵
│ ├── detection.md ← 防御者、Tenable、Wazuh 覆盖范围
│ └── references.md ← 所有CVE、博客、公告
│
├── 📂 exploit/
│ ├── README.md ← 使用说明、前提条件、测试过的发行版
│ ├── copyfail.py ← 参考PoC(教育用途)
│ ├── trigger.c ← AF_ALG + splice() C触发器
│ └── variants/
│ ├── ubuntu.py ← Ubuntu特定变体
│ ├── rhel.py ← RHEL/CentOS变体
│ └── amazon_linux.py ← Amazon Linux变体
│
├── 📂 detection/
│ ├── yara/
│ │ └── copyfail.yar ← 检测漏洞利用工件的YARA规则
│ ├── sigma/
│ │ └── copyfail_lpe.yml ← SIEM/SOC用Sigma规则
│ └── scripts/
│ ├── check_vulnerable.sh ← 快速内核漏洞检查
│ └── detect_algif_aead.sh ← 检查模块是否加载/活动
│
├── 📂 mitigation/
│ ├── README.md ← 缓解措施概述
│ ├── disable_algif_aead.sh ← 禁用受影响的内核模块
│ ├── patch-notes.md ← 上游补丁详情
│ └── kubernetes-hardening.md ← K8s / 容器加固
│
├── 📂 lab/
│ ├── Vagrantfile ← 可复现的易受攻击虚拟机
│ ├── setup.sh ← 实验环境引导脚本
│ └── docker/
│ └── Dockerfile ← 易受攻击的Ubuntu容器
│
├── 📂 reports/
│ ├── pentest-report-template.md ← 面向客户的报告模板
│ └── sample-finding.md ← 示例发现文档
│
└── 📂 assets/
├── demo.gif ← (可选)终端演示
└── diagrams/
└── page-cache-write.png ← 攻击流程图
始终在隔离的授权环境中测试。切勿在生产系统上运行漏洞利用。
# 克隆仓库
git clone https://github.com/0xFuffM3/CVE-2026-31431-CopyFail.git
cd CVE-2026-31431-CopyFail
# 启动易受攻击的实验环境虚拟机
cd lab/
vagrant up
# SSH进入实验环境
vagrant ssh
# 确认内核版本(应为易受攻击版本)
uname -r
cd lab/docker/
# 构建易受攻击的容器镜像
docker build -t copyfail-lab .
# 以所需权限运行以进行内核交互
docker run --rm -it --privileged copyfail-lab /bin/bash
# 运行快速检查脚本
chmod +x detection/scripts/check_vulnerable.sh
./detection/scripts/check_vulnerable.sh
在易受攻击的系统上的预期输出:
[!] 内核版本: 5.15.0-91-generic
[!] algif_aead 模块: 已加载
[✗] 系统似乎对 CVE-2026-31431 (Copy Fail) 易受攻击
[*] 建议操作:应用内核更新或禁用 algif_aead
在已修补的系统上的预期输出:
[✓] 内核版本: 6.1.132
[✓] 系统似乎已针对 CVE-2026-31431 (Copy Fail) 进行修补
要求: 在易受攻击的系统上拥有非特权用户的本地访问权限。
# Python 3.6+
python3 --version
# 必要的内核模块存在
lsmod | grep algif_aead
# 验证目标二进制文件可读
ls -la /usr/bin/sudo
cd exploit/
# 检查当前权限级别
id
# uid=1000(user) gid=1000(user) groups=1000(user)
# 运行 Copy Fail PoC
python3 copyfail.py
# 验证权限提升
id
# uid=0(root) gid=0(root) groups=0(root)
1. 枚举内核版本
└─► uname -r / cat /proc/version
2. 检查 algif_aead 是否已加载
└─► lsmod | grep algif_aead
3. 确认低权限立足点
└─► id / whoami
4. 执行 Copy Fail PoC
└─► python3 exploit/copyfail.py
5. 验证root访问权限
└─► id && cat /etc/shadow
6. 记录证据
└─► 截图 + 日志记录内核版本、发行版、漏洞利用哈希
7. 应用缓解措施(测试后)
└─► sudo bash mitigation/disable_algif_aead.sh
8. 包含在渗透测试报告中
└─► 使用 reports/pentest-report-template.md