ChernStepanov/CopyFail-for-dummies
GitHub: ChernStepanov/CopyFail-for-dummies
针对 Linux 内核漏洞 CVE-2026-31431(Copy Fail)的防御性研究笔记与 PoC,揭示 algif_aead 路径中因错误就地处理导致的页缓存损坏机制。
Stars: 1 | Forks: 0
# Copy Fail / CVE-2026-31431 — 研究笔记
## 概述
本仓库包含清理后的技术图表以及关于 Linux 内核漏洞(通常称为 **Copy Fail**,追踪编号为 **CVE-2026-31431**)的辅助说明。
这些材料的目的是:
- 从系统层面解释该漏洞的机制;
- 记录 `AF_ALG`、`algif_aead`、`splice()`、文件支持页和页缓存损坏之间的关系;
- 为报告、案例研究和防御简报提供可直接发布的图表。
本仓库**不是**漏洞利用指南。
在实际应用中,本仓库对最初公开的最小化 `copy.fail` 概念验证进行了扩展和记录,将其转换为更易于检查的非最小化形式,其中包括一个面向二进制的 C++ 变体。包含的材料仅适用于 **64 位系统**。
## 工作原理
概括来说,该问题与 `algif_aead` 路径中**错误的就地处理**有关。
重要的概念链如下:
1. 本地无特权进程通过 `AF_ALG` 与内核加密 API 进行交互;
2. 将 AEAD 请求提交到 `algif_aead`;
3. 文件支持的页可以通过涉及 `splice()` 的零拷贝路径进入处理链;
4. 选择了错误的就地路径,此时页面会被视为可写入的目标;
5. 少量的辅助写入落入了由页缓存支持的页面中;
6. **磁盘上的文件保持不变**,但**内存中的缓存表示已损坏**;
7. 后续的执行可能会使用损坏的缓存表示,而不是干净的磁盘内容。
核心分析点在于以下两者之间的分歧:
- **未更改的磁盘文件**,以及
- **内存中已修改的缓存表示**。

## 本仓库包含的内容
- `copyfail.cpp` — C++ 研究源文件
- `copyfail.py` — Python 研究源文件
- `copyfail` — 已编译的 C++ 二进制文件
## 二进制文件构建
本仓库还包含一个由 C++ 源文件编译而成的二进制文件。示例构建命令:
```
g++ -Os -s copyfail.cpp -lz -o copyfail
```
## 免责声明
本仓库仅用于防御性研究、文档记录和教育教学分析。
请勿使用这些材料攻击真实系统、修改特权可执行文件或获取未经授权的访问权限。
标签:AF_ALG, algif_aead, C++, CVE-2026-31431, Linux内核漏洞, PoC, Python, splice系统调用, Web报告查看器, 内存损坏, 安全渗透, 数据擦除, 无后门, 暴力破解, 本地提权, 概念验证代码, 漏洞分析, 漏洞复现, 路径探测, 逆向工具, 零拷贝, 页缓存破坏