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. 后续的执行可能会使用损坏的缓存表示,而不是干净的磁盘内容。 核心分析点在于以下两者之间的分歧: - **未更改的磁盘文件**,以及 - **内存中已修改的缓存表示**。 ![Copy Fail 图表](https://raw.githubusercontent.com/ChernStepanov/CopyFail-for-dummies/main/<./Diagram.png>) ## 本仓库包含的内容 - `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报告查看器, 内存损坏, 安全渗透, 数据擦除, 无后门, 暴力破解, 本地提权, 概念验证代码, 漏洞分析, 漏洞复现, 路径探测, 逆向工具, 零拷贝, 页缓存破坏