Linux新提权漏洞DirtyFrag

admin 2026-05-11 09:22:42 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: DirtyFrag是2026年5月公开的Linux本地提权漏洞链,通过splice()将只读文件页缓存引入skbfrag结构,在xfrm-ESP和RxRPC模块的in-place加解密路径中实现pagecache写入。漏洞不依赖竞争条件且稳定性高,影响范围涵盖Ubuntu、RHEL等主流发行版。文档提供了临时缓解方案(禁用相关模块)和补丁状态说明,建议在测试环境验证后等待内核更新。 综合评分: 87 文章分类: 漏洞分析,Linux安全,提权漏洞,应急响应,WEB安全


cover_image

Linux 新提权漏洞 DirtyFrag

原创

攻防路 攻防路

攻防录

2026年5月8日 12:42 北京

在小说阅读器读本章

去阅读

简介

DirtyFrag 是刚公开的 Linux 本地提权漏洞链。它把 splice()、page cache、struct sk_buff 的 frag,以及内核里的 in-place crypto 路径串在一起,最终让普通用户影响本来只能读的文件页缓存。

项目地址: https://github.com/V4bel/dirtyfrag

技术原理

DirtyFrag 属于 Dirty Pipe、Copy Fail 这一类问题:内核为了少拷贝、快传输,把文件页缓存通过零拷贝路径挂到另一个数据结构里;后续代码又把这块数据当成“自己可以原地修改”的缓冲区。

问题就出在这个所有权判断上。

在正常路径里,struct sk_buff 的 frag 可以指向外部页。splice() 把只读文件的 page cache 页面挂进 skb frag 后,如果后续网络或加密代码执行 in-place 写入,就可能把写操作落到 page cache 上。

DirtyFrag 不是单点漏洞,而是两条路径的组合:

| 路径 | 触发位置 | 写入特征 | 环境盲区 | 修复思路 | | — | — | — | — | — | | xfrm-ESP Page-Cache Write | ESP 输入解密路径 | 4 字节 STORE | 需要能创建 user/net namespace | 标记 shared frag,强制走 COW | | RxRPC Page-Cache Write | RXKAD 校验解密路径 | 8 字节 in-place 写 | 依赖 rxrpc.ko 是否存在或加载 | 非线性 skb 先复制,再解密 |

xfrm-ESP 路径

ESP 侧的问题在 esp_input()。当 skb 是非线性的,但没有 frag_list 时,代码可能跳过 skb_cow_data(),直接在 frag 上做 in-place AEAD 解密。

如果这个 frag 来自 splice() 挂进去的文件页缓存,那么加密预处理里的 STORE 就不再只是写网络包缓冲区,而是写到了文件 page cache。

仓库说明里提到,这条路径的影响范围从 2017 年 1 月 17 日的相关提交开始,一直覆盖到当时的 upstream 状态。它不依赖 race condition,失败时也不会直接让内核 panic,所以稳定性比传统竞争类漏洞更高。

RxRPC 路径

RxRPC 侧的问题在 RXKAD 安全校验。校验数据包时,内核会对 skb payload 做 in-place pcbc(fcrypt) 解密。

如果 payload 仍然挂着来自 splice() 的文件页缓存,解密结果就可能落到 page cache。和 ESP 路径不同,RxRPC 的写入值不是直接可控,需要经过密码函数约束;但它不需要创建 user namespace。

这也是 DirtyFrag 要把两条路径串起来的原因:ESP 路径覆盖面广,但有 namespace 条件;RxRPC 路径对 namespace 要求低,但模块覆盖面没有 ESP 广。两者组合后,盲区互补。

DirtyFrag 与 Copy Fail 的关系

README 明确写到,Copy Fail 是这项研究的动机之一。DirtyFrag 和 Copy Fail 共享同一个大方向:把只读文件页缓存引入会发生原地写入的内核路径。

差别在触发面。

| 项目 | 主要对象 | 触发模块 | 公开缓解是否覆盖 DirtyFrag | | — | — | — | — | | Dirty Pipe | struct pipe_buffer | pipe 相关路径 | 不覆盖 | | Copy Fail | AF_ALG / AEAD 路径 | algif_aead | 不完全覆盖 | | DirtyFrag | struct sk_buff frag | xfrm-ESP + RxRPC | 需要单独处理 |

仓库特别强调:即使系统已经按 Copy Fail 的公开建议禁用了 algif_aead,仍然可能受 DirtyFrag 影响。因为 DirtyFrag 的 xfrm-ESP 路径不依赖 algif_aead

影响范围

DirtyFrag 的新,不只是仓库发布时间新。更麻烦的是披露窗口也很近:write-up 里记录,相关细节在 2026 年 5 月 7 日提交给 linux-distros,随后因为第三方公开导致 embargo 被打破,作者当天公开完整文档。

README 中列出的测试发行版包括:

| 发行版 | README 中的测试内核 | | — | — | | 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 |

仓库没有给出完整 Benchmark 数字。它给出的判断是:这是确定性的逻辑漏洞,不依赖时间窗口,失败时不容易造成内核崩溃,成功率很高。

补丁状态要分开看:

| 位置 | 仓库记录的状态 | | — | — | | xfrm-ESP | 2026 年 5 月 7 日,shared-frag 思路的修复进入 netdev tree | | RxRPC | write-up 中写明,当时 upstream 还没有合入补丁 | | 发行版内核 | README 发布时提到尚无发行版补丁,实际以各发行版安全公告为准 |

所以它更像一个“刚进入应急窗口”的漏洞:上游补丁、发行版回补、企业内核更新、临时缓解策略,可能不会在同一天完成。

快速上手

  1. 克隆仓库,先读文档。
git clone https://github.com/V4bel/dirtyfrag.git
cd dirtyfrag
sed -n '1,120p' README.md

assets/write-up.md 是技术细节,exp.c 是 PoC。生产环境里不要编译运行 PoC;需要验证时,推荐隔离虚拟机或授权靶场。

  1. 看当前内核和相关模块。
uname -a
lsmod | grep -E '^(esp4|esp6|rxrpc)\b' || true

如果业务依赖 IPsec、RxRPC、AFS 相关能力,先确认影响,再做模块禁用。别在不了解业务的机器上直接改内核模块策略。

  1. 按 README 做临时缓解。
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

这会阻止相关模块加载,可能影响 IPsec、RxRPC 或依赖这些模块的业务。更稳妥的做法是先在测试机验证,再批量下发。

  1. 等发行版内核更新。
# Debian / Ubuntu
sudo apt update
sudo apt full-upgrade

# RHEL / Fedora / CentOS Stream
sudo dnf update kernel

更新后重启,再确认运行中的内核版本。

往期推荐 📚

anything-analyzer:AI抓包分析器

让 JADX 接上 AI

Copy Fail:一个几乎影响所有主流 Linux 发行版的提权漏洞

欢迎关注“攻防录”✨


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:攻防录 攻防路 攻防路《Linux 新提权漏洞 DirtyFrag》

评论:0   参与:  0