Dirty Frag:Linux 内核零拷贝路径本地提权漏洞

Dirty Frag 漏洞示意图

韩国安全研究员 Hyunwoo Kim(@v4bel)公开披露了一个被命名为"Dirty Frag"的 Linux 内核本地权限提升漏洞,允许普通用户无需密码即可获得 root 权限。PoC 已在 GitHub 公开,Ubuntu、RHEL、Fedora、openSUSE 等所有主流发行版目前均无可用补丁。

漏洞原理

Dirty Frag 源自零拷贝发送路径上的脏写入问题,属于与 Dirty Pipe(CVE-2022-0847)和 Copy Fail 相同的漏洞类。具体机制:splice() 将攻击者只有读权限的 page cache 页直接钉入 struct sk_buff 的 frag 槽,而接收侧内核代码对该 frag 执行原地(in-place)加密/解密,导致只读 page cache 被写入。

漏洞由两个独立模块的缺陷链式组合而成:

xfrm-ESP Page-Cache Write:利用 IPsec ESP 模块,影响范围约 9 年(自 2017 年 commit cac2661c53f3 起)。该变体提供类似 Copy Fail 的任意 4 字节 STORE 原语,可将 /usr/bin/su 替换为恶意程序。缺点是需要创建用户命名空间的权限,而 Ubuntu 的 AppArmor 策略有时会阻止非特权用户创建命名空间。

RxRPC Page-Cache Write:利用 RxRPC 协议模块,自 2023 年(commit 2dc334f1a63a)起受影响。该变体可清空系统用户配置文件中 root 的密码字段,完全不需要任何特殊权限。缺点是 rxrpc.ko 模块本身在大多数发行版上默认不加载——但在 Ubuntu 上默认加载。

两个变体的限制互相覆盖:ESP 模块在大多数发行版上都可用(命名空间被阻止时),RxRPC 在 Ubuntu 上可用(ESP 命名空间被阻止时)。这使得单一攻击程序能在几乎所有主流 Linux 发行版上通用提权。

Dirty Frag 是确定性逻辑 bug,不依赖时间窗口,无需竞态条件,利用失败时内核不会 panic,成功率极高。

披露时间线

漏洞的协调披露流程被第三方打破:

  • 2026-04-29/30:作者向 [email protected] 提交漏洞和补丁
  • 2026-05-07:作者向 linux-distros 提交,设定 5 天 embargo
  • 2026-05-07 同日:不相关的第三方将 exploit 公开至互联网,embargo 被打破
  • 2026-05-07:作者与发行版维护者协商后决定全面公开

上游 Linux 内核已于 5 月 7 日合并了针对 ESP 模块的修复补丁(commit f4c50a4034e6),但 RxRPC 模块的补丁尚未合并。由于协调披露被打破,各发行版未能按计划准备 backport,当前所有发行版内核均处于无补丁状态,CVE 编号亦尚未分配。

缓解措施

在补丁发布前,可以通过禁用相关内核模块来缓解:

bash
printf 'install esp4 /bin/false\ninstall esp6 /bin/false\ninstall rxrpc /bin/false\n' > /etc/modprobe.d/dirtyfrag.conf

并立即卸载已加载的模块:

bash
rmmod esp4 esp6 rxrpc 2>/dev/null

此操作对不使用 IPsec 或 AFS(Andrew File System)的普通服务器无功能影响。

影响范围

已在以下发行版验证:

  • Ubuntu 24.04.4(6.17.0-23-generic)
  • RHEL 10.1(6.12.0-124.49.1.el10_1)
  • openSUSE Tumbleweed(7.0.2-1-default)
  • CentOS Stream 10(6.12.0-224.el10)
  • AlmaLinux 10(6.12.0-124.52.3.el10_1)
  • Fedora 44(6.19.14-300.fc44)

PoC 仓库:https://github.com/V4bel/dirtyfrag

来源:[email protected] · GitHub

相关推荐