就在大家以为Linux内核的“脏页”系列漏洞如Dirty Pipe已成往事时一个名为“Dirty Frag”的新成员再次以其惊人的破坏力敲响了警钟。2026年5月8日韩国安全研究员Hyunwoo Kim公开披露了这一本地提权漏洞链并附带了PoC代码。由于披露禁令被意外打破各厂家官方补丁尚未全面发布导致主流Linux发行版都面临着“裸奔”的风险。Dirty Frag并非单一漏洞而是巧妙地串联了两个独立的内核缺陷允许本地普通用户通过一条简单的命令稳定、高效地将权限提升至Root权限且不会导致系统崩溃。它的出现再次提醒我们即使是久经考验的Linux内核也可能在看似无害的“零拷贝”优化中埋下深层的安全隐患。本文将带你深入剖析Dirty Frag漏洞的技术原理、危害评估并提供一份主流 Linux平台应急指南希望能够帮助大家从容应对Dirty Frag漏洞的冲击快速加固系统抵御潜在威胁。一、漏洞全景Dirty Frag 的前世今生1.1 漏洞背景与命名Dirty Frag 漏洞链由两个独立的 CVE 组成•CVE-2026-43284涉及 IPsec ESP (Encapsulating Security Payload) 模块。•CVE-2026-43500涉及 RxRPC (Remote Procedure Call) 模块。这两个漏洞的组合利用使得攻击者能够对内核页缓存进行可控的4字节写入从而实现本地权限提升。由于其利用方式与Dirty Pipe 家族在页缓存操作上的相似性故得名“Dirty Frag”。1.2 关联漏洞家族Dirty Fra 属于Dirty Pipe漏洞家族的延续它利用了内核零拷贝路径上的页缓存写入缺陷。与之前的Copy Fail漏洞利用路径完全不同这意味着即使你的系统已经修复了Copy Fail依然会受到Dirty Frag的攻击。这充分说明了内核安全领域的复杂性和挑战性。1.3 当前状态截至 2026 年5月 10日主流 Linux 发行版包括但不限于Ubuntu、RHEL、Debian、OpenEuler、UOS、KylinOS等中已有厂商发布了修复补丁大家可以到各自官网查询最新消息已推出官网补丁的请使用官方补丁进行修复。还未推出官方补丁的我们必须依靠临时缓解措施来保护系统。二、技术原理页缓存的“零拷贝”陷阱Dirty Frag的核心在于利用Linux内核的页缓存机制。当系统读取文件时内核会将其缓存在内存中以加速访问。攻击者通过构造特定的网络数据包利用零拷贝机制将自己仅有读权限的文件页缓存映射到内核网络缓冲区中并最终实现对只读页的写入。2.1 漏洞链组合Dirty Frag由两个互补的漏洞组成实现了对所有主流发行版的“全覆盖”•xfrm-ESP 页缓存写入漏洞 (CVE-2026-43284)该漏洞自 2017年1月引入内核影响范围极广。攻击者利用 IPsec ESP 模块的解密流程可以对只读页执行原地改写。但其利用需要创建非特权用户命名空间这在Ubuntu等开启了 AppArmor 严格模式的系统中会被拦截。•RxRPC 页缓存写入漏洞 (CVE-2026-43500)该漏洞于2023年6月引入利用RxRPC网络模块的缺陷。其优势在于无需用户命名空间权限即可触发但大多数发行版默认不加载该模块。然而Ubuntu 默认加载了rxrpc模块恰好弥补了前一个漏洞的短板使得攻击链在Ubuntu上更为顺畅。2.2 利用逻辑通过串联这两个漏洞攻击者可以篡改/etc/passwd或SUID二进制文件等关键系统文件的页缓存。由于内核在解密流程中会原地改写这些只读页攻击者便能成功写入恶意数据从而创建一个拥有Root权限的新用户完成提权。整个过程稳定、高效且不依赖竞争条件。三、危害评估一行命令的“提权”噩梦•危害等级高危。本地普通用户可直接获取Root权限对系统安全构成严重威胁。•利用难度极低。公开的PoC代码使得攻击者只需执行一条命令即可一键获得 Root Shell。•稳定性极高。Dirty Frag是一个纯逻辑漏洞不依赖竞争条件首次尝试即可成功且失败不会导致内核崩溃。•影响范围2017年以后主流 Linux 发行版几乎都受到影响包括但不限于 Ubuntu 24.04.4、RHEL 10.1、CentOS Stream 10、AlmaLinux 10、Fedora 44、openSUSE Tumbleweed 等内核版本最高波及 7.x。具体受影响的内核版本范围请参考各发行版官方安全公告。四、应急指南主流Linux平台临时解决方案在官方补丁发布之前我们需要构建“双重防线”既要禁用高危模块又要限制非特权用户创建User Namespace。以下措施均需Root权限执行。4.1 防线一禁用高危内核模块阻断 CVE-2026-43500 及辅助路径这是最基础的防御措施适用于所有发行版。通过将esp4、esp6和rxrpc模块加入黑名单阻止它们被加载。sudo sh -c printf install esp4 /bin/false\ninstall esp6 /bin/false\ninstall rxrpc /bin/false\n /etc/modprobe.d/dirtyfrag.conf; rmmod esp4 esp6 rxrpc 2/dev/null; true说明•printf命令将模块禁用规则写入/etc/modprobe.d/dirtyfrag.conf确保重启后模块不会被加载。•rmmod命令尝试卸载当前已加载的模块。2/dev/null || true用于抑制错误输出即使模块未加载也不会报错。4.2 防线二限制非特权用户创建 User Namespace阻断 CVE-2026-43284这是针对xfrm-ESP漏洞利用链的关键阻断措施。通过设置内核参数禁止普通用户调用系统调用创建新的用户命名空间。针对 Debian / Ubuntu / UOS / Deepin# 1. 立即生效sudo sysctl -w kernel.unprivileged_userns_clone0# 2. 永久生效 (写入配置文件)echo kernel.unprivileged_userns_clone 0 | sudo tee /etc/sysctl.d/99-dirtyfrag-userns.conf说明•kernel.unprivileged_userns_clone参数控制非特权用户是否可以创建用户命名空间。设置为0则禁止。•/etc/sysctl.d/目录下的配置文件会在系统启动时自动加载实现永久生效。针对 RHEL / CentOS / Rocky Linux / AlmaLinux / Fedora# 1. 立即生效sudo sysctl -w user.max_user_namespaces0# 2. 永久生效 (写入配置文件)echo user.max_user_namespaces 0 | sudo tee /etc/sysctl.d/99-dirtyfrag-userns.conf说明•user.max_user_namespaces参数限制每个用户UID可以创建的用户命名空间User Namespace的最大数量。设置为0则禁止。•/etc/sysctl.d/目录下的配置文件会在系统启动时自动加载实现永久生效。4.3 各平台专项说明•RHEL/CentOS/Rocky Linux/AlmaLinux 系列执行上述两条防线命令。对于内核静态编译了受影响模块的系统rmmod命令可能无效但modprobe.d配置依然能阻止模块在下次重启后加载。•Ubuntu/Debian 系列执行上述两条防线命令。Ubuntu 默认加载rxrpc模块且允许非特权用户创建命名空间因此双重防御尤为重要。•Arch Linux执行上述两条防线命令。Arch 用户需注意滚动更新可能尚未包含修复补丁临时禁用是最佳选择。• OpenSUSE Tumbleweed执行上述两条防线命令。OpenSUSE Tumbleweed 已确认受影响。•UOS/Deepin 系列执行上述两条防线命令。UOS 和 Deepin 基于 Debian其内核版本通常在受影响范围内。•KylinOS麒麟操作系统执行上述两条防线命令。麒麟系统通常用于关键领域安全要求极高建议在操作前与业务部门确认是否依赖 IPsec VPN 等功能。• OpenEuler执行上述两条防线命令。OpenEuler 是华为开源的企业级 Linux 发行版其内核版本通常在受影响范围内。五、检测与一键修复脚本你的“安全管家”为了方便大家快速排查和修复我整理了一个升级版的检测与修复脚本。该脚本不仅检查高危模块加载状态还会检查User Namespace的配置情况并提供一键修复选项确保双重防线无遗漏。本文提供的所有信息和脚本仅供参考和学习。在生产环境中执行任何操作前请务必进行充分的测试和评估并确保您已了解所有潜在风险。因使用本文内容而导致的任何损失本文作者及平台概不负责。#!/bin/bash # Dirty Frag 漏洞检测与修复脚本 (CVE-2026-43284, CVE-2026-43500) # 适用于所有主流Linux发行版包括 RHEL/Rocky/CentOS, Debian/Ubuntu 等 # 颜色定义 RED\033[0;31m GREEN\033[0;32m YELLOW\033[1;33m BLUE\033[0;34m NC\033[0m # No Color # 检查是否为root用户 if [ $(id -u) -ne 0 ]; then echo -e ${RED}错误请使用root权限或sudo运行此脚本${NC} exit 1 fi echo -e ${BLUE}${NC} echo -e ${BLUE} Dirty Frag 漏洞检测与修复工具 ${NC} echo -e ${BLUE} CVE-2026-43284 / CVE-2026-43500 ${NC} echo -e ${BLUE} 微信公众号运维技术小记 ${NC} echo -e ${BLUE}${NC} echo # --- 1. 检查模块加载状态 --- echo -e ${YELLOW}[1/3] 检查高危内核模块加载状态...${NC} MODULES_LOADED0 MODULES_TO_CHECKesp4 esp6 rxrpc for module in $MODULES_TO_CHECK; do if lsmod | grep -q ^$module; then echo -e ${RED}[警告] 模块 $module 已加载系统存在风险${NC} MODULES_LOADED1 else echo -e ${GREEN}[安全] 模块 $module 未加载${NC} fi done # --- 2. 检查User Namespace配置 --- echo echo -e ${YELLOW}[2/3] 检查User Namespace权限配置...${NC} # 判断系统类型采用不同的检查策略 if [ -f /etc/debian_version ] || [ -f /etc/lsb-release ]; then # Debian/Ubuntu 系 UNPRIV_USERNS$(sysctl -n kernel.unprivileged_userns_clone 2/dev/null) if [ -z $UNPRIV_USERNS ]; then echo -e ${YELLOW}[注意] 系统未设置 kernel.unprivileged_userns_clone 参数${NC} USERNS_RISK1 elif [ $UNPRIV_USERNS -eq 1 ]; then echo -e ${RED}[警告] 允许普通用户创建User Namespace系统存在风险${NC} USERNS_RISK1 else echo -e ${GREEN}[安全] 已禁止普通用户创建User Namespace${NC} USERNS_RISK0 fi else # RHEL/CentOS/Rocky/Fedora 系 # 在这些系统中通常通过限制 user.max_user_namespaces 来达到类似效果 MAX_USERNS$(sysctl -n user.max_user_namespaces 2/dev/null) if [ -z $MAX_USERNS ] || [ $MAX_USERNS -gt 0 ]; then echo -e ${YELLOW}[注意] 未限制用户命名空间数量建议加固${NC} USERNS_RISK1 else echo -e ${GREEN}[安全] 用户命名空间已受限${NC} USERNS_RISK0 fi fi # --- 3. 提供修复选项 --- echo echo -e ${YELLOW}[3/3] 风险评估与修复建议${NC} if [ $MODULES_LOADED -eq 1 ] || [ $USERNS_RISK -eq 1 ]; then echo -e ${RED}系统存在Dirty Frag漏洞风险建议立即修复${NC} echo read -p 是否执行自动修复(y/n): -n 1 -r echo if [[ $REPLY ~ ^[Yy]$ ]]; then echo echo -e ${BLUE}正在执行修复操作...${NC} # 修复1: 禁用高危模块 if [ $MODULES_LOADED -eq 1 ]; then echo -e ${YELLOW}正在禁用高危内核模块...${NC} sh -c printf install esp4 /bin/false\ninstall esp6 /bin/false\ninstall rxrpc /bin/false\n /etc/modprobe.d/dirtyfrag.conf rmmod esp4 esp6 rxrpc 2/dev/null || true echo -e ${GREEN}✓ 高危模块已禁用并加入黑名单${NC} else # 即使模块未加载也确保黑名单文件存在防止未来被加载 if [ ! -f /etc/modprobe.d/dirtyfrag.conf ]; then echo -e ${YELLOW}模块未加载但为确保安全正在创建模块黑名单配置...${NC} sh -c printf install esp4 /bin/false\ninstall esp6 /bin/false\ninstall rxrpc /bin/false\n /etc/modprobe.d/dirtyfrag.conf echo -e ${GREEN}✓ 模块黑名单配置已创建${NC} else echo -e ${GREEN}✓ 模块黑名单已存在无需操作${NC} fi fi # 修复2: 限制User Namespace if [ $USERNS_RISK -eq 1 ]; then echo -e ${YELLOW}正在限制非特权用户创建User Namespace...${NC} if [ -f /etc/debian_version ] || [ -f /etc/lsb-release ]; then # Debian/Ubuntu 系 sysctl -w kernel.unprivileged_userns_clone0 2/dev/null || true if [ ! -f /etc/sysctl.d/99-dirtyfrag-userns.conf ]; then echo kernel.unprivileged_userns_clone 0 /etc/sysctl.d/99-dirtyfrag-userns.conf fi else # RHEL/CentOS/Rocky/Fedora 系 sysctl -w user.max_user_namespaces0 if [ ! -f /etc/sysctl.d/99-dirtyfrag-userns.conf ]; then echo user.max_user_namespaces 0 /etc/sysctl.d/99-dirtyfrag-userns.conf fi fi echo -e ${GREEN}✓ User Namespace限制已生效${NC} else echo -e ${GREEN}✓ User Namespace已受限无需操作${NC} fi echo echo -e ${GREEN}${NC} echo -e ${GREEN} 修复完成系统已加固 ${NC} echo -e ${GREEN} 微信公众号运维技术小记 ${NC} echo -e ${GREEN}${NC} echo echo -e ${YELLOW}注意${NC} echo 1. 禁用模块会影响IPsec VPN和AFS文件系统功能 echo 2. 限制User Namespace可能影响部分容器应用 echo 3. 请重启系统以确保所有更改生效 else echo -e ${YELLOW}修复已取消请手动执行以下命令${NC} echo echo # 1. 禁用高危模块 echo sudo sh -c \printf install esp4 /bin/false\ninstall esp6 /bin/false\ninstall rxrpc /bin/false\n /etc/modprobe.d/dirtyfrag.conf; rmmod esp4 esp6 rxrpc 2/dev/null; true\ echo echo # 2. 限制非特权用户创建User Namespace if [ -f /etc/debian_version ] || [ -f /etc/lsb-release ]; then echo sudo sysctl -w kernel.unprivileged_userns_clone0 echo echo kernel.unprivileged_userns_clone 0 | sudo tee /etc/sysctl.d/99-dirtyfrag-userns.conf else echo sudo sysctl -w user.max_user_namespaces0 echo echo user.max_user_namespaces 0 | sudo tee /etc/sysctl.d/99-dirtyfrag-userns.conf fi fi else echo -e ${GREEN}系统已进行加固风险已消除。${NC} fi echo echo -e ${BLUE} 检查与修复完成 ${NC}请在linux系统上编辑此脚本取名例如fix_dirtyfrag.sh然后x权限。UOS系统上执行加sudo bash。脚本网盘链接https://pan.baidu.com/s/17tEIZeVSi9fOyopET3jsow?pwdciwrhttps://pan.quark.cn/s/f6911f396a1a 提取码kgLA脚本我在Rocky Linux 9.7、Ubuntu 24.03 sp1、UOS V20 1070上完成验证。六、写在最后安全无止境加固进行时从Dirty Pipe到Copy Fail再到如今的Dirty FragLinux内核的页缓存机制似乎成了一个“漏洞富矿”。这并非意味着Linux不安全而是揭示了操作系统在追求极致性能时所面临的巨大安全挑战。对于运维人员和安全工程师来说这无疑是一个必须修复的高危漏洞。但危机也是机遇它促使我们重新审视自身系统的安全基线加固每一道防线。记住没有绝对安全的系统只有不断进化的防御。希望本文能为你提供一份及时、准确、有效的应急指南。如果你在修复过程中遇到任何问题或者有更专业的见解欢迎在评论区留言讨论。让我们一起为Linux 的安全生态贡献一份力量参考资料• [1] https://dirtyfrag.io/• [2] Red Hat Security Advisory for CVE-2026-43284• [3] Debian Security Tracker for CVE-2026-43284• [4] https://almalinux.org/blog/2026-05-07-dirty-frag/• [5] Kernel.org Git Commit for CVE-2026-43284 Patch
Linux内核Dirty Frag漏洞深度解析与主流平台应急指南,附一键检测处置脚本
发布时间:2026/5/18 19:29:26
就在大家以为Linux内核的“脏页”系列漏洞如Dirty Pipe已成往事时一个名为“Dirty Frag”的新成员再次以其惊人的破坏力敲响了警钟。2026年5月8日韩国安全研究员Hyunwoo Kim公开披露了这一本地提权漏洞链并附带了PoC代码。由于披露禁令被意外打破各厂家官方补丁尚未全面发布导致主流Linux发行版都面临着“裸奔”的风险。Dirty Frag并非单一漏洞而是巧妙地串联了两个独立的内核缺陷允许本地普通用户通过一条简单的命令稳定、高效地将权限提升至Root权限且不会导致系统崩溃。它的出现再次提醒我们即使是久经考验的Linux内核也可能在看似无害的“零拷贝”优化中埋下深层的安全隐患。本文将带你深入剖析Dirty Frag漏洞的技术原理、危害评估并提供一份主流 Linux平台应急指南希望能够帮助大家从容应对Dirty Frag漏洞的冲击快速加固系统抵御潜在威胁。一、漏洞全景Dirty Frag 的前世今生1.1 漏洞背景与命名Dirty Frag 漏洞链由两个独立的 CVE 组成•CVE-2026-43284涉及 IPsec ESP (Encapsulating Security Payload) 模块。•CVE-2026-43500涉及 RxRPC (Remote Procedure Call) 模块。这两个漏洞的组合利用使得攻击者能够对内核页缓存进行可控的4字节写入从而实现本地权限提升。由于其利用方式与Dirty Pipe 家族在页缓存操作上的相似性故得名“Dirty Frag”。1.2 关联漏洞家族Dirty Fra 属于Dirty Pipe漏洞家族的延续它利用了内核零拷贝路径上的页缓存写入缺陷。与之前的Copy Fail漏洞利用路径完全不同这意味着即使你的系统已经修复了Copy Fail依然会受到Dirty Frag的攻击。这充分说明了内核安全领域的复杂性和挑战性。1.3 当前状态截至 2026 年5月 10日主流 Linux 发行版包括但不限于Ubuntu、RHEL、Debian、OpenEuler、UOS、KylinOS等中已有厂商发布了修复补丁大家可以到各自官网查询最新消息已推出官网补丁的请使用官方补丁进行修复。还未推出官方补丁的我们必须依靠临时缓解措施来保护系统。二、技术原理页缓存的“零拷贝”陷阱Dirty Frag的核心在于利用Linux内核的页缓存机制。当系统读取文件时内核会将其缓存在内存中以加速访问。攻击者通过构造特定的网络数据包利用零拷贝机制将自己仅有读权限的文件页缓存映射到内核网络缓冲区中并最终实现对只读页的写入。2.1 漏洞链组合Dirty Frag由两个互补的漏洞组成实现了对所有主流发行版的“全覆盖”•xfrm-ESP 页缓存写入漏洞 (CVE-2026-43284)该漏洞自 2017年1月引入内核影响范围极广。攻击者利用 IPsec ESP 模块的解密流程可以对只读页执行原地改写。但其利用需要创建非特权用户命名空间这在Ubuntu等开启了 AppArmor 严格模式的系统中会被拦截。•RxRPC 页缓存写入漏洞 (CVE-2026-43500)该漏洞于2023年6月引入利用RxRPC网络模块的缺陷。其优势在于无需用户命名空间权限即可触发但大多数发行版默认不加载该模块。然而Ubuntu 默认加载了rxrpc模块恰好弥补了前一个漏洞的短板使得攻击链在Ubuntu上更为顺畅。2.2 利用逻辑通过串联这两个漏洞攻击者可以篡改/etc/passwd或SUID二进制文件等关键系统文件的页缓存。由于内核在解密流程中会原地改写这些只读页攻击者便能成功写入恶意数据从而创建一个拥有Root权限的新用户完成提权。整个过程稳定、高效且不依赖竞争条件。三、危害评估一行命令的“提权”噩梦•危害等级高危。本地普通用户可直接获取Root权限对系统安全构成严重威胁。•利用难度极低。公开的PoC代码使得攻击者只需执行一条命令即可一键获得 Root Shell。•稳定性极高。Dirty Frag是一个纯逻辑漏洞不依赖竞争条件首次尝试即可成功且失败不会导致内核崩溃。•影响范围2017年以后主流 Linux 发行版几乎都受到影响包括但不限于 Ubuntu 24.04.4、RHEL 10.1、CentOS Stream 10、AlmaLinux 10、Fedora 44、openSUSE Tumbleweed 等内核版本最高波及 7.x。具体受影响的内核版本范围请参考各发行版官方安全公告。四、应急指南主流Linux平台临时解决方案在官方补丁发布之前我们需要构建“双重防线”既要禁用高危模块又要限制非特权用户创建User Namespace。以下措施均需Root权限执行。4.1 防线一禁用高危内核模块阻断 CVE-2026-43500 及辅助路径这是最基础的防御措施适用于所有发行版。通过将esp4、esp6和rxrpc模块加入黑名单阻止它们被加载。sudo sh -c printf install esp4 /bin/false\ninstall esp6 /bin/false\ninstall rxrpc /bin/false\n /etc/modprobe.d/dirtyfrag.conf; rmmod esp4 esp6 rxrpc 2/dev/null; true说明•printf命令将模块禁用规则写入/etc/modprobe.d/dirtyfrag.conf确保重启后模块不会被加载。•rmmod命令尝试卸载当前已加载的模块。2/dev/null || true用于抑制错误输出即使模块未加载也不会报错。4.2 防线二限制非特权用户创建 User Namespace阻断 CVE-2026-43284这是针对xfrm-ESP漏洞利用链的关键阻断措施。通过设置内核参数禁止普通用户调用系统调用创建新的用户命名空间。针对 Debian / Ubuntu / UOS / Deepin# 1. 立即生效sudo sysctl -w kernel.unprivileged_userns_clone0# 2. 永久生效 (写入配置文件)echo kernel.unprivileged_userns_clone 0 | sudo tee /etc/sysctl.d/99-dirtyfrag-userns.conf说明•kernel.unprivileged_userns_clone参数控制非特权用户是否可以创建用户命名空间。设置为0则禁止。•/etc/sysctl.d/目录下的配置文件会在系统启动时自动加载实现永久生效。针对 RHEL / CentOS / Rocky Linux / AlmaLinux / Fedora# 1. 立即生效sudo sysctl -w user.max_user_namespaces0# 2. 永久生效 (写入配置文件)echo user.max_user_namespaces 0 | sudo tee /etc/sysctl.d/99-dirtyfrag-userns.conf说明•user.max_user_namespaces参数限制每个用户UID可以创建的用户命名空间User Namespace的最大数量。设置为0则禁止。•/etc/sysctl.d/目录下的配置文件会在系统启动时自动加载实现永久生效。4.3 各平台专项说明•RHEL/CentOS/Rocky Linux/AlmaLinux 系列执行上述两条防线命令。对于内核静态编译了受影响模块的系统rmmod命令可能无效但modprobe.d配置依然能阻止模块在下次重启后加载。•Ubuntu/Debian 系列执行上述两条防线命令。Ubuntu 默认加载rxrpc模块且允许非特权用户创建命名空间因此双重防御尤为重要。•Arch Linux执行上述两条防线命令。Arch 用户需注意滚动更新可能尚未包含修复补丁临时禁用是最佳选择。• OpenSUSE Tumbleweed执行上述两条防线命令。OpenSUSE Tumbleweed 已确认受影响。•UOS/Deepin 系列执行上述两条防线命令。UOS 和 Deepin 基于 Debian其内核版本通常在受影响范围内。•KylinOS麒麟操作系统执行上述两条防线命令。麒麟系统通常用于关键领域安全要求极高建议在操作前与业务部门确认是否依赖 IPsec VPN 等功能。• OpenEuler执行上述两条防线命令。OpenEuler 是华为开源的企业级 Linux 发行版其内核版本通常在受影响范围内。五、检测与一键修复脚本你的“安全管家”为了方便大家快速排查和修复我整理了一个升级版的检测与修复脚本。该脚本不仅检查高危模块加载状态还会检查User Namespace的配置情况并提供一键修复选项确保双重防线无遗漏。本文提供的所有信息和脚本仅供参考和学习。在生产环境中执行任何操作前请务必进行充分的测试和评估并确保您已了解所有潜在风险。因使用本文内容而导致的任何损失本文作者及平台概不负责。#!/bin/bash # Dirty Frag 漏洞检测与修复脚本 (CVE-2026-43284, CVE-2026-43500) # 适用于所有主流Linux发行版包括 RHEL/Rocky/CentOS, Debian/Ubuntu 等 # 颜色定义 RED\033[0;31m GREEN\033[0;32m YELLOW\033[1;33m BLUE\033[0;34m NC\033[0m # No Color # 检查是否为root用户 if [ $(id -u) -ne 0 ]; then echo -e ${RED}错误请使用root权限或sudo运行此脚本${NC} exit 1 fi echo -e ${BLUE}${NC} echo -e ${BLUE} Dirty Frag 漏洞检测与修复工具 ${NC} echo -e ${BLUE} CVE-2026-43284 / CVE-2026-43500 ${NC} echo -e ${BLUE} 微信公众号运维技术小记 ${NC} echo -e ${BLUE}${NC} echo # --- 1. 检查模块加载状态 --- echo -e ${YELLOW}[1/3] 检查高危内核模块加载状态...${NC} MODULES_LOADED0 MODULES_TO_CHECKesp4 esp6 rxrpc for module in $MODULES_TO_CHECK; do if lsmod | grep -q ^$module; then echo -e ${RED}[警告] 模块 $module 已加载系统存在风险${NC} MODULES_LOADED1 else echo -e ${GREEN}[安全] 模块 $module 未加载${NC} fi done # --- 2. 检查User Namespace配置 --- echo echo -e ${YELLOW}[2/3] 检查User Namespace权限配置...${NC} # 判断系统类型采用不同的检查策略 if [ -f /etc/debian_version ] || [ -f /etc/lsb-release ]; then # Debian/Ubuntu 系 UNPRIV_USERNS$(sysctl -n kernel.unprivileged_userns_clone 2/dev/null) if [ -z $UNPRIV_USERNS ]; then echo -e ${YELLOW}[注意] 系统未设置 kernel.unprivileged_userns_clone 参数${NC} USERNS_RISK1 elif [ $UNPRIV_USERNS -eq 1 ]; then echo -e ${RED}[警告] 允许普通用户创建User Namespace系统存在风险${NC} USERNS_RISK1 else echo -e ${GREEN}[安全] 已禁止普通用户创建User Namespace${NC} USERNS_RISK0 fi else # RHEL/CentOS/Rocky/Fedora 系 # 在这些系统中通常通过限制 user.max_user_namespaces 来达到类似效果 MAX_USERNS$(sysctl -n user.max_user_namespaces 2/dev/null) if [ -z $MAX_USERNS ] || [ $MAX_USERNS -gt 0 ]; then echo -e ${YELLOW}[注意] 未限制用户命名空间数量建议加固${NC} USERNS_RISK1 else echo -e ${GREEN}[安全] 用户命名空间已受限${NC} USERNS_RISK0 fi fi # --- 3. 提供修复选项 --- echo echo -e ${YELLOW}[3/3] 风险评估与修复建议${NC} if [ $MODULES_LOADED -eq 1 ] || [ $USERNS_RISK -eq 1 ]; then echo -e ${RED}系统存在Dirty Frag漏洞风险建议立即修复${NC} echo read -p 是否执行自动修复(y/n): -n 1 -r echo if [[ $REPLY ~ ^[Yy]$ ]]; then echo echo -e ${BLUE}正在执行修复操作...${NC} # 修复1: 禁用高危模块 if [ $MODULES_LOADED -eq 1 ]; then echo -e ${YELLOW}正在禁用高危内核模块...${NC} sh -c printf install esp4 /bin/false\ninstall esp6 /bin/false\ninstall rxrpc /bin/false\n /etc/modprobe.d/dirtyfrag.conf rmmod esp4 esp6 rxrpc 2/dev/null || true echo -e ${GREEN}✓ 高危模块已禁用并加入黑名单${NC} else # 即使模块未加载也确保黑名单文件存在防止未来被加载 if [ ! -f /etc/modprobe.d/dirtyfrag.conf ]; then echo -e ${YELLOW}模块未加载但为确保安全正在创建模块黑名单配置...${NC} sh -c printf install esp4 /bin/false\ninstall esp6 /bin/false\ninstall rxrpc /bin/false\n /etc/modprobe.d/dirtyfrag.conf echo -e ${GREEN}✓ 模块黑名单配置已创建${NC} else echo -e ${GREEN}✓ 模块黑名单已存在无需操作${NC} fi fi # 修复2: 限制User Namespace if [ $USERNS_RISK -eq 1 ]; then echo -e ${YELLOW}正在限制非特权用户创建User Namespace...${NC} if [ -f /etc/debian_version ] || [ -f /etc/lsb-release ]; then # Debian/Ubuntu 系 sysctl -w kernel.unprivileged_userns_clone0 2/dev/null || true if [ ! -f /etc/sysctl.d/99-dirtyfrag-userns.conf ]; then echo kernel.unprivileged_userns_clone 0 /etc/sysctl.d/99-dirtyfrag-userns.conf fi else # RHEL/CentOS/Rocky/Fedora 系 sysctl -w user.max_user_namespaces0 if [ ! -f /etc/sysctl.d/99-dirtyfrag-userns.conf ]; then echo user.max_user_namespaces 0 /etc/sysctl.d/99-dirtyfrag-userns.conf fi fi echo -e ${GREEN}✓ User Namespace限制已生效${NC} else echo -e ${GREEN}✓ User Namespace已受限无需操作${NC} fi echo echo -e ${GREEN}${NC} echo -e ${GREEN} 修复完成系统已加固 ${NC} echo -e ${GREEN} 微信公众号运维技术小记 ${NC} echo -e ${GREEN}${NC} echo echo -e ${YELLOW}注意${NC} echo 1. 禁用模块会影响IPsec VPN和AFS文件系统功能 echo 2. 限制User Namespace可能影响部分容器应用 echo 3. 请重启系统以确保所有更改生效 else echo -e ${YELLOW}修复已取消请手动执行以下命令${NC} echo echo # 1. 禁用高危模块 echo sudo sh -c \printf install esp4 /bin/false\ninstall esp6 /bin/false\ninstall rxrpc /bin/false\n /etc/modprobe.d/dirtyfrag.conf; rmmod esp4 esp6 rxrpc 2/dev/null; true\ echo echo # 2. 限制非特权用户创建User Namespace if [ -f /etc/debian_version ] || [ -f /etc/lsb-release ]; then echo sudo sysctl -w kernel.unprivileged_userns_clone0 echo echo kernel.unprivileged_userns_clone 0 | sudo tee /etc/sysctl.d/99-dirtyfrag-userns.conf else echo sudo sysctl -w user.max_user_namespaces0 echo echo user.max_user_namespaces 0 | sudo tee /etc/sysctl.d/99-dirtyfrag-userns.conf fi fi else echo -e ${GREEN}系统已进行加固风险已消除。${NC} fi echo echo -e ${BLUE} 检查与修复完成 ${NC}请在linux系统上编辑此脚本取名例如fix_dirtyfrag.sh然后x权限。UOS系统上执行加sudo bash。脚本网盘链接https://pan.baidu.com/s/17tEIZeVSi9fOyopET3jsow?pwdciwrhttps://pan.quark.cn/s/f6911f396a1a 提取码kgLA脚本我在Rocky Linux 9.7、Ubuntu 24.03 sp1、UOS V20 1070上完成验证。六、写在最后安全无止境加固进行时从Dirty Pipe到Copy Fail再到如今的Dirty FragLinux内核的页缓存机制似乎成了一个“漏洞富矿”。这并非意味着Linux不安全而是揭示了操作系统在追求极致性能时所面临的巨大安全挑战。对于运维人员和安全工程师来说这无疑是一个必须修复的高危漏洞。但危机也是机遇它促使我们重新审视自身系统的安全基线加固每一道防线。记住没有绝对安全的系统只有不断进化的防御。希望本文能为你提供一份及时、准确、有效的应急指南。如果你在修复过程中遇到任何问题或者有更专业的见解欢迎在评论区留言讨论。让我们一起为Linux 的安全生态贡献一份力量参考资料• [1] https://dirtyfrag.io/• [2] Red Hat Security Advisory for CVE-2026-43284• [3] Debian Security Tracker for CVE-2026-43284• [4] https://almalinux.org/blog/2026-05-07-dirty-frag/• [5] Kernel.org Git Commit for CVE-2026-43284 Patch