DirtyFrag漏洞细节及PoC已公开

admin 2026-05-12 05:01:01 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 微步在线披露Linux内核本地权限提升漏洞CVE-2026-43284(代号DirtyFrag),攻击者可通过splice()将只读文件页面注入网络包碎片,利用内核网络协议路径的原地加解密操作污染pagecache实现提权。漏洞影响UOS、RockyLinux等多款操作系统,并提供临时缓解方案:检查内核配置禁用ESP/RxRPC模块、设置user.maxusernamespaces=0、验证模块卸载状态。建议优先升级内核修复漏洞。 综合评分: 85 文章分类: 漏洞分析,漏洞预警,解决方案,应急响应,Linux安全


cover_image

DirtyFrag漏洞细节及PoC已公开

微步在线

2026年5月8日 11:40 北京

在小说阅读器读本章

去阅读

一、 漏洞概述

微步情报局监测到,Linux Kernel被披露存在本地权限提升漏洞( CVE-2026-43284),代号 “DirtyFrag”。

DirtyFrag是一类 Linux 本地提权漏洞,核心问题是:攻击者可以把只读文件的 page cache页面通过 splice() 放进网络包的sk_buff frag中,随后内核某些网络协议路径在这个frag上执行“原地加解密”操作,导致本不该被修改的只读文件缓存页被写入。磁盘文件没有被直接改写,但后续读取、执行该文件时会看到被污染的page cache内容,从而实现提权。

它和Dirty Pipe、Copy Fail属于相近问题类型,都是围绕page cache、零拷贝路径和内核写入边界假设失效展开。不同点在于Dirty Pipe主要污染pipe buffer,而DirtyFrag污染的是 struct sk_buff的frag。

目前该漏洞细节及 PoC 已公开,微步情报局对部分操作系统进行了验证,UOS、麒麟等信创系统,以及Rocy Linux、Ubuntu等非信创系统均受影响,详细结果如下。

OneSEC可以关注提权相关告警(规则ID:9030):

二、 已验证操作系统及版本

| | | | | | — | — | — | — | | 操作系统 | 版本 | 成功与否 | 截图 | | UOS | 1060 | 否 | | | UOS | 1070 | 是 | | | Rocky Linux | 10.1 | 是 | | | Ubuntu | V22.04 | 是 | | | AlmaLinux | 8.10 | 是 | |

三、 临时缓解措施

1. 判断可用的临时缓解方式

先根据内核配置确认相关功能是否可以通过模块方式禁用:

grep -E 'CONFIG_INET_ESP|CONFIG_INET6_ESP|CONFIG_AF_RXRPC' /boot/config-$(uname -r)

判断方式:

● CONFIG_INET_ESP=m / CONFIG_INET6_ESP=m:esp4 / esp6 以模块形式存在,可以通过 modprobe 黑名单临时禁用,并尝试卸载当前已加载模块。

● CONFIG_AF_RXRPC=m:rxrpc 以模块形式存在,可以通过 modprobe 黑名单临时禁用,并尝试卸载当前已加载模块。

● CONFIG_INET_ESP=y / CONFIG_INET6_ESP=y:ESP 功能编译进内核,无法通过 rmmod 或 modprobe 黑名单完全禁用,只能通过升级修复内核、切换不包含该功能的内核,或禁用 user namespace 做辅助降风险。

● CONFIG_AF_RXRPC=y:RxRPC 编译进内核,无法通过卸载模块方式禁用,应优先升级修复内核或切换不包含该功能的内核。

● 如果没有看到 CONFIG_AF_RXRPC,或结果为 CONFIG_AF_RXRPC is not set,说明当前内核未启用 RxRPC。很多发行版默认并不会编译 RxRPC,这种情况下无需针对 rxrpc 模块做禁用处置。

2. 排查 user namespace 状态

ESP 场景

当第 1 节输出 CONFIG_INET_ESP=y 或 CONFIG_INET6_ESP=y,且短期无法升级或切换内核时,可以检查系统是否允许创建 user namespace:

cat /proc/sys/user/max_user_namespaces

如果输出为 0,说明系统已经禁止创建 user namespace,这可以降低 DirtyFrag xfrm-ESP 变体被普通本地用户触发的风险。

如果输出大于 0,且业务确认不依赖 user namespace,可以考虑将其设置为 0 作为 ESP 内建场景下的辅助降风险措施。

如业务确认不依赖 user namespace,可以临时禁用:

sudo sysctl -w user.max_user_namespaces=0

如需重启后保持生效,可以写入独立 sysctl 配置:

echo'user.max_user_namespaces = 0'|sudotee /etc/sysctl.d/99-disable-userns.conf
sudo sysctl --system

ESP 场景下需要注意:

● user.max_user_namespaces=0 只能作为 ESP 变体的辅助缓解,不能替代升级修复内核。

● 如果攻击者已经拥有真实 CAP_NET_ADMIN,或运行在具备相关能力的特权容器 / 特权服务中,禁用 user namespace 不能阻断这类路径。

RxRPC 场景

RxRPC 路径不依赖 user namespace。即使 user.max_user_namespaces=0,如果当前内核启用了 RxRPC,普通用户仍可能通过 add_key(“rxrpc”, …)、socket(AF_RXRPC)、splice() 等接口触发相关路径。

因此:

● 如果第 1 节输出 CONFIG_AF_RXRPC=m,应按第 3 节禁用 rxrpc 模块。

● 如果第 1 节输出 CONFIG_AF_RXRPC=y,rxrpc 已编译进内核,无法通过模块黑名单禁用,应优先升级修复内核或切换不包含该功能的内核。

● 如果没有看到 CONFIG_AF_RXRPC,或结果为 CONFIG_AF_RXRPC is not set,说明当前内核未启用 RxRPC,无需针对 rxrpc 做禁用处置。

3. 评估影响并临时禁用相关模块

只有第 1 节检查结果中出现以下输出时,才适用本节的模块禁用措施:

● CONFIG_INET_ESP=m

● CONFIG_INET6_ESP=m

● CONFIG_AF_RXRPC=m

这些输出表示对应功能以模块形式存在,可以通过 modprobe 黑名单阻止后续加载,并尝试卸载当前已加载模块。

如果输出为 =y,说明对应功能已编译进内核,本节的 modprobe 黑名单和 rmmod 不能完成禁用;应优先升级修复内核、切换不包含该功能的内核,或按第 2 节对 ESP 变体进行辅助降风险。

如果没有看到 CONFIG_AF_RXRPC,或结果为 CONFIG_AF_RXRPC is not set,说明当前内核未启用 RxRPC,无需针对 rxrpc 执行本节禁用命令。

禁用前需要评估影响:

● esp4 / esp6:影响 IPsec ESP,例如 strongSwan、libreswan、站点 VPN、主机到主机 IPsec。

● rxrpc:影响 RxRPC/kAFS,常见于 AFS 相关场景。

● user.max_user_namespaces=0:可能影响 rootless Docker、Podman、LXC、沙箱应用、部分 CI 构建环境。

如果业务不依赖这些功能,可以写入 modprobe 黑名单,并卸载当前已加载模块:

sudosh -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

4. 验证缓解是否生效

再次检查模块是否仍然加载:

lsmod |grep -E '^(esp4|esp6|rxrpc)'

如果没有输出,说明当前运行环境中这些模块未加载。

也可以测试是否还能手动加载:

sudo modprobe esp4
sudo modprobe esp6
sudo modprobe rxrpc

预期结果是加载失败。


免责声明:

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

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

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

本文转载自:微步在线 《DirtyFrag漏洞细节及PoC已公开》

评论:0   参与:  0