grabesec/XCP_ng_CVE-2026-31431_tester
GitHub: grabesec/XCP_ng_CVE-2026-31431_tester
针对 XCP-ng 8.3 LTS 的 CVE-2026-31431「Copy Fail」Linux 内核本地提权漏洞的轻量级非破坏性检测脚本,帮助运维和安全团队安全地验证系统是否存在该漏洞。
Stars: 0 | Forks: 0
# CVE-2026-31431 "Copy Fail" — XCP-ng 实验室检测器
一个针对 CVE-2026-31431("Copy Fail")的安全、非破坏性检测脚本,已在 2026 年 5 月 5 日安全更新发布前的 **XCP-ng 8.3 LTS** 上通过验证。
## 背景
CVE-2026-31431,被称为 "Copy Fail",是 Linux 内核的 `algif_aead` 加密接口中的一个本地特权升级 (LPE) 漏洞。`authencesn` 模板(于 2017 年引入)中的一个逻辑缺陷,允许无特权的本地用户对任何可读文件的内核页缓存执行受控的 4 字节写入,从而实现到 root 的特权升级。
- **CVSS 3.1:** 7.8 (高危)
- **受影响的内核:** 4.14 到 6.18.21,6.19.12 之前的 6.19.x 版本
- **引入时间:** Linux 内核 4.14 (2017)
- **披露时间:** 2026 年 4 月 29 日,由 Taeyang Lee / Theori (Xint Code) 披露
- **上游修复:** 由 Herbert Xu 提交的 commit `a664bf3d603d`
### 为什么这对 XCP-ng 很重要
XCP-ng 的 Dom0 控制域运行在 Linux 内核之上,并且是虚拟机监控程序的管理层。任何拥有 Dom0 shell 访问权限的无特权用户——包括为 CI/CD 流水线、监控代理、备份工具或自动化创建的服务账号——都可以利用此漏洞获取 root 权限。一旦 Dom0 拥有了 root 权限,该主机上的所有客户虚拟机都将被攻陷。
默认的 XCP-ng 安装暴露面极小,因为很少有进程以非 root 用户身份运行。随着操作员出于合法目的添加服务账号而不限制 shell 访问权限,真正的风险会随着时间推移而累积。
审计您的 Dom0 服务账号:
```
awk -F: '$7 ~ /bash|sh/' /etc/passwd
```
## 此脚本的功能
这是一个**实验室检测器**,而不是特权升级工具。它会执行以下操作:
- 在临时目录中创建一个属于运行用户的临时标记文件
- 尝试针对该文件触发 `algif_aead` / `authencesn` 页缓存暂存写入原语
- 报告是否检测到页缓存损坏(确认漏洞)
- 在退出时清理所有临时文件
**系统二进制文件、`/etc/passwd` 及其他系统文件永远不会被触及。** 页缓存损坏仅存在于内存中——不会有任何内容被写回磁盘。
## 要求
- Python 3.10+(`os.splice` 所需)
- 仅需标准库——不需要 pip 安装
- 在运行有漏洞内核的 Dom0 上拥有非 root 用户 shell
## 使用方法
```
python3 xcp_ng_cve_2026_31431_tester.py
```
### 退出代码
| 代码 | 含义 |
|------|---------|
| `0` | 未观察到损坏——系统可能已修补或 `algif_aead` 已被禁用 |
| `1` | 触发错误——`algif_aead` 可能不可用或被阻止 |
| `2` | **有漏洞**——已确认页缓存损坏 |
## XCP-ng 补丁状态
| 日期 | 事件 |
|------|-------|
| 2026 年 4 月 29 日 | CVE-2026-31431 公开披露 |
| 2026 年 5 月 4 日 | VATES 发布 VSA-2026-013 |
| 2026 年 5 月 5 日 | XCP-ng 8.3 LTS 5 月安全更新发布——内核修复可用 |
### 应用修复
更新您的 XCP-ng 主机并重启:
```
yum update
reboot
```
重启后,验证是否正在运行更新后的内核:
```
uname -r
```
修补后重新运行此检测脚本。已修补的系统将返回退出代码 `1`(触发错误),因为有漏洞的 `authencesn` 模板已不再可用。
## 检查内核配置
在应用缓解措施之前,确认 `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
```
## 参考
- [VSA-2026-013 — VATES 安全公告](https://docs.vates.tech/security/advisories/2026/vates-sa-2026-013)
- [XCP-ng 2026 年 5 月安全更新](https://xcp-ng.org/blog/2026/05/05/april-2026-security-and-maintenance-updates-for-xcp-ng-8-3-lts-2/)
- [Copy Fail — Xint/Theori 技术分析报告](https://xint.io/blog/copy-fail-linux-distributions)
- [copy.fail — 官方披露页面](https://copy.fail)
- [CVE-2026-31431 — NVD](https://nvd.nist.gov/vuln/detail/CVE-2026-31431)
- [上游内核修复 — commit a664bf3d603d](https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=a664bf3d603d)
- [rootsecdev 的原始检测器](https://github.com/rootsecdev/cve_2026_31431/blob/main/test_cve_2026_31431.py)
## 许可证
此脚本是 rootsecdev 原始作品的修改衍生版本。在重新分发之前,请验证上游仓库的许可证,并确保您的使用符合其条款。
标签:algif_aead, authencesn, CVE-2026-31431, CVSS 7.8, Dom0安全, Hypervisor安全, Linux内核漏洞, LPE, Shell脚本, Web报告查看器, XCP-ng, 加密, 协议分析, 安全渗透, 无损检测, 本地提权, 权限提升, 漏洞扫描器, 红队评估, 网络安全, 虚拟化安全, 隐私保护, 页缓存任意写, 页面缓存