joltcan/ansible-role-cve-2026-31431

GitHub: joltcan/ansible-role-cve-2026-31431

针对 Linux 内核 AF_ALG/algif_aead 子系统 CVE-2026-31431 漏洞的 Ansible 自动化缓解角色,通过 modprobe.d 禁用内核模块并提供多重验证。

Stars: 0 | Forks: 0

# ansible-role-cve-2026-31431 用于应用(以及后续移除)`modprobe.d` 缓解措施的 Ansible 角色,针对 Linux 内核的 AF_ALG / `algif_aead` 子系统中的 CVE-2026-31431 ("Copy Fail") 漏洞。 已在 Debian 上测试。非常欢迎提交针对其他发行版、边缘情况或改进的 Pull requests。 ## 它的功能 此角色会将一个配置片段放入 `/etc/modprobe.d/`,以阻止加载 `algif_aead` 内核模块: ``` install algif_aead /bin/false ``` 然后,它会通过以下步骤验证缓解措施是否实际生效: 1. 断言主机属于 Debian 系列(这是此项技术唯一可靠运行的环境——请参阅下文的警告)。 2. 读取 `/boot/config-$(uname -r)`,如果 AEAD 是内建在内核中的(`CONFIG_CRYPTO_USER_API_AEAD=y`),则拒绝运行——modprobe.d 无法阻止内建的代码。 3. 如果当前有任何进程保持 AF_ALG 套接字处于打开状态,则发出警告(这些进程会使模块一直驻留在内存中,直到它们释放该模块)。 4. 确认 `algif_aead` 当前不在 `lsmod` 中。 5. 运行一个小型 Python 脚本,打开一个 `AF_ALG` 套接字并尝试 `bind()` 到 `aead/gcm(aes)`。应用缓解措施后,绑定操作必定会失败并返回 `FileNotFoundError`。 无需重启。 若要还原(例如,在已修补的内核就绪后),请设置 `cve_2026_31431_state=absent`。 ## 警告:modprobe.d 变通方法并非在所有地方都有效 在 oss-security 上流传的缓解措施——即将 `install algif_aead /bin/false` 放入 `/etc/modprobe.d/` 并执行 `rmmod` 移除该模块——**在 CloudLinux、AlmaLinux、RHEL 或任何其他基于 RHEL 家族的发行版上无效**,在将 AEAD 编译进内核的自定义内核上同样无效。 在这些系统上,`algif_aead` 是内建在内核中的(`CONFIG_CRYPTO_USER_API_AEAD=y`),因此: - `modprobe.d` 规则无法阻止其加载(因为没有需要加载的对象——代码已经存在于内核映像中)。 - `rmmod algif_aead` 无法移除内建的代码。 这些命令看起来会执行成功,但系统并未发生任何改变,从而产生安全的假象。您可以通过以下命令确认您的内核是否受影响: ``` zgrep '^CONFIG_CRYPTO_USER_API_AEAD=' /boot/config-$(uname -r) ``` - `=m` → 模块,此角色可以进行缓解。 - `=y` → 内建,您需要更新内核并重启,或者购买 livepatch 订阅。此角色会检测到这一情况并拒绝运行。 ## 变量 | 名称 | 默认值 | 备注 | |------------------------|--------------------------------------------|--------------------------------------| | `cve_2026_31431_state` | `present` | 设置为 `absent` 以移除缓解措施 | | `cve_2026_31431_conf` | `/etc/modprobe.d/disable-algif_aead.conf` | 黑名单文件的路径 | ## 用法 ### 从 Ansible Galaxy 获取(推荐) ``` ansible-galaxy install joltcan.cve_2026_31431 ansible-playbook -i ~/.ansible/roles/joltcan.cve_2026_31431/playbook.yml ``` 在已修补的内核运行后进行清理: ``` ansible-playbook -i ~/.ansible/roles/joltcan.cve_2026_31431/playbook.yml -e cve_2026_31431_state=absent ``` ### 从您自己的 playbook 运行 ``` - hosts: all become: true roles: - role: joltcan.cve_2026_31431 ``` ## 贡献 欢迎提交 Issue 和 pull request——特别是: - 针对 `algif_aead` 可加载的非 Debian 发行版的测试支持(Arch, Gentoo, Alpine 等)。 - 在没有 AF_ALG 用户处于活动状态时,安全卸载已加载的 `algif_aead` 的逻辑。 - 用于 CI 的 Molecule 场景。 ## 许可证 MIT — 详见 `LICENSE`。
标签:AF_ALG, algif_aead, Ansible, Ansible Role, Cutter, CVE-2026-31431, Debian, Linux内核漏洞, modprobe.d, 内核模块禁用, 子域名枚举, 安全防护, 漏洞修复, 漏洞缓解, 系统安全, 系统提示词, 网络安全, 网络安全培训, 自动化运维, 逆向工具, 隐私保护