Webhosting4U/Copy-Fail_Detect_and_mitigate_CVE-2026-31431
GitHub: Webhosting4U/Copy-Fail_Detect_and_mitigate_CVE-2026-31431
针对 Linux 内核高危漏洞 CVE-2026-31431(Copy Fail)的一键检测与临时缓解脚本,帮助运维人员快速判定系统风险并阻断攻击面。
Stars: 1 | Forks: 0
# Copy Fail - CVE-2026-31431 检测与缓解工具





检测是否存在 **CVE-2026-31431 (Copy Fail)** 漏洞风险,并可选择通过在受影响系统上禁用 `algif_aead` 内核模块来应用主机级缓解措施。
## 本仓库提供的内容
- `copyfail-check.sh` — 检查内核补丁状态、运行时模块暴露情况及缓解状态。
- 可通过 `--mitigate` 进行可选的自动缓解。
- 易读的判定结果输出:`NOT AFFECTED`、`PATCHED`、`NOT EXPLOITABLE`、`MITIGATED`、`MITIGATED (REBOOT PENDING)` 或 `AFFECTED`。
## 漏洞概述
| 属性 | 值 |
|---|---|
| CVE ID | CVE-2026-31431 |
| 严重程度 | **HIGH** (CVSS 3.1: 7.8) |
| 组件 | `algif_aead` — 内核 AF_ALG AEAD 加密接口 |
| 攻击类型 | 本地提权;容器逃逸(暂无公开 PoC) |
| 受影响的内核 | **4.14 及更高版本**(见下文) |
| 披露日期 | 2026-04-29 |
2017 年的一项 AEAD 原地优化(提交 `72548b093ee3`,内核 4.14)允许无特权的本地攻击者获得针对任何可读文件的受控页缓存写入原语,从而实现提权至 root。在容器环境中,该原语可能会促进容器逃逸。
**4.14 之前的内核不受影响。** 这包括 Ubuntu 的 3.13 内核(Trusty 14.04 GA)和 4.4 内核(Xenial 16.04 GA,Trusty HWE)——它们早于存在漏洞的提交。
## 提交引用
| 作用 | 提交 |
|---|---|
| 引入漏洞 | `72548b093ee3` (内核 4.14, 2017) |
| 修复 — 主线 / 内核 7.0 | `a664bf3d603d` |
| 修复 — 稳定版 6.18.x | `fafe0fa2995a` |
| 修复 — 稳定版 6.19.x | `ce42ee423e58` |
各发行版会使用自己的提交标识反向移植补丁。脚本会在软件包变更日志中搜索 CVE ID,对于反向移植的内核而言,这比上游哈希值更可靠。
## 受影响的 Ubuntu 发行版
| 版本 | linux 内核 | kmod 缓解措施(已修复版本) |
|---|---|---|
| Trusty 14.04 | 仅限 4.15 内核;3.13 和 4.4 不受影响 | `15-0ubuntu7+esm1` |
| Xenial 16.04 | 仅限 4.15 内核;4.4 不受影响 | `22-1ubuntu5.2+esm1` |
| Bionic 18.04 | 受影响 | `24-1ubuntu3.5+esm1` |
| Focal 20.04 | 受影响 | `27-1ubuntu2.1+esm1` |
| Jammy 22.04 | 受影响 | `29-1ubuntu1.1` |
| Noble 24.04 | 受影响 | `31+20240202-2ubuntu7.2` |
| Questing 25.10 | 受影响 | `34.2-2ubuntu1.1` |
| Resolute 26.04 | **不受影响** | 无需更新 |
Ubuntu 安全团队发布了 `kmod` 软件包更新,该更新会将 `install algif_aead /bin/false` 写入 `/etc/modprobe.d/disable-algif_aead.conf`。本脚本会创建具有相同内容的同名文件,与此方法完全兼容。在 Ubuntu 上,应用官方软件包更新(`sudo apt install --only-upgrade kmod`)是推荐的做法;本脚本为非 Ubuntu 系统或更新前的预检提供了等效的覆盖方案。
## 快速开始
### 本地
```
chmod +x copyfail-check.sh
sudo ./copyfail-check.sh # detection only
sudo ./copyfail-check.sh --mitigate # detection + apply mitigation if affected
```
### 远程(直接从 GitHub 运行,无需下载)
直接从 `main` 分支流式传输并执行脚本。`bash -s --` 形式会将 `--` 之后的参数转发给脚本本身,因此 `--mitigate` 会传递到脚本而不是 `bash`。
```
# 仅 Detection
curl -fsSL https://raw.githubusercontent.com/Webhosting4U/Copy-Fail_Detect_and_mitigate_CVE-2026-31431/main/copyfail-check.sh | sudo bash
# Detection + mitigation
curl -fsSL https://raw.githubusercontent.com/Webhosting4U/Copy-Fail_Detect_and_mitigate_CVE-2026-31431/main/copyfail-check.sh | sudo bash -s -- --mitigate
```
`wget` 等效命令:
```
wget -qO- https://raw.githubusercontent.com/Webhosting4U/Copy-Fail_Detect_and_mitigate_CVE-2026-31431/main/copyfail-check.sh | sudo bash
wget -qO- https://raw.githubusercontent.com/Webhosting4U/Copy-Fail_Detect_and_mitigate_CVE-2026-31431/main/copyfail-check.sh | sudo bash -s -- --mitigate
```
## 检查内容
1. 以 root 身份运行
2. **内核版本预检** — 早于 4.14 的内核会立即以 `NOT AFFECTED` 退出
3. 内核补丁证据,按以下顺序检查 — 任何肯定的信号都足够:
- Debian/Ubuntu kernel-package 变更日志(搜索所有三个修复提交哈希和 CVE ID)
- RHEL/Fedora kernel-package 变更日志(相同的模式)
- `/sys/kernel/livepatch/` 下已加载的内核热补丁,以及 `kpatch list` 和 `canonical-livepatch status`
- 发行版 CVE 工具:`ubuntu-security-status --cves`、`dnf updateinfo list cves`、`zypper patch-check`
4. `algif_aead` 模块可用性(`modinfo`)和加载状态(`lsmod`)
5. `/etc/modprobe.d/` 下现有的基于 modprobe 的阻止规则 — 接受等效的无效化操作(`install … /bin/false|/bin/true|/sbin/nologin`)和 `blacklist`;识别阻止操作是否来自 Ubuntu kmod 软件包
6. **Ubuntu kmod 软件包提示** — 如果模块未被阻止且系统为 Ubuntu,则报告检测到的版本是否有可用的缓解软件包更新
7. 通过 `/proc/modules`(第 3 列)中的模块引用计数检查活动的 AF_ALG 使用情况;同时标记 `/etc/ssl` 或 `/etc/pki/tls` 中的 OpenSSL `afalg` 引擎引用
8. 最终风险判定
## 判定含义
| 判定 | 含义 |
|---|---|
| `NOT AFFECTED` | 内核早于 4.14,或已打补丁且模块不可用 |
| `PATCHED` | 内核变更日志/工具确认已存在修复 |
| `NOT EXPLOITABLE` | 此系统上模块不可用 |
| `MITIGATED` | 模块已通过 modprobe.d 阻止;内核仍未打补丁 — 请尽快更新 |
| `MITIGATED (REBOOT PENDING)` | 阻止规则已写入但模块仍在加载;请使用 `rmmod` 卸载或重启 |
| `AFFECTED` | 内核处于受影响范围内且 `algif_aead` 可用 |
## 缓解措施的作用
在受影响的系统上使用 `--mitigate` 时,脚本会:
- 创建 `/etc/modprobe.d/disable-algif_aead.conf`,内容为 `install algif_aead /bin/false`
- 如果当前已加载 `algif_aead`,则尝试将其卸载
- 保留持久的启动时阻止规则
文件名 `/etc/modprobe.d/disable-algif_aead.conf` 与 Ubuntu 官方 `kmod` 软件包更新写入的文件一致,因此这两种方法是可互换且兼容的。
## 重要提示
- 缓解措施是一种**临时降低风险的手段**,不能替代内核补丁。
- 禁用 `algif_aead` 对于常见的加密路径是安全的:`dm-crypt`、LUKS、kTLS、IPsec、默认的 OpenSSL/GnuTLS 使用、SSH 和内核密钥环加密均不受影响。
- 显式加载 OpenSSL `afalg` 引擎的应用程序将失去硬件加速;它们应回退到软件加密,但可能需要重启才能触发回退。
- 容器工作负载:即使没有公开的 PoC,该漏洞也可能导致容器逃逸。无论工作负载类型如何,都建议应用缓解措施或内核补丁。
## 披露时间线
| 日期 | 事件 |
|---|---|
| 2026-03-23 | 报告给 Linux 内核安全团队 |
| 2026-04-01 | 修复提交至主线 |
| 2026-04-29 | 公开披露 |
## 需求
- Linux 主机
- Root 权限(`sudo` 或 root shell)
- 核心工具(始终需要):`uname`、`modinfo`、`lsmod`、`awk`、`grep`
- 可选工具(存在时使用,按权威性顺序排列):
- `dpkg` — Debian/Ubuntu 变更日志扫描和 kmod 版本检查
- `lsb_release` — 用于 kmod 提示的 Ubuntu 发行版检测
- `rpm` — RHEL/Fedora 变更日志扫描
- `kpatch` / `canonical-livepatch` 和 `/sys/kernel/livepatch/` — 热补丁检测
- `ubuntu-security-status`、`dnf updateinfo`、`zypper patch-check` — 发行版 CVE 工具
## 仓库结构
```
.
├── copyfail-check.sh
└── README.md
```
## 参考
- [copy.fail](https://copy.fail/) — 官方漏洞页面
- [跨 Linux 发行版的 Copy Fail 漏洞分析](https://xint.io/blog/copy-fail-linux-distributions) — 发行版覆盖范围分析
- [oss-security 披露](https://www.openwall.com/lists/oss-security/2026/04/29/23) — 完整技术披露
- [Ubuntu 安全公告](https://ubuntu.com/security/CVE-2026-31431) — Ubuntu 特定指南和已修复的软件包版本
- [CVE 记录](https://www.cve.org/CVERecord?id=CVE-2026-31431) — 官方 CVE 条目
标签:AF_ALG, algif_aead, Copy Fail, CVE-2026-31431, CVSS 7.8, Linux内核安全, PB级数据处理, Web报告查看器, 内核漏洞, 子域名枚举, 安全渗透, 安全运维, 容器逃逸, 应用安全, 数字取证, 本地提权, 漏洞缓解, 私有化部署, 系统安全, 网络安全, 自动化脚本, 补丁检查, 防御规避, 隐私保护, 高危漏洞