安全公告

安全公告
位置: 首页 > 安全公告 > 正文

【2026年第2期】Linux Dirty Frag 本地权限提升漏洞

时间:2026-05-09   点击数:

网络安全预警通报

2026年第2

网络与计算中心 202659

【预警类型】 高危预警

预警内容Linux Dirty Frag 本地权限提升漏洞

一、预警描述

Linux 内核是各类操作系统的核心组件,负责管理硬件资源和系统运行。该漏洞涉及 Linux 内核中的 xfrm-ESP RxRPC 组件,攻击者利用 Linux 内核的页缓存机制,在处理包含分片(Fragments)的套接字缓冲区(sk_buff)时,可通过 splice()、sendfile()或 MSG_SPLICE_PAGES 附加的管道页面,让接收路径在解密时直接对非内核私有页面进行原地(in-place)写入覆盖。无需特殊权限,普通本地用户即可利用该漏洞获取系统最高级  Root 权限,实现对服务器的完全控制。

二、漏洞危害

攻击者利用 splice 系统调用配合 xfrm-ESP RxRPC 协议栈的逻辑缺陷,可在无需竞争条件的情况下稳定篡改只读文件的页面缓存,从而获取系统的 Root 权限,从而完全控制受影响的系统。

三、受影响范围

xfrm-ESP:内核 commit cac2661c53f32017-01-17)起至最新主线  

RxRPC:内核 commit 2dc334f1a63a2023-06)起至最新主线  

Ubuntu 24.04.4(6.17.0-23-generic)  

RHEL 10.1 / CentOS Stream 10 / AlmaLinux 106.12 系列)  

Fedora 44(6.19.14-300.fc44)  

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)

四、处置建议

目前官方尚未发布正式补丁,建议先进行临时缓解措施。  

临时缓解措施:

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

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

判断方式:

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

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

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

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

如果没有看到 CONFIG_AF_RXRPC,或结果为 CONFIG_AF_RXRPC is not set,说明当前内核未启用 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

【注意】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=yrxrpc 已编译进内核,无法通过模块黑名单禁用,应优先升级修复内核或切换不包含该功能的内核。

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

 

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

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

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,例如 strongSwanlibreswan、站点 VPN、主机到主机 IPsec

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

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

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

sudosh -c "printf 'install esp4 /bin/false

install esp6 /bin/false

install rxrpc /bin/false

' > /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

预期结果是加载失败。

内容 | 李昌       

编辑 | 王彬       

审核 | 陈兰 赵长欣

 

信息化在线服务

24小时服务电话

0755-26033737

办公地点 深圳市南山区桃源街道深圳大学城哈尔滨工业大学校区T4教学楼307室

Copyright ©  哈尔滨工业大学(深圳)网络与计算中心 版权所有