Sebastian294/cve-2026-31431
GitHub: Sebastian294/cve-2026-31431
针对 Linux 内核 CVE-2026-31431(Copy Fail)本地提权漏洞的完整研究实验室,包含 PoC、技术分析、Docker 实验环境和缓解方案。
Stars: 1 | Forks: 0
# CVE-2026-31431 — Copy Fail: Linux 内核 LPE 研究实验室
## 目录
- [漏洞描述](#descripción-de-la-vulnerabilidad)
- [受影响的组件](#componentes-afectados)
- [工作原理](#cómo-funciona)
- [实验室环境搭建](#setup-del-lab-docker)
- [PoC — 演示](#poc--demostración)
- [缓解措施](#mitigación)
- [参考资料](#referencias)
## 漏洞描述
| 字段 | 值 |
|---|---|
| **CVE** | CVE-2026-31431 |
| **别名** | Copy Fail |
| **CVSS** | 7.8 (高危) |
| **类型** | 本地权限提升 (LPE) |
| **受影响的内核** | 2017 – 2026 (从 commit `72548b093ee3` 起) |
| **上游修复** | commit `a664bf3d603d` (回退了 2017 年的提交) |
| **披露时间** | 2026 年 4 月 29 日 (Theori / Xint Code) |
**Copy Fail** 是 Linux 内核加密子系统中的一个*确定性*逻辑错误(不需要竞态条件)。它允许无特权用户在系统中任何可读文件的 **page cache** 中写入 4 个可控字节,包括 `su` 或 `sudo` 等 setuid 二进制文件。
### 为什么它特别严重?
与以前类似的漏洞不同:
| 漏洞 | 类型 | 需要竞态? | 可移植性? | 漏洞利用大小 |
|---|---|---|---|---|
| Dirty Cow (CVE-2016-5195) | CoW 竞态 | 是 | 部分 | ~KB |
| Dirty Pipe (CVE-2022-0847) | pipe 缓冲区 | 否 | 有限 | ~KB |
| **Copy Fail (CVE-2026-31431)** | **逻辑** | **否** | **完全** | **732 字节** |
## 受影响的组件
```
Linux kernel — crypto/authencesn.c
└── algif_aead (módulo AF_ALG)
└── in-place optimization (commit 72548b093ee3, 2017)
└── AEAD scratch write → cruza boundary del scatterlist
└── escribe 4 bytes en page cache de archivo externo
```
**受影响的发行版:** Ubuntu、Debian、RHEL、Amazon Linux、SUSE、Fedora、Arch、AlmaLinux — 任何内核版本 ≥ 2017 的发行版。
## 工作原理
### 根本原因
2017 年引入的一项优化使得 `req->src` 和 `req->dst` 指向同一个组合的 scatterlist。这导致来自 `splice()` 的 page cache 页面被直接链接到*可写的*目标 scatterlist 中。
### 漏洞利用链
```
1. Abrir AF_ALG socket con algoritmo authencesn
2. Usar splice() para alimentar páginas del page cache del binario objetivo
hacia el socket AF_ALG (ej: /usr/bin/sudo)
3. Ejecutar operación de decryptación AEAD
4. authencesn usa el buffer de destino como scratch pad →
escribe seqno_hi (4 bytes controlados) FUERA del output legítimo,
cruzando el boundary del scatterlist
5. Los 4 bytes aterrizan en la página del page cache del binario objetivo
6. El archivo en disco NO cambia → los integrity checks no detectan nada
7. El binario modificado en memoria ejecuta payload → root
```
### 为什么它很隐蔽
该写入操作**绕过了正常的 VFS 写入路径**。磁盘上的文件保持不变。像 `sha256sum`、`aide`、`tripwire` 或 `inotify` 这样的工具无法检测到更改,因为它们操作的是磁盘上的文件或 inode,而不是内存中的 page cache。
## 实验室环境搭建
```
# Clone el repo
cd cve-2026-31431
# Construir la imagen vulnerable
docker build -t copyfail-lab -f docker/Dockerfile.vulnerable .
# Ejecutar el lab
docker run --rm -it \
--cap-add=NET_ADMIN \
--security-opt seccomp=unconfined \
copyfail-lab bash
# Dentro del contenedor:
cd /lab
python3 exploit/poc.py
```
### 要求
- Docker ≥ 20.x
- 宿主机内核:未打补丁的 Ubuntu/Debian,内核版本 5.x 或 6.x(参见 docs/ 中的表格)
- 容器内有 Python 3.10+(用于 `os.splice`)
## PoC — 演示
参见 [exploit/poc.py](exploit/poc.py) 和 [exploit/README.md](exploit/README.md)。
该 PoC 演示了:
1. page cache 损坏(可验证)
2. 在目标文件中写入 4 个可控字节
3. 完整的 LPE:取决于宿主机内核(详见说明)
## 缓解措施
详细说明请参见 [mitigation/README.md](mitigation/README.md)。
**TL;DR — 立即缓解(无需重启):**
```
# Deshabilitar el módulo afectado
echo "install algif_aead /bin/false" | sudo tee /etc/modprobe.d/disable-algif.conf
sudo modprobe -r algif_aead 2>/dev/null || true
```
**彻底修复:** 将内核更新到已打补丁的版本(在 `a664bf3d603d` 之后的版本)。
## 仓库结构
```
cve-2026-31431/
├── README.md ← este archivo
├── docs/
│ ├── technical-analysis.md ← análisis técnico profundo
│ └── affected-kernels.md ← tabla de versiones afectadas/parcheadas
├── exploit/
│ ├── README.md ← documentación del PoC
│ └── poc.py ← proof of concept (Python 3.10+)
├── mitigation/
│ ├── README.md ← guía de mitigación
│ ├── disable-algif.conf ← modprobe config
│ └── check-vulnerable.sh ← script de detección
├── docker/
│ ├── Dockerfile.vulnerable ← lab vulnerable
│ └── Dockerfile.patched ← lab con mitigación aplicada
└── scripts/
└── setup-lab.sh ← automatización del lab
```
## 披露时间线
| 日期 | 事件 |
|---|---|
| 2017 年 | Commit `72548b093ee3` 将该漏洞引入内核 |
| ~2025 年 | Theori/Xint Code 开始分析 crypto 子系统 |
| 2026 年 4 月 28 日 | 与发行版供应商进行协调 |
| **2026 年 4 月 29 日** | **公开披露 + 发布 PoC** |
| 2026 年 5 月 1 日 | 生产环境仓库中提供已打补丁的内核 |
| 2026 年 5 月 1 日 | 被添加到 CISA KEV 目录 |
## 参考资料
- [Xint Code — Copy Fail 官方分析文章](https://xint.io/blog/copy-fail-linux-distributions)
- [copy.fail — 公告网站](https://copy.fail/)
- [官方 GitHub — theori-io/copy-fail-CVE-2026-31431](https://github.com/theori-io/copy-fail-CVE-2026-31431)
- [NVD — CVE-2026-31431](https://nvd.nist.gov/vuln/detail/CVE-2026-31431)
- [Ubuntu 安全公告](https://ubuntu.com/blog/copy-fail-vulnerability-fixes-available)
- [Microsoft 安全博客](https://www.microsoft.com/en-us/security/blog/2026/05/01/cve-2026-31431-copy-fail-vulnerability-enables-linux-root-privilege-escalation/)
- [Unit 42 — Palo Alto 分析](https://unit42.paloaltonetworks.com/cve-2026-31431-copy-fail/)
- [上游修复提交 `a664bf3d603d`](https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git)
标签:AF_ALG, algif_aead, Copy Fail, CVE, CVE-2026-31431, Dirty COW, Dirty Pipe, Docker, Linux内核, LPE, PoC, Web报告查看器, 二进制利用, 云资产清单, 加密子系统, 子域名枚举, 安全防御评估, 应用安全, 数字签名, 暴力破解, 本地提权, 漏洞分析, 漏洞复现, 漏洞缓解, 系统安全, 网络安全, 请求拦截, 路径探测, 逆向工程, 隐私保护