██████╗ ██████╗ ██████╗ ██╗ ██╗ ███████╗ █████╗ ██╗██╗
██╔════╝██╔═══██╗██╔══██╗╚██╗ ██╔╝ ██╔════╝██╔══██╗██║██║
██║ ██║ ██║██████╔╝ ╚████╔╝ █████╗ ███████║██║██║
██║ ██║ ██║██╔═══╝ ╚██╔╝ ██╔══╝ ██╔══██║██║██║
╚██████╗╚██████╔╝██║ ██║ ██║ ██║ ██║██║███████╗
╚═════╝ ╚═════╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝╚═╝╚══════╝
algif_aead 页缓存破坏)⚠️ 仅限授权使用 — 本仓库严格供渗透测试人员、安全研究人员及防御者在合法授权下使用。滥用属刑事犯罪。
Copy Fail 是一个本地权限提升(LPE) 漏洞,于2026年4月29日披露,影响自2017年以来几乎所有主流Linux发行版。
非特权用户 ──► AF_ALG + splice() ──► 4字节页缓存写入 ──► ROOT
该漏洞源于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
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
// detection/yara/copyfail.yar
rule CopyFail_CVE_2026_31431 {
meta:
description = "检测 Copy Fail (CVE-2026-31431) 漏洞利用工件"
author = "0xFuffM3"
date = "2026-04-30"
reference = "https://copy.fail"
strings:
$py1 = "algif_aead" ascii
$py2 = "AF_ALG" ascii
$py3 = "splice" ascii
$py4 = "page_cache" ascii
$py5 = "authencesn" ascii
condition:
3 of them
}
运行YARA扫描:
yara detection/yara/copyfail.yar /tmp/ -r
# detection/sigma/copyfail_lpe.yml
title: Copy Fail LPE漏洞利用执行 (CVE-2026-31431)
status: stable
logsource:
category: process_creation
product: linux
detection:
selection:
CommandLine|contains:
- 'AF_ALG'
- 'algif_aead'
- 'authencesn'
condition: selection
falsepositives:
- 合法的加密API测试
level: high
chmod +x detection/scripts/detect_algif_aead.sh
./detection/scripts/detect_algif_aead.sh
# Ubuntu / Debian
sudo apt-get update && sudo apt-get upgrade linux-image-generic
# RHEL / CentOS
sudo yum update kernel
# Amazon Linux
sudo yum update kernel
# 更新后重启
sudo reboot
algif_aead 模块(临时方案)# 运行缓解脚本
chmod +x mitigation/disable_algif_aead.sh
sudo bash mitigation/disable_algif_aead.sh
该脚本执行的操作:
echo "install algif_aead /bin/false" > /etc/modprobe.d/disable-algif.conf
rmmod algif_aead 2>/dev/null || echo "[*] 模块当前未加载"
echo "[✓] algif_aead 已禁用。重启以确认持久性。"
参见 mitigation/kubernetes-hardening.md 了解:
AF_ALG socket创建socket(AF_ALG, ...) 系统调用现成的客户端报告模板位于 reports/pentest-report-template.md。
发现: 通过 Copy Fail (CVE-2026-31431) 进行本地权限提升
严重性: 高 (CVSS 7.8)
主机: 10.10.10.55 (ubuntu-prod-01)
内核: 5.15.0-91-generic
证据:
- 非特权shell (uid=1000) 提升至root (uid=0)
- 确认内核模块 algif_aead 已加载
- 无磁盘工件 — 仅页缓存
建议:
1. 立即应用供应商内核补丁
2. 临时方案:禁用 algif_aead 模块
3. 检查Kubernetes节点和CI/CD运行器
在使用本仓库中的任何内容之前,请阅读此声明。
本仓库仅供合法的安全研究、授权渗透测试和防御性安全目的发布。
未经授权使用本材料可能违反计算机欺诈与滥用法案(CFAA)、欧盟指令2013/40/EU、印度IT法案2000以及您所在司法管辖区的同等法律。
作者不对滥用承担任何责任。完整法律声明请参见 DISCLAIMER.md。
欢迎安全研究人员贡献:
git checkout -b feat/your-contributiongit commit -m "添加:X的检测规则"请遵守负责任的披露规范。请勿包含针对已修补系统的武器化、可用于生产的漏洞利用代码。
| # | 章节 | 描述 |
|---|
| 1 | 什么是Copy Fail? | 漏洞概述 |
| 2 | 技术深度剖析 | 根本原因分析 |
| 3 | 受影响系统 | 发行版与内核矩阵 |
| 4 | 仓库结构 | 文件布局 |
| 5 | 实验环境搭建 | 安全复现 |
| 6 | 漏洞利用使用 | 渗透测试工作流程 |
| 7 | 检测 | YARA、Sigma、脚本 |
| 8 | 缓解措施 | 补丁与加固 |
| 9 | 渗透测试报告 | 报告模板 |
| 10 | 法律与道德 | 免责声明 |
| 11 | 参考资料 | CVE、公告、博客 |
| 属性 | 详情 |
|---|
| CVE ID | CVE-2026-31431 |
| 别名 | Copy Fail |
| CVSS v3.1 | 7.8(高危) |
| 攻击向量 | 本地 |
| 所需权限 | 低(任意非特权用户) |
| 用户交互 | 无 |
| 发现者 | Xint Code (Theori) |
| 披露时间 | 2026年4月29日 |
| 漏洞利用大小 | 732字节(Python PoC) |
| 补丁状态 | ✅ 可用 — 回退提交 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 | ✅ 已修补 | 公告 |
| 工具 | 检测支持 |
|---|
| Microsoft Defender (MDVM) | ✅ 是 |
| Tenable Nessus | ✅ 是 |
| Qualys | ✅ 是 |
| Wazuh | ✅ 通过自定义Sigma规则 |
| Palo Alto Cortex XDR | ✅ 是 |
| CrowdStrike Falcon | ✅ 是 |
| 来源 | 链接 |
|---|
| 原始披露(Xint/Theori) | copy.fail |
| Xint Code技术文章 | xint.io/blog/copy-fail |
| NVD条目 | nvd.nist.gov |
| 微软安全博客 | microsoft.com/security/blog |
| Ubuntu公告 | ubuntu.com/blog |
| CERT-EU公告 | cert.europa.eu |
| Tenable常见问题 | tenable.com/blog |
| Palo Alto Unit 42 | unit42.paloaltonetworks.com |
| CloudLinux公告 | blog.cloudlinux.com |
| Bugcrowd分析 | bugcrowd.com/blog |
| Linux内核补丁 | kernel.org — 提交 a664bf3d603d |