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 [![Ansible](https://img.shields.io/badge/Ansible-2.14+-blue.svg)](https://docs.ansible.com/) [![License](https://img.shields.io/badge/License-MIT-green.svg)](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攻击, 上游代理, 内核模块, 安全基线, 安全资源, 开源, 教学环境, 数字取证, 漏洞修复, 系统加固, 系统提示词, 网络安全培训, 自动化脚本, 自动化运维, 运维脚本