网络安全预警通报
2026年第2期
网络与计算中心 2026年5月9日
【预警类型】 高危预警
【预警内容】 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 cac2661c53f3(2017-01-17)起至最新主线
RxRPC:内核 commit 2dc334f1a63a(2023-06)起至最新主线
Ubuntu 24.04.4(6.17.0-23-generic)
RHEL 10.1 / CentOS Stream 10 / AlmaLinux 10(6.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=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 模块做禁用处置。
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=y,rxrpc 已编译进内核,无法通过模块黑名单禁用,应优先升级修复内核或切换不包含该功能的内核。
如果没有看到 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,例如 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
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
预期结果是加载失败。
内容 | 李昌
编辑 | 王彬
审核 | 陈兰 赵长欣