mahradbt/copyfail-mitigation
GitHub: mahradbt/copyfail-mitigation
一套用于审计和缓解 Linux 内核 CVE-2026-31431(Copy Fail)本地提权漏洞的 Ansible Playbook,支持批量检测 algif_aead 模块暴露面并快速实施黑名单缓解措施。
Stars: 1 | Forks: 0
# CVE-2026-31431 — 复制失败
## 概述
**Copy Fail** (CVE-2026-31431) 是 Linux 内核 `algif_aead` 模块(AF_ALG crypto 套接字家族面向用户空间的 AEAD 接口)中的一个漏洞。
内核 AEAD 请求处理程序中 `copy_*user` 路径存在的缺陷,允许本地无特权用户通过构造格式错误的套接字请求来破坏内核内存或提升权限。
| 字段 | 详情 |
|------------------|--------|
| **CVE ID** | CVE-2026-31431 |
| **别名** | Copy Fail |
| **组件** | Linux 内核 — `algif_aead` (`net/socket.c`, `crypto/algif_aead.c`) |
| **攻击向量** | 本地 |
| **所需权限** | 低(无特权用户) |
| **影响** | 内核内存破坏 / 本地权限提升 |
| **补丁状态** | 上游内核补丁开发中 — 请检查您的发行版供应商 |
## 受影响的系统
| 发行版 | 受影响的版本 | 状态 |
|---|---|---|
| Ubuntu 22.04 / 24.04 | 低于已修复版本的内核 | 补丁待定 — 请参阅 Ubuntu USN |
| Debian 12 (Bookworm) | 低于已修复版本的内核 | 补丁待定 |
| RHEL / AlmaLinux / Rocky 8 & 9 | 低于已修复版本的内核 | 补丁待定 |
| Amazon Linux 2 / 2023 | 低于已修复版本的内核 | 补丁待定 |
| 通用上游版本 | `algif_aead` 已被编译或自动加载 | 如果存在该模块则受影响 |
## 影响概览
| 子系统 | 受此 CVE 影响吗? | 受缓解措施影响吗? |
|---|---|---|
| dm-crypt / LUKS | 否 | 否 |
| kTLS | 否 | 否 |
| IPsec / StrongSwan | 否 | 否 |
| OpenSSL(默认构建) | 否 | 否 |
| GnuTLS / NSS | 否 | 否 |
| OpenSSH | 否 | 否 |
| OpenSSL **afalg engine** | 可能 | 是 — 应用前请审查 |
| `kcapi-enc / kcapi-dgst` 工具 | 是 | 是 |
## 仓库结构
```
.
├── audit_algif_aead.yml # Step 1 — audit: detect exposure per host
├── mitigate_copyfail.yml # Step 2 — mitigation: unload + blacklist module
└── README.md # This document
```
## 前置条件
- 控制节点上已安装 Ansible ≥ 2.14
- `community.general` 集合(`ansible-galaxy collection install community.general`)
- 对目标主机具有 SSH 访问权限 + `become: true` (sudo)
- 目标主机上已安装 `lsof`(通常默认存在)
## 清单设置
`inventory.ini` 已被 **gitignore** ——它保留在本地,且不会上传至仓库。
`inventory.ini.example` 是提交的模板,所有人以此作为起始点。
```
# 克隆并准备
git clone https://github.com/your-org/copy-fail-CVE-2026-31431.git
cd copy-fail-CVE-2026-31431
cp inventory.ini.example inventory.ini
# 使用真实主机编辑 inventory.ini,然后运行:
ansible-playbook -i inventory.ini audit_algif_aead.yml
```
以下路径已被 gitignore 以防止泄露基础架构数据:
| gitignore 路径 | 原因 |
|---|---|
| `inventory.ini` | 真实主机名 / IP |
| `inventories/` | 任何本地清单目录 |
| `copyfail_reports/` | 审计输出包含内核版本、进程列表 |
| `.vault_pass` | Ansible Vault 密码文件 |
| `*.retry` | Ansible 重试工件 |
## 步骤 1 — 审计
在对任何内容进行操作**之前**运行审计 Playbook。它会收集每个主机的证据,并在本地和每个目标上写入报告。
```
ansible-playbook -i inventory.ini audit_algif_aead.yml
```
报告将被获取到 `./copyfail_reports/_audit.txt`。
### 审计检查内容
| 检查项 | 命令 | 结论 |
|---|---|---|
| 内核版本 | `uname -r` | 提供信息 |
| 模块是否已加载? | `lsmod \| grep algif_aead` | 已加载 = 存在暴露风险 |
| 活跃的 AF\_ALG 套接字 | `lsof \| grep AF_ALG` | 找到用户 = 必须审查 |
| OpenSSL afalg engine | `openssl engine \| grep afalg` | 活跃 = 审查影响 |
| 存在 kcapi 工具 | `which kcapi-*` | 存在 = 潜在用户 |
| 已应用缓解措施 | `stat /etc/modprobe.d/disable-algif.conf` | 存在 = 已缓解 |
### 解释结论
| 条件 | 建议措施 |
|---|---|
| 模块未加载 | 紧急风险低 — 监控内核补丁 |
| 模块已加载,无 AF\_ALG 套接字用户 | 可以安全应用缓解措施 |
| 模块已加载**且**存在活跃的 AF\_ALG 用户 | 应用缓解措施前审查相关进程 |
| 缓解措施文件已存在 | 之前已应用缓解措施 — 需验证 |
## 步骤 2 — 缓解措施
```
ansible-playbook -i inventory.ini mitigate_copyfail.yml
```
### 跳过特定主机(例如:已确认存在 kcapi 依赖的主机):
```
ansible-playbook -i inventory.ini mitigate_copyfail.yml \
-e '{"skip_hosts": ["db-prod-01", "hsm-node-02"]}'
```
### 缓解措施执行的操作
1. 创建 `/etc/modprobe.d/disable-algif.conf`,内容为 `install algif_aead /bin/false`
2. 从**运行中**的内核卸载 `algif_aead` 模块(初始保护无需重启)
3. 更新 initramfs,使黑名单在重启后依然生效(Debian/Ubuntu 上使用 `update-initramfs`,RHEL 上使用 `dracut --force`)
4. 将带有时间戳的日志写入 `/var/backup/copyfail_mitigation/mitigation.log`
## 验证
Playbook 执行完成后,在任何目标主机上进行验证:
```
# Module 绝对不能出现
lsmod | grep algif_aead
# 黑名单文件必须存在并包含安装行
cat /etc/modprobe.d/disable-algif.conf
# 手动加载必须被拒绝
sudo modprobe algif_aead # Expected: FATAL: Module algif_aead not found or refused
```
## 恢复操作(应用内核补丁后)
一旦您的供应商发布了修补过的内核并且您已将其应用:
```
# 在每个主机上 — 移除黑名单
sudo rm /etc/modprobe.d/disable-algif.conf
# 重建 initramfs
sudo update-initramfs -u # Debian / Ubuntu
sudo dracut --force # RHEL / CentOS / Amazon Linux
# 重启进入打过补丁的 kernel
sudo reboot
```
## 参考资料
- [CERT Europa 咨询公告 2026-005](https://cert.europa.eu/publications/security-advisories/2026-005/)
- [Ubuntu 安全公告 — Copy Fail](https://ubuntu.com/blog/copy-fail-vulnerability-fixes-available)
- [xint.io — 跨 Linux 发行版的 Copy Fail](https://xint.io/blog/copy-fail-linux-distributions)
- [Linux 内核 `algif_aead` 源码](https://elixir.bootlin.com/linux/latest/source/crypto/algif_aead.c)
## 许可证
在 [MIT 许可证](LICENSE) 下发布。
需自担风险。在应用于生产系统之前,请务必在预发布环境中进行验证。
标签:0day挖掘, AF_ALG, algif_aead, Amazon Linux, Ansible, Copy Fail, CVE-2026-31431, Debian, OpenCanary, Playbook, RHEL, Web报告查看器, 内存破坏, 内核安全, 内核漏洞, 协议分析, 卸载模块, 安全响应, 安全基线, 安全渗透, 应用安全, 教学环境, 数据展示, 无线安全, 本地提权, 权限提升, 漏洞审计, 漏洞缓解, 系统提示词, 系统运维, 红队, 网络安全, 自动化运维, 隐私保护, 黑名单