mlazzarotto/copy-fail-CVE-2026-31431-mitigation-ansible-playbook
GitHub: mlazzarotto/copy-fail-CVE-2026-31431-mitigation-ansible-playbook
一个用于在 Debian/Ubuntu 和 RHEL 系列系统上通过禁用 algif_aead 内核模块来缓解 CVE-2026-31431 漏洞的 Ansible Playbook,支持应用与回滚操作。
Stars: 0 | Forks: 0
# CVE-2026-31431 缓解措施 Playbook
[](https://docs.ansible.com/)
[](LICENSE)
一个 Ansible playbook,用于在 Debian/Ubuntu 和 RHEL/Rocky/AlmaLinux 系统上应用和回滚 CVE-2026-31431 (AF_ALG) 内核模块缓解措施。
## 概述
此 playbook 通过禁用易受攻击的 `algif_aead` 内核模块来缓解 CVE-2026-31431:
- **Debian/Ubuntu 系列**:创建 modprobe 黑名单文件并尝试卸载该模块
- **RHEL/Rocky/AlmaLinux 系列 (9 & 10)**:使用 `grubby` 添加内核 initcall 黑名单参数
⚠️ **重要提示**:此 playbook **不会自动重启**您的服务器。它会在需要重启时显示提醒消息,允许操作员在维护窗口期间安排重启。
## 前置条件
- Ansible 2.14 或更高版本
- 目标系统:Ubuntu/Debian 或 RHEL 9/10, Rocky Linux 9/10, AlmaLinux 9/10
- 具有 sudo 权限的 SSH 访问
## 快速开始
### 1. 复制示例配置文件
`examples/` 目录中提供了示例配置文件:
```
# 复制示例 inventory
cp examples/inventory/hosts.ini inventory/hosts.ini
# 复制示例 ansible 配置(可选)
cp examples/ansible.cfg ansible.cfg
```
有关详细的自定义说明,请参阅 `examples/README.md`。
### 2. 自定义 Inventory
使用您的服务器详细信息编辑 `inventory/hosts.ini`:
```
[servers]
server1.example.com
server2.example.com ansible_host=192.168.1.50
[servers:vars]
ansible_user=admin
ansible_become=true
```
### 3. 测试连通性
```
ansible all -m ping
```
### 4. 运行 Playbook
```
ansible-playbook mitigation-playbook.yaml
```
## 使用说明
### 应用缓解措施
要将缓解措施应用于 inventory 中的所有主机:
```
ansible-playbook mitigation-playbook.yaml
```
要应用于特定的主机或组:
```
ansible-playbook mitigation-playbook.yaml --limit webservers
```
### 回滚缓解措施
要回滚(移除)缓解措施:
```
ansible-playbook mitigation-playbook.yaml -e "rollback=true"
```
或使用 `rollback` 标签:
```
ansible-playbook mitigation-playbook.yaml --tags rollback -e "rollback=true"
```
### 可选:Systemd 清理
要移除已弃用的 systemd drop-in 文件(如果从旧版本的缓解措施迁移):
```
ansible-playbook mitigation-playbook.yaml -e "run_systemd_cleanup=true"
```
## 输出示例
### 成功应用(无需重启)
```
TASK [CVE-2026-31431 Summary (Debian)] ****************************************
ok: [server1] => {
"msg": [
"===== CVE-2026-31431 SUMMARY — server1 =====",
"Action: apply",
"Module loaded (pre): False",
"Module loaded (post): False",
"Reboot required: False"
]
}
```
### 成功应用(需要重启)
```
TASK [Remind operator to reboot (RHEL)] ****************************************
ok: [server2] => {
"msg": "REMINDER: Kernel args changed. Reboot required to activate mitigation."
}
TASK [CVE-2026-31431 Summary (Red Hat)] ****************************************
ok: [server2] => {
"msg": [
"===== CVE-2026-31431 SUMMARY — server2 =====",
"Action: apply",
"Kernel arg active (pre): False",
"Kernel arg active (post): False",
"Reboot required: True"
]
}
TASK [Remind to reboot if required (Red Hat)] **********************************
ok: [server2] => {
"msg": "REMINDER: A reboot is required to activate/deactivate the mitigation on this Red Hat-based host."
}
```
## 重启行为
| 操作系统系列 | 何时需要重启 | 行为 |
| ------------------- | -------------------------------------------- | ------------- |
| **Debian/Ubuntu** | 模块正在“使用中”且无法卸载 | 仅提醒 |
| **RHEL/Rocky/Alma** | Grubby 更改了内核参数 | 仅提醒 |
此 playbook 被设计为**从不自动重启**,以便让操作员完全控制维护窗口。
## Playbook 变量
| 变量 | 默认值 | 描述 |
| --------------------- | ------- | --------------------------------------------------- |
| `rollback` | `false` | 设置为 `true` 以回滚缓解措施 |
| `run_systemd_cleanup` | `false` | 设置为 `true` 以移除已弃用的 systemd drop-in |
| `target_hosts` | `all` | 限制对特定主机或组的执行 |
| `mitigation_serial` | `25%` | 滚动执行的批次大小 |
## 标签
- `mitigation` - 仅运行应用缓解措施的任务
- `rollback` - 仅运行回滚任务
- `systemd-cleanup` - 仅运行 systemd 清理任务
示例:
```
# 仅运行缓解任务
ansible-playbook -i inventory/hosts.ini mitigation-playbook.yaml --tags mitigation
# 仅运行回滚任务
ansible-playbook -i inventory/hosts.ini mitigation-playbook.yaml --tags rollback -e "rollback=true"
```
## 验证
运行 playbook 后(如果提示则需重启),请验证缓解措施是否处于活动状态:
### Debian/Ubuntu
```
# 检查模块是否被列入黑名单
cat /etc/modprobe.d/disable-algif.conf
# 检查模块是否已加载(应无返回)
lsmod | grep algif_aead
```
### RHEL/Rocky/Alma
```
# 检查 kernel 参数是否存在
grep initcall_blacklist /proc/cmdline
# 应输出类似如下内容:
# ... initcall_blacklist=algif_aead_init ...
```
## 安全注意事项
- 此 playbook 会修改内核模块的加载行为
- 在生产环境中运行前请先审查此 playbook
- 首先请在预发布环境中进行测试
- 确保您拥有控制台/KVM 访问权限,以防出现启动问题
## 许可证
MIT 许可证 - 详情请参阅 [LICENSE](LICENSE) 文件
## 致谢
此 playbook 的创建灵感来源于以下资源:
- [m3nu 的 CVE-2026-31431 缓解措施 Gist](https://gist.github.com/m3nu/c19269ef4fd6fa53b03eb388f77464da) - 初始的技术方案和缓解策略
- [Morrolinux 的 CVE-2026-31431 缓解 Playbook](https://kb.morrolinux.ovh/books/iac/page/playbook-di-mitigazione-cve-2026-31431) - 作为此 playbook 结构起点的意大利语知识库文章
## 免责声明
此 playbook 按原样提供。在应用于生产系统之前,请务必在您的环境中进行彻底测试。作者对因使用此 playbook 而导致的任何系统损坏或停机不承担责任。
标签:AF_ALG, algif_aead, AlmaLinux, Ansible, CVE-2026-31431, Debian, DevSecOps, grubby, Linux内核安全, MIT协议, modprobe, Playbook, RHEL, Rocky Linux, Web报告查看器, XXE攻击, 上游代理, 内核模块, 安全基线, 安全资源, 开源, 教学环境, 数字取证, 漏洞修复, 系统加固, 系统提示词, 网络安全培训, 自动化脚本, 自动化运维, 运维脚本