针对 CVE-2026-43284 的测试工具
一个社区诊断工具,用于判断 XCP-ng dom0 主机是否暴露于 CVE-2026-43284(“Dirty Frag”),这是 Linux 内核 xfrm-ESP 子系统中的一个本地权限提升漏洞。
TL;DR — 所有当前 XCP-ng 版本(8.1、8.2、8.3)运行标准 4.19 dom0 内核的都在受影响代码范围内。截至 2026 年 5 月,官方尚未发布 XCP-ng 补丁。本工具能明确告知您的主机是否暴露,并提供安全的临时缓解措施。
“Dirty Frag” 是一个本地权限提升漏洞,由研究员 Hyunwoo Kim(@v4bel)于 2026 年 5 月公开披露。它利用 Linux 内核 IPsec ESP 子系统中于 2017 年 1 月(内核 4.14+)引入的就地解密快速路径。公开的工作概念验证可通过标准系统调用(无需内核漏洞)获得 root shell。
发布了两个 CVE:
| CVE | 子系统 | 引入版本 | 是否适用于 XCP-ng 4.19? |
|---|---|---|---|
| CVE-2026-43284 | xfrm-ESP (esp4/esp6) | 内核 4.14,2017 年 1 月 | 是 |
| CVE-2026-43500 | RxRPC (rxkad) | 内核 6.4,2023 年 6 月 | 否 — 未打包 rxrpc.ko |
XCP-ng 不需要 CVE-2026-43500 即可被利用。 仅 esp4 路径(CVE-2026-43284)就足够,因为 XCP-ng dom0 没有 AppArmor 策略,并允许非特权用户命名空间创建——这是 esp4 利用路径唯一的前提条件。详见 TECHNICAL.md 完整分析。
诊断脚本测试 XCP-ng 上 CVE-2026-43284 的必要且充分前提:非特权进程能否通过用户命名空间内的 XFRM netlink 接口启用 esp4 就地解密引擎。
它不会:
在生产 dom0 上运行是安全的。
# 克隆仓库
git clone https://github.com/grabesec/XCP_ng_CVE-2026-43284_tester.git
cd XCP_ng_CVE-2026-43284_tester
# 运行诊断(以非 root 身份运行可获得最强证据)
python3 XCP_ng_CVE_2026_43284_tester.py
注意: 尽可能以非 root 用户运行。这模拟了真实的威胁模型:被攻陷的服务账户或从虚拟机逃逸到 dom0。以 root 身份运行仍会产生有效结果,但说明性较弱。
=================================================================
XCP-ng Dirty Frag 诊断工具 -- CVE-2026-43284
xfrm-ESP 页面缓存写入 / 本地权限提升
=================================================================
内核 : 4.19.0+1
主机 : xcpng-prod-01
PID : 52306 | UID: 1000
=================================================================
[阶段 0] 飞行前环境检查
---------------------------------------------
[*] 非特权用户命名空间 : 允许
[*] modprobe.d 中的 esp4 黑名单 : 未找到
[*] 内核 RPM 中的 CVE-2026-43284 补丁 : 未找到
[阶段 1] esp4 模块基础状态
---------------------------------------------
[*] esp4 为 DORMANT -- 当前未加载到内核中。
自动加载机制可能在 XFRM 请求时按需加载它。
[阶段 2] 尝试从非特权命名空间启用 esp4
---------------------------------------------
[*] 在隔离的用户+网络命名空间中生成子进程
(unshare -U -n -r) -- 模拟非 root 本地攻击者
[*] 子进程信号 : XFRM SA 被内核接受
[*] esp4 引用计数 : 0(之前) -> 1(现在)
[*] /proc/modules : esp4 16384 1 - Live 0xffffffffc0a12000
[阶段 3] 工程判断
=================================================================
[!!!] 暴露证明 -- CVE-2026-43284 [!!!]
esp4 引用计数增加:0 -> 1
一个用户+网络命名空间内的非特权进程
成功注册了 XFRM 安全关联并
启用了主机内核中的 esp4 就地解密引擎。
这是 CVE-2026-43284 的门槛条件。
XCP-ng 特定分析:
[失败] 内核 4.19 包含受影响代码(自 4.14 起)
[失败] 用户命名空间已开放 -- esp4 路径可达
[通过] rxrpc.ko 不存在 -- CVE-2026-43500 不适用
[失败] 在此配置下,仅 esp4 路径就足够
[阶段 0] 飞行前环境检查
---------------------------------------------
[+] 在 /etc/modprobe.d/ 中找到 esp4 黑名单
模块加载缓解措施似乎已到位。
...
[阶段 2] 尝试从非特权命名空间启用 esp4
---------------------------------------------
[+] XFRM 状态添加被内核拒绝。
从命名空间内未启用 esp4 引擎。
[结果] 命名空间漏洞未授予 esp4 访问权限。
附带的 mitigate.sh 脚本安全地应用缓解措施,并内置了 IPsec 检测功能以防止破坏隧道:
# 仅检查当前状态(不做更改)
sudo ./mitigate.sh --check
# 应用缓解措施(如果检测到 IPsec 则中止)
sudo ./mitigate.sh
# 移除缓解措施(在应用官方内核补丁后)
sudo ./mitigate.sh --undo
选项 A — 未使用 IPsec 的主机(大多数 dom0):
echo 'install esp4 /bin/false' > /etc/modprobe.d/dirtyfrag-cve-2026-43284.conf
rmmod esp4 2>/dev/null || true
echo 3 > /proc/sys/vm/drop_caches
选项 B — 使用 IPsec 的主机(strongSwan / Libreswan):
请勿将 esp4 加入黑名单——这会立即破坏所有隧道。相反,请:
⚠️ 这是 LOCAL 权限提升。攻击者必须已经在 dom0 上拥有 shell 或代码执行权限。首要防御是限制谁拥有 dom0 的本地访问权限。Dom0 root = 虚拟机管理程序 root = 所有客户机 VM 均被攻陷。
| 要求 | 备注 |
|---|---|
| Python 3.6+ | XCP-ng 8.x dom0 自带 |
iproute2(ip 命令) | XCP-ng 8.x dom0 自带 |
unshare | 属于 util-linux,XCP-ng 8.x dom0 自带 |
| Linux 内核 | XCP-ng dom0 上的任意内核 4.14–6.x |
无需外部 Python 库。无需 pip 安装。
XCP_ng_CVE-2026-43284_tester/
├── XCP_ng_CVE_2026_43284_tester.py # 诊断脚本 — 先运行此
├── mitigate.sh # 缓解脚本,含 IPsec 检测
├── README.md # 本文件 — 快速开始和概述
├── TECHNICAL.md # 深入技术分析 — 攻击链、
│ # 为何 XCP-ng 上不需要 rxrpc、
│ # 脚本内部实现详解
├── CHANGELOG.md # 版本历史
└── LICENSE # MIT
如需完整解释:
请参阅 TECHNICAL.md。
| XCP-ng 版本 | 内核 | 是否受影响? | 官方补丁? |
|---|---|---|---|
| 8.3 LTS | 4.19 + Vates 补丁 | 是 | 截至 2026 年 5 月尚未发布 |
| 8.2 | 4.19 + Vates 补丁 | 是 | 截至 2026 年 5 月尚未发布 |
| 8.1 (EOL) | 4.19 + Vates 补丁 | 是 | 预计不会发布 |
本工具仅测试利用前提(命名空间 + esp4 访问)。它不包含、复制或引用任何利用代码。底层漏洞是公开已知的,原始研究者已发布概念验证,并且已分配 CVE。本工具的目的是帮助 XCP-ng 管理员判断其暴露程度,并在等待 Vates 官方内核补丁期间应用临时缓解措施。
Rodrigo Gracia — 社区安全贡献
XCP-ng / Xen Orchestra 实践者
https://github.com/grabesec
2026 年 5 月