使用 Ansible 在 Debian / Ubuntu / RHEL 系列主机群中检测并应用针对 CVE-2026-31431(“Copy Fail”)的内核命令行缓解措施。
该 CVE 是 Linux 内核 algif_aead AF_ALG 接口中的一个本地权限提升漏洞。任何非特权本地用户——包括 www-data、mysql 等服务账户,或已被 RCE 的 Web 应用中的进程——都可以通过几次系统调用将其串联为 root 权限。该漏洞影响自 2017 年以来发布的所有主流发行版。
initcall_blacklist=algif_aead_init——当使用 -e apply_mitigation=true 调用时。内核命令行黑名单在内置(RHEL 系列)和模块化(Debian/Ubuntu)配置上均有效,而经常被引用的 modprobe blacklist algif_aead 变通方案则不具备此效果。
algif_aead_init() 是内核在启动时向加密套接字子系统注册 aead AF_ALG 算法的内核函数。命令行参数 initcall_blacklist=algif_aead_init 指示内核跳过该 initcall。易受攻击的代码仍存在于内核二进制文件中,但 socket(AF_ALG, ..., "aead") 会返回 ENOENT,因此漏洞利用的第一次系统调用就会失败。没有可触达的攻击面,就没有权限提升。
一旦厂商发布修补后的内核并且您重启进入这些内核,该缓解措施就不再需要,可以移除。
# 1. 检测(只读)——生成每台主机的状态报告
ansible-playbook -i inventory check_cve_2026_31431.yml
# 2. 先在单台主机上暂存缓解措施(不自动重启)
ansible-playbook -i inventory --limit <ip-or-host> \
-e apply_mitigation=true check_cve_2026_31431.yml
# 3. 通过您常用的机制重启该主机
# 4. 重新检测;确认“缓解措施已生效:是”
# 5. 分批推广到其余主机群
易受攻击主机的报告如下所示:
═══════════════════════════════════════════
主机: 192.168.1.42
发行版: Ubuntu 24.04
内核: 6.8.0-60-generic
缓解措施已生效: 否
缓解措施已暂存: 否
═══════════════════════════════════════════
⚠️ 192.168.1.42:CVE-2026-31431 缓解措施未生效。
不在本方案范围内。手动单行命令:
# Debian / Ubuntu
sudo sed -i 's/ initcall_blacklist=algif_aead_init//' /etc/default/grub
sudo update-grub
sudo reboot
# RHEL 系列
sudo grubby --update-kernel=ALL --remove-args="initcall_blacklist=algif_aead_init"
sudo reboot
检测路径严格只读(uname、读取 /proc/cmdline、读取 /etc/default/grub、grubby --info=ALL)。探测使用 failed_when: false,因此意外输出绝不会中止 play。ignore_unreachable: true 意味着无法访问的主机会得到明确的“UNREACHABLE — 视为易受攻击”警告,而不是导致运行失败。
应用路径包裹在 block/rescue 中,因此单台故障主机绝不会阻止其余主机。grub 编辑是幂等的,并以 mitigation_staged 为门控条件,因此重复运行是无操作。
bash tests/run-checks.sh all
阶段:lint(yamllint + ansible-lint)→ syntax(ansible-playbook --syntax-check)→ dry-run(以 --check 模式配合 -c local 对 localhost 执行 playbook,涵盖检测和应用两条路径)。同一脚本由 GitHub Actions 矩阵在每次推送和拉取请求时于 debian:12、ubuntu:22.04、ubuntu:24.04 和 almalinux:9 容器中调用。
dry-run 不验证的内容:
update-grub 或触发重启。/proc/cmdline 显示的是运行器主机的命令行,而非容器的命令行,因此 CI 输出中的 mitigation_active 没有意义。CI 证明 playbook 运行干净;它并不证明主机已得到缓解。更多信息请参阅 tests/README.md。
漏洞由 Taeyang Lee (Theori) 发现,并由 Xint Code Research Team 武器化为完整的漏洞利用链,他们值得感谢,因为正是他们让安全社区对此予以关注。本方案只是将他们所推荐的缓解措施自动化。
Beerware。参见 LICENSE。简而言之:您可以随意使用本内容;如果我们有缘相见,请给我买杯啤酒。
AESTECHNO — Hugues Orgitello — 电子设计公司,法国蒙彼利埃。