## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-CHERNSTEPANOV-DIRTYFRAG-FOR-DUMMIES
# Dirty Frag / CVE-2026-43284 — 研究笔记
## 概述
该仓库包含一个经过清理的技术示意图和辅助笔记,用于描述通常被称为 **Dirty Frag** 且针对 xfrm-ESP 路径被追踪为 **CVE-2026-43284** 的 Linux 内核漏洞。
该问题属于由 Hyunwoo Kim(@v4bel)发现的更广泛的 **Dirty Frag** 类别。一个相关的 RxRPC 变体被单独追踪为 **CVE-2026-43500** 。
本材料的目的是:
* 在系统层面解释漏洞机制;
* 记录 XFRM ESP、UDP 封装、`splice()`、`skb` 片段、文件支持页以及页缓存损坏之间的关系;
* 提供可用于报告、案例研究和防御简报的出版级图表。
本仓库**不是** 利用指南。
实际上,该仓库以更易于检查的形式扩展并记录了最初公开的 Dirty Frag ESP 概念验证。包含的材料仅适用于 **64 位 Linux 系统** 。
* * *
## 工作原理
在高层面上,该问题与 xfrm ESP 接收路径中的**错误的原地处理** 有关。
链条如下:
1. 一个本地非特权进程通过 `unshare(CLONE_NEWUSER | CLONE_NEWNET)` 进入新的用户和网络命名空间;
2. 通过 Netlink 套接字安装 XFRM 安全关联;
3. 每个安全关联在扩展序列号状态中存储一个 192 字节的小型 ELF 负载的 4 个字节;
4. 通过 `splice()` 和 `SPLICE_F_MOVE` 将 `/usr/bin/su` 的只读页面移入 UDP 数据包路径;
5. 数据包携带一个文件支持的页面作为 `skb` 片段;
6. ESP 接收路径执行原地重放窗口更新,其中片段页面被视为可写;
7. 4 字节写入落在页缓存支持的页面中;
8. **磁盘上的文件保持不变** ,但**内存中的缓存表示被破坏** ;
9. 后续执行可能使用修改后的变体而不是干净的磁盘内容。
* * *

* * *
## 本仓库包含内容
* `poc/dirtyfrag_sim.cpp` — 清理后的 C++ 研究源码产物
* `poc/dirtyfrag` — 编译的 64 位二进制产物
* `docs/dirtyfrag-flow.png` — 生成的出版图表
## 二进制构建
仓库还包含一个从 C++ 源文件编译的 C++ 二进制产物。示例构建命令:
root@kitploit:~
g++ -std=c++17 -o poc/dirtyfrag poc/dirtyfrag.cpp
* * *
## 受影响版本
从 `cac2661c53f3`(2017-01-17)到 `f4c50a4034e6`(2026-05-05,已发布修复)之间的内核。
有效暴露窗口约为 9 年。
## 免责声明
本仓库仅供防御性研究、文档记录和教育分析使用。
请勿将其用于瞄准真实系统、修改特权可执行文件或获取未经授权的访问。
该漏洞类别由 **Hyunwoo Kim(@v4bel)** 发现。本仓库是一个独立的、经过清理的研究产物,旨在加速分析。
* * *
## 参考资料
* 原始 Dirty Frag 研究与链:V4bel/dirtyfrag
* 原始分析文章:dirtyfrag write-up
* CVE-2026-43284 的内核修复:提交 `f4c50a4034e6`