xd20111/CVE-2026-43284
GitHub: xd20111/CVE-2026-43284
Linux 内核 Dirty Frag 漏洞链的本地提权 PoC,通过 xfrm/ESP 与 RxRPC 子系统的页缓存写入原语实现确定性 root 提权。
Stars: 0 | Forks: 0
# 🚨 CVE-2026-43284 — Dirty Frag 🚨




**通用 Linux 内核本地提权**
## 概述
| 字段 | 详情 |
|---|---|
| **CVE** | CVE-2026-43284 (xfrm/ESP) + CVE-2026-43500 (RxRPC) |
| **昵称** | Dirty Frag |
| **CVSS** | 7.8 HIGH |
| **类型** | 本地提权 (LPE) |
| **引入** | Linux kernel 4.10 (2017, 提交 `cac2661c53f3`) |
| **修复** | 主线提交 `f4c50a4034e6` / `aa54b1d27fe0` |
| **前提条件** | 本地无特权 shell 访问权限 |
| **远程攻击向量** | 无 — 仅限本地 |
| **披露** | 2026 年 5 月 7 日由 Hyunwoo Kim (@v4bel) 披露 |
## 漏洞摘要
Linux 内核的 `xfrm`/ESP 和 `RxRPC` 子系统中存在一个逻辑缺陷,允许无特权的本地用户对系统上任何可读文件执行**确定性的、受控的任意写入到页缓存中**——包括 `/usr/bin/su` 等 setuid 二进制文件。
根本原因是不安全的**对引用页缓存页面的共享套接字缓冲区 (`skb`) 片段进行原位解密**,特别是在使用 `splice(2)` 或 `sendfile(2)` 时。这提供了一个强大的任意页缓存写入原语,可被利用来覆盖内存中的敏感文件并获得完整的 root 权限。
两个不同的原语被链接起来以实现通用覆盖:
- **CVE-2026-43284** — `xfrm-ESP 页缓存写入`:与 Copy Fail 共享相同的 sink,但通过 `esp4`/`esp6` 模块触发,无论 `algif_aead` 是否可用。需要 namespace 创建权限。
- **CVE-2026-43500** — `RxRPC 页缓存写入`:不需要 namespace 权限,但必须存在 `rxrpc.ko`(在 Ubuntu 上默认加载)。覆盖了 CVE-2026-43284 的盲点。
将这两个变体链接起来使它们可以互相覆盖彼此的盲点,从而在每个主要发行版上可靠地获取 root 权限。
**无需竞态条件。无需重试。没有崩溃风险。在所有测试的发行版中均具有确定性。**
### 与先前技术的比较
| | Dirty Cow (2016) | Dirty Pipe (2022) | Copy Fail (2026) | **Dirty Frag (2026)** |
|---|---|---|---|---|
| 需要竞态条件 | 是 | 部分 | 否 | **否** |
| 特定版本 | 是 | 是 | 否 | **否** |
| 可靠性 | 不稳定 | 中等 | 确定 | **确定** |
| 发行版覆盖范围 | 有限 | 有限 | 自 2017 年以来的所有版本 | **自 2017 年以来的所有版本** |
| 绕过 Copy Fail 缓解措施 | — | — | 不适用 | **是** |
## 影响
- 无特权的本地攻击者 → **root shell**
- 影响自 2017 年以来发布内核的几乎所有主要 Linux 发行版
- 高度可靠,无需竞态条件
- 完全绕过 `algif_aead` 黑名单(Copy Fail 的应对措施)
- 内核不会在漏洞利用失败时发生 panic
## 受影响版本
**CVE-2026-43284 (xfrm/ESP):** Linux 内核从提交 `cac2661c53f3` (2017-01-17) 到 `f4c50a4034e6` (2026-05-05)。
**CVE-2026-43500 (RxRPC):** Linux 内核从提交 `2dc334f1a63a` (2023-06-08) 到 `aa54b1d27fe0` (2026-05-10)。
漏洞链的有效存在时间约为 **9 年**。
在此范围内发布内核的所有主要发行版均受影响,包括:
| 发行版 | 测试版本 | 状态 |
|---|---|---|
| Ubuntu 24.04.4 | 6.17.0-23-generic | 受影响 — 补丁正在推出 |
| RHEL 10.1 | 6.12.0-124.49.1.el10_1.x86_64 | 受影响 — 补丁正在推出 |
| AlmaLinux 10 | 6.12.0-124.52.3.el10_1.x86_64 | 受影响 — 补丁可用 |
| CentOS Stream 10 | 6.12.0-224.el10.x86_64 | 受影响 — 补丁正在推出 |
| Fedora 44 | 6.19.14-300.fc44.x86_64 | 受影响 — 补丁可用 |
| openSUSE Tumbleweed | 7.0.2-1-default | 受影响 — 正在进行中 |
| Debian | — | 受影响 — 正在进行中 |
## 漏洞利用
### 构建与运行
```
gcc -O0 -Wall -o exp exp.c -lutil && ./exp
```
### 清理
⚠️ **重要提示:** 运行此漏洞利用程序后,页缓存会被污染。要清除受污染的页缓存并确保系统稳定,请运行:
```
echo 3 > /proc/sys/vm/drop_caches
```
或者重新启动系统。
## 缓解措施
### 选项 1 — 打补丁(推荐)
更新到包含主线修复的内核并重新启动。
**已在主线中通过以下提交修复:**
- CVE-2026-43284:提交 `f4c50a4034e62ab75f1d5cdd191dd5f9c77fdff4`
- CVE-2026-43500:提交 `aa54b1d27fe0c2b78e664a34fd0fdf7cd1960d71`
```
# Ubuntu / Debian
sudo apt update && sudo apt upgrade -y && sudo reboot
# RHEL / AlmaLinux / CentOS Stream
sudo dnf clean metadata && sudo dnf upgrade && sudo reboot
# SUSE / openSUSE
sudo zypper refresh && sudo zypper update kernel-default && sudo reboot
# Fedora
sudo dnf upgrade --refresh && sudo reboot
```
### 选项 2 — 拉黑易受攻击模块(临时)
如果无法立即打补丁,请禁用易受攻击的模块并清除页缓存。
```
# 将易受攻击的模块加入黑名单
sudo sh -c 'printf "install esp4 /bin/false\ninstall esp6 /bin/false\ninstall rxrpc /bin/false\n" > /etc/modprobe.d/dirtyfrag.conf'
# 立即卸载模块
sudo rmmod esp4 esp6 rxrpc 2>/dev/null || true
# 清除页面缓存
echo 3 | sudo tee /proc/sys/vm/drop_caches >/dev/null
```
### 此应对措施的影响
| 组件 | 影响 |
|---|---|
| SSH | ✅ 不受影响 |
| dm-crypt / LUKS | ✅ 不受影响 |
| kTLS / 内核中的 TLS | ✅ 不受影响 |
| OpenSSL / GnuTLS / NSS(默认构建版本) | ✅ 不受影响 |
| IPsec / XFRM(ESP 隧道,VPN) | ⚠️ 会中断 — `esp4` 和 `esp6` 将不可用 |
| 使用 RxRPC 的 AFS / OpenAFS 客户端 | ⚠️ 会中断 — `rxrpc` 将不可用 |
| 直接使用 `AF_ALG` + AEAD 的应用程序 | ⚠️ 使用 `lsof \| grep AF_ALG` 检查 |
### 选项 3 — seccomp / AppArmor(纵深防御)
对于不受信任的工作负载——容器、CI 运行器、沙盒环境——无论补丁状态如何,请通过 seccomp 或 AppArmor 策略限制 `AF_ALG` 套接字的创建和 `splice()` 的使用。即使在易受攻击的内核上,这也能缩小攻击面,但并非彻底的修复。
## 检测
检查易受攻击的模块当前是否已加载或正在使用:
```
# 检查模块是否已加载
lsmod | grep -E 'esp4|esp6|rxrpc'
# 检查是否有进程打开了 AF_ALG socket
lsof | grep AF_ALG
ss -xa | grep alg
# 确认重启后 workaround 处于活动状态
cat /etc/modprobe.d/dirtyfrag.conf
```
## 参考
| 资源 | 链接 |
|---|---|
| CVE-2026-43284 主线修复 | [f4c50a4034e6](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=f4c50a4034e62ab75f1d5cdd191dd5f9c77fdff4) |
| CVE-2026-43500 主线修复 | [aa54b1d27fe0](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=aa54b1d27fe0c2b78e664a34fd0fdf7cd1960d71) |
| NVD — CVE-2026-43284 | https://nvd.nist.gov/vuln/detail/CVE-2026-43284 |
| NVD — CVE-2026-43500 | https://nvd.nist.gov/vuln/detail/CVE-2026-43500 |
## 披露时间线
| 日期 | 事件 |
|---|---|
| 2017-01-17 | CVE-2026-43284 缺陷被引入 (`cac2661c53f3`) |
| 2023-06-08 | CVE-2026-43500 缺陷被引入 (`2dc334f1a63a`) |
| 2026-05-05 | CVE-2026-43284 在主线中修复 (`f4c50a4034e6`) |
| 2026-05-07 | 公开披露 |
| 2026-05-10 | CVE-2026-43500 在主线中修复 (`aa54b1d27fe0`) |
| 2026-05-10+ | 发行版补丁开始发布 |
## 常见问题解答
**为什么要链接两个漏洞?**
`xfrm-ESP 页缓存写入` 提供了一个强大的任意 4 字节 STORE 原语,并且存在于大多数发行版上,但需要 namespace 创建权限——而 Ubuntu 有时会通过 AppArmor 阻止该权限。`RxRPC 页缓存写入` 不需要 namespace 权限,但 `rxrpc.ko` 不包含在大多数发行版中——除了 Ubuntu,在 Ubuntu 上它会被默认加载。将这两者链接起来使得它们的盲点互相覆盖,从而在每个主要发行版上都能可靠地获取 root 权限。
**与 Copy Fail (CVE-2026-31431) 有什么关系?**
`xfrm-ESP` 原语与 CVE-2026-31431 共享相同的页缓存写入 sink,但是通过 `esp4`/`esp6` 模块独立于 `algif_aead` 触发的。应用 CVE-2026-31431 的缓解措施(将 `algif_aead` 列入黑名单)并不能防御 Dirty Frag。
**为什么叫“Dirty Frag”这个名字?**
该漏洞污染了 `struct sk_buff` 的 `frag` 成员,使其与 Dirty Pipe 属于同一个 bug 类别——即允许对页缓存进行无特权写入的逻辑缺陷。
## 免责声明
本仓库仅用于**教育和防御性安全目的**。请勿在您不拥有或未获得明确书面授权进行测试的系统上使用本仓库中的任何信息或代码。
**保持安全。尽早打补丁。经常打补丁。祝您 Hack 愉快** 🛡️
标签:0day挖掘, 0day漏洞, CVE-2026-43284, Dirty Frag, ESP, Linux内核漏洞, LPE, Page Cache, RxRPC, Web报告查看器, xfrm, 任意文件写入, 内核安全, 协议分析, 安全渗透, 客户端加密, 本地权限提升, 权限提升, 漏洞分析, 漏洞复现, 系统提权, 网络安全, 路径探测, 隐私保护