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报告查看器, 二进制利用, 云资产清单, 加密子系统, 子域名枚举, 安全防御评估, 应用安全, 数字签名, 暴力破解, 本地提权, 漏洞分析, 漏洞复现, 漏洞缓解, 系统安全, 网络安全, 请求拦截, 路径探测, 逆向工程, 隐私保护