Dirty Frag:Linux 内核 IPsec / RxRPC Page Cache 写入提权漏洞
文档版本:v1.0 · 更新日期:2026-05-18 适用对象:安全研究员、系统管理员、DevSecOps 团队
漏洞速览
| 属性 | 值 |
|---|---|
| CVE 编号 | CVE-2026-43284 (ESP) / CVE-2026-43500 (RxRPC) |
| 漏洞别名 | Dirty Frag / CopyFail 2 |
| CVSS 评分 | 7.8 HIGH(两者) |
| CVSS 向量 | AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H |
| 漏洞类型 | 本地权限提升 LPE(Page Cache 写入原语) |
| 攻击向量 | 本地 Local |
| 权限要求 | 低权限 Low |
| 用户交互 | 不需要 None |
| 公开日期 | 2026-05-07 |
| PoC 状态 | 已公开(含 “Copy Fail 2: Electric Boogaloo”) |
| 补丁版本 | ESP: commit f4c50a4034e6 已合并; RxRPC: 暂无官方补丁 |
| 临时缓解 | 可禁用 esp4 / esp6 / rxrpc 模块 |
| 发现者 | Hyunwoo Kim (@v4bel),独立于 CopyFail 发现 |
关键时间线:2026-05-07 Hyunwoo Kim 公开披露 → 2026-05-08 ESP 补丁合并主线 (commit f4c50a4034e6) → RxRPC 补丁截至 2026-05-18 仍未合并。
漏洞简介
Dirty Frag 是由安全研究员 Hyunwoo Kim (@v4bel) 发现的两个 Linux 内核本地权限提升漏洞的组合。Kim 独立发现了与 CopyFail 相同的漏洞类型——Page Cache 写入原语,但漏洞位于不同的内核子系统中。由于有人通过逆向分析内核补丁 commit 推导出了利用方法,导致披露被迫提前公开。
该漏洞由两个独立的 Page Cache 写入原语组成,二者可以组合成完整的权限提升利用链:
CVE-2026-43284:在 xfrm-ESP(IPsec)接收路径(esp4 / esp6)中,splice() / sendfile() 系统调用将管道页(pipe page)注入到 socket 缓冲区。内核在对 ESP 报文进行原地解密时,并未对分页缓冲区获取独占所有权,导致无特权的进程仍然保留对解密后明文的引用,从而实现了 Page Cache 写入原语。该漏洞自 2017 年起已存在于内核中。
CVE-2026-43500:在 RxRPC(AFS 文件系统协议)接收路径中,存在类似的 splice() 注入机制,从而产生类似的 Page Cache 写入原语。该漏洞自 2023 年起存在于内核中。
将两个漏洞组合使用,攻击者可以实现完整的本地权限提升链,从低权限用户直接获取 root 权限。
技术原理
CVE-2026-43284 利用链(ESP 路径)
攻击流程如下:
- IPsec ESP 接收路径:内核在
esp4/esp6模块中处理 IPsec ESP 报文接收。 - splice()/sendfile() 注入:攻击者调用
splice()或sendfile()系统调用,将管道页(pipe page)注入到 socket 缓冲区中。 - 原地解密缺陷:内核在对 ESP 报文进行解密时,直接在原缓冲区上进行原地解密,而未对分页缓冲区获取独占所有权。
- 明文引用残留:由于解密未获取独占所有权,无特权进程仍然保留对解密后明文页面的引用。
- Page Cache 写入原语:通过操作这一引用,攻击者可以构造任意 Page Cache 写入原语。
- 权限提升:利用 Page Cache 写入能力修改内核关键数据结构(如文件内容、进程凭证等),最终实现本地权限提升至 root。
CVE-2026-43500 利用链(RxRPC 路径)
攻击流程如下:
- RxRPC 接收路径:内核通过
rxrpc模块处理 AFS 文件系统协议的接收。 - 相同 splice() 注入:与 ESP 路径类似,攻击者通过
splice()将管道页注入到 socket 缓冲区。 - Page Cache 写入原语:利用相同的缺陷机制获得 Page Cache 写入能力。
- 联合利用:与 ESP 路径组合,构成完整的权限提升利用链。
利用条件
- 通常需要
CAP_NET_ADMIN权限,这限制了在容器环境中的直接利用。 - 在默认 Kubernetes 节点(使用默认 seccomp 配置文件)中,利用难度较高。
- 在普通虚拟机或未加固的 Linux 主机上,普通用户可通过一条命令获取 root 权限。
受影响版本
| 发行版 | 受影响情况 | 备注 |
|---|---|---|
| Ubuntu(所有版本) | CVE-2026-43284 + CVE-2026-43500 | 两个漏洞均受影响 |
| RHEL 8 / 9 / 10 | CVE-2026-43284 + CVE-2026-43500 | 两个漏洞均受影响 |
| AlmaLinux 8 | 仅 CVE-2026-43284 | 不含 rxrpc 模块 |
| AlmaLinux 9 / 10 | CVE-2026-43500 | 需安装 kernel-modules-partner |
| CentOS Stream 10 | CVE-2026-43284 + CVE-2026-43500 | 两个漏洞均受影响 |
| Fedora(近期版本) | CVE-2026-43284 + CVE-2026-43500 | 两个漏洞均受影响 |
| openSUSE Tumbleweed | CVE-2026-43284 + CVE-2026-43500 | 两个漏洞均受影响 |
| OpenShift 4 | 潜在受影响 | 需进一步评估 |
漏洞影响场景
- 普通 Linux 主机本地提权:攻击者在获得低权限 shell 后,可执行一条命令直接提升至 root 权限,完全控制主机。
- Kubernetes 集群容器逃逸:攻击者可在 Pod 内利用漏洞从容器逃逸至宿主机节点。由于默认 seccomp 配置文件的存在,利用难度高于普通主机,但仍不可忽视。
- 云虚拟机完全接管:在 AWS EC2、Azure VM、GCP Compute Engine 等云环境中,低权限用户可利用此漏洞获取虚拟机 root 权限,进而横向移动至同一网络中的其他资源。
- IPsec 网关沦陷:若攻击者已获得 IPsec 网关的本地访问权限,可利用该漏洞提升权限并进一步渗透内网。不过该场景的前提是攻击者已具备本地访问能力。
修复措施
推荐修复(根本解决)
CVE-2026-43284(ESP 路径)内核升级:
- Ubuntu/Debian:
sudo apt update && sudo apt upgrade - RHEL/AlmaLinux:
sudo dnf update kernel*
CVE-2026-43500(RxRPC 路径): 截至 2026-05-18,RxRPC 的官方补丁尚未合并。请持续关注各发行版的安全公告,一旦补丁发布后立即更新。
临时缓解(无法立即升级时)
在无法立即升级内核的环境中,可通过禁用受影响的内核模块进行临时防护:
# 立即卸载受影响模块
sudo modprobe -r esp4 esp6 rxrpc 2>/dev/null || true
# 阻止模块被自动加载
cat << 'EOF' | sudo tee /etc/modprobe.d/dirty-frag-mitigation.conf
install esp4 /bin/false
install esp6 /bin/false
install rxrpc /bin/false
EOF
# 更新 initramfs 以确保重启后生效
sudo update-initramfs -u⚠️ 警告:
- 禁用
esp4/esp6会导致 IPsec 功能不可用,影响 VPN 和加密隧道通信。- 禁用
rxrpc会影响 AFS 文件系统功能。- Kubernetes 环境建议额外配置:移除 Pod 的
CAP_NET_ADMIN能力,并使用RuntimeDefaultseccomp 配置文件。
一键检查与执行临时修复脚本
检查脚本
#!/bin/bash
# Dirty Frag 漏洞检查脚本
# 用途:检查系统是否受 CVE-2026-43284 / CVE-2026-43500 影响
echo "=== Dirty Frag 漏洞检查 ==="
echo ""
# 1. 检查当前内核版本
echo "[1] 当前内核版本:"
uname -r
echo ""
# 2. 检查受影响模块是否已加载
echo "[2] 受影响模块加载状态:"
for mod in esp4 esp6 rxrpc; do
if lsmod | grep -q "^${mod}\s"; then
echo " [⚠ VULNERABLE] ${mod} 已加载"
else
echo " [✓ OK] ${mod} 未加载"
fi
done
echo ""
# 3. 检查是否存在 modprobe 黑名单配置
echo "[3] modprobe 黑名单配置检查:"
if [ -f /etc/modprobe.d/dirty-frag-mitigation.conf ]; then
echo " [✓] 检测到缓解配置文件 /etc/modprobe.d/dirty-frag-mitigation.conf"
cat /etc/modprobe.d/dirty-frag-mitigation.conf
else
echo " [✗] 未检测到缓解配置文件"
fi
echo ""
# 4. 检查内核模块是否可加载
echo "[4] 受影响模块可用性检查:"
for mod in esp4 esp6 rxrpc; do
if modinfo ${mod} &>/dev/null; then
echo " [⚠] ${mod} 模块可用(存在被加载风险)"
else
echo " [✓] ${mod} 模块不可用"
fi
done
echo ""
echo "=== 检查完毕 ==="临时修复脚本
#!/bin/bash
# Dirty Frag 临时修复脚本
# 用途:禁用 esp4 / esp6 / rxrpc 内核模块以防止漏洞利用
# 注意:会创建修复前的状态备份,可回滚
set -e
BACKUP_DIR="/root/dirty-frag-backup-$(date +%Y%m%d_%H%M%S)"
echo "=== Dirty Frag 临时修复脚本 ==="
echo "备份目录:${BACKUP_DIR}"
echo ""
# 创建备份目录
mkdir -p "${BACKUP_DIR}"
# 备份当前已加载模块状态
echo "[1] 备份当前模块状态..."
lsmod > "${BACKUP_DIR}/lsmod_before.txt" 2>/dev/null || true
# 备份旧的 modprobe 配置(如果存在)
if [ -f /etc/modprobe.d/dirty-frag-mitigation.conf ]; then
cp /etc/modprobe.d/dirty-frag-mitigation.conf "${BACKUP_DIR}/mitigation.conf.bak"
echo " [✓] 已备份旧配置"
fi
# 卸载受影响模块
echo "[2] 卸载受影响模块..."
for mod in esp4 esp6 rxrpc; do
if lsmod | grep -q "^${mod}\s"; then
modprobe -r ${mod} 2>/dev/null && echo " [✓] 已卸载 ${mod}" || echo " [✗] 无法卸载 ${mod}(可能正在使用中)"
else
echo " [-] ${mod} 未加载,跳过"
fi
done
# 写入 modprobe 黑名单
echo "[3] 写入 modprobe 黑名单配置..."
cat << 'EOF' > /etc/modprobe.d/dirty-frag-mitigation.conf
# Dirty Frag 漏洞临时缓解 - 禁止加载受影响模块
# 创建时间:$(date)
install esp4 /bin/false
install esp6 /bin/false
install rxrpc /bin/false
EOF
echo " [✓] 配置已写入 /etc/modprobe.d/dirty-frag-mitigation.conf"
# 更新 initramfs
echo "[4] 更新 initramfs..."
if command -v update-initramfs &>/dev/null; then
update-initramfs -u && echo " [✓] initramfs 已更新"
elif command -v dracut &>/dev/null; then
dracut --force && echo " [✓] initramfs 已更新 (dracut)"
else
echo " [!] 未找到 update-initramfs 或 dracut,请手动更新 initramfs"
fi
echo ""
echo "=== 修复完成 ==="
echo ""
echo "回滚方法:"
echo " 1. 删除黑名单配置:rm /etc/modprobe.d/dirty-frag-mitigation.conf"
echo " 2. 更新 initramfs:update-initramfs -u"
echo " 3. 手动加载模块:modprobe esp4; modprobe esp6; modprobe rxrpc"
echo " 4. 备份文件位于:${BACKUP_DIR}"