一个安全、非破坏性的 CVE-2026-31431(“Copy Fail”)检测脚本,已在 XCP-ng 8.3 LTS(2026 年 5 月 5 日安全更新之前)上完成验证。
⚠️ 仅限授权使用。 请仅在您拥有或明确获得授权测试的系统上运行此脚本。
CVE-2026-31431,被称为“Copy Fail”,是 Linux 内核 algif_aead 加密接口中的一个本地权限提升(LPE)漏洞。authencesn 模板中的逻辑缺陷——于 2017 年引入——允许非特权本地用户对内核中任何可读文件的页缓存执行受控的 4 字节写入,从而实现向 root 的权限提升。
a664bf3d603dXCP-ng 的 Dom0 控制域运行在 Linux 内核之上,是虚拟机管理程序的管理层。任何能够通过 shell 访问 Dom0 的非特权用户——包括为 CI/CD 流水线、监控代理、备份工具或自动化创建的服务账户——都可以利用此漏洞获取 root 权限。一旦在 Dom0 中获得 root 权限,该主机上的所有客户虚拟机都将受到威胁。
默认的 XCP-ng 安装暴露面较小,因为很少有进程以非 root 用户身份运行。真正的风险会随着运维人员出于合法目的添加服务账户但未限制其 shell 访问而逐渐累积。
审计您的 Dom0 服务账户:
awk -F: '$7 ~ /bash|sh/' /etc/passwd
这是一个实验室检测器,而非权限提升工具。它会:
algif_aead / authencesn 页缓存草稿写入原语系统二进制文件、/etc/passwd 及其他系统文件绝不会被触碰。 页缓存损坏仅存在于内存中——不会向磁盘写回任何内容。
os.splice 所需)python3 xcp_ng_cve_2026_31431_tester.py
| 代码 | 含义 |
|---|---|
0 | 未观察到损坏——系统可能已修补或 algif_aead 已被禁用 |
1 | 触发错误——algif_aead 可能不可用或被阻止 |
注意: 在已修补的系统上退出代码为
1是预期行为,而非脚本错误。如果authencesn已在内核层面被禁用(如 XCP-ng 5 月 5 日修复中所做的那样),套接字绑定将失败,脚本将以代码1退出。
| 日期 | 事件 |
|---|---|
| 2026 年 4 月 29 日 | CVE-2026-31431 公开披露 |
| 2026 年 5 月 4 日 | VATES 发布 VSA-2026-013 |
| 2026 年 5 月 5 日 | XCP-ng 8.3 LTS 五月安全更新发布——内核修复可用 |
更新您的 XCP-ng 主机并重启:
yum update
reboot
重启后,验证已更新的内核正在运行:
uname -r
修补后重新运行此检测脚本。已修补的系统将返回退出代码 1(触发错误),因为易受攻击的 authencesn 模板已不再可用。
注意: XCP-ng 修复因移除易受攻击的
authencesn组件而禁用了 IPSec ESN 支持。对大多数环境而言,这没有实际影响。VATES 已表示未来的补丁可能会通过适当的修复恢复此功能。
在应用缓解措施之前,请确认 algif_aead 是编译为模块(=m)还是内置于内核(=y):
grep CONFIG_CRYPTO_USER_API_AEAD /boot/config-$(uname -r)
=m — 基于模块;modprobe 黑名单将生效=y — 内置于内核;modprobe 黑名单将静默失败且不提供任何保护对于 =y 的 RHEL 系列内核,请改用 grubby 引导参数:
grubby --update-kernel=ALL --args="initcall_blacklist=algif_aead_init"
reboot
此脚本是 rootsecdev 原始作品的修改衍生版本。在重新分发前,请核实上游仓库的许可证,并确保您的使用符合其条款。
此脚本已在运行未修补内核的 XCP-ng 8.3 LTS(截至 2026 年 5 月 5 日)上完成验证。如果您尚未应用官方的 VATES 安全更新,请立即应用。
2 | 存在漏洞——已确认页缓存损坏 |