
Ansible-Playbook zur Erkennung und Anwendung der Kernel-Cmdline-Mitigation für CVE-2026-31431 (Copy Fail) auf Debian/Ubuntu/RHEL-Flotten, mit schreibgeschützter Erkennung und idempotenter Anwendung.
Erkennen und Anwenden der Kernel-Cmdline-Mitigation für CVE-2026-31431 („Copy Fail") in einer Debian-/Ubuntu-/RHEL-Familien-Flotte mit Ansible.
Bei der CVE handelt es sich um eine lokale Privilege-Escalation-Schwachstelle in der
algif_aead-AF_ALG-Schnittstelle des Linux-Kernels. Jeder unprivilegierte lokale Benutzer — einschließlich
Dienstkonten wie www-data, mysql oder Prozesse in einer per RCE kompromittierten Web-App —
kann sie in wenigen Syscalls zu Root ausweiten. Der Fehler betrifft alle großen
Distributionen, die seit 2017 ausgeliefert wurden.
initcall_blacklist=algif_aead_init
an die Kernel-Befehlszeile anhängen — wenn mit aufgerufen.-e apply_mitigation=trueDie Kernel-Cmdline-Blacklist funktioniert bei beiden Konfigurationen — eingebaut (RHEL-Familie) und
modular (Debian/Ubuntu) —, was der oft zitierte
modprobe blacklist algif_aead-Workaround nicht tut.
algif_aead_init() ist die Kernel-Funktion, die den aead-AF_ALG-Algorithmus
beim Booten beim Crypto-Socket-Subsystem registriert. Der Cmdline-Parameter
initcall_blacklist=algif_aead_init weist den Kernel an, diesen
Initcall zu überspringen. Der verwundbare Code ist weiterhin im Kernel-Binary vorhanden, aber
socket(AF_ALG, ..., "aead") gibt ENOENT zurück, sodass der erste Syscall des Exploits
fehlschlägt. Keine erreichbare Oberfläche, keine Privilege Escalation.
Sobald Hersteller gepatchte Kernel ausliefern und Sie in diese neu starten, wird die Mitigation nicht mehr benötigt und kann entfernt werden.
# 1. Erkennen (nur lesend) — erzeugt einen Statusbericht pro Host
ansible-playbook -i inventory check_cve_2026_31431.yml
# 2. Mitigation zuerst auf einem einzelnen Host bereitstellen (kein automatischer Neustart)
ansible-playbook -i inventory --limit <ip-or-host> \
-e apply_mitigation=true check_cve_2026_31431.yml
# 3. Host über Ihren üblichen Mechanismus neu starten
# 4. Erneut erkennen; „Mitigation aktiv: ja" bestätigen
# 5. In Batches auf den Rest der Flotte ausrollen
Der Bericht eines verwundbaren Hosts sieht so aus:
═══════════════════════════════════════════
Host: 192.168.1.42
Distro: Ubuntu 24.04
Kernel: 6.8.0-60-generic
Mitigation aktiv: nein
Mitigation bereitgestellt: nein
═══════════════════════════════════════════
⚠️ 192.168.1.42: CVE-2026-31431-Mitigation ist NICHT aktiv.
Außerhalb des Rahmens dieses Rezepts. Manuelle Einzeiler:
# Debian / Ubuntu
sudo sed -i 's/ initcall_blacklist=algif_aead_init//' /etc/default/grub
sudo update-grub
sudo reboot
# RHEL-Familie
sudo grubby --update-kernel=ALL --remove-args="initcall_blacklist=algif_aead_init"
sudo reboot
Der Erkennungspfad ist strikt nur lesend (uname, /proc/cmdline einlesen,
/etc/default/grub einlesen, grubby --info=ALL). Sonden verwenden
failed_when: false, sodass unerwartete Ausgaben den Play nie abbrechen.
ignore_unreachable: true bedeutet, dass nicht erreichbare Hosts eine klare
„UNREACHABLE — als VERWUNDBAR behandeln"-Warnung erhalten, statt den Lauf fehlschlagen zu lassen.
Der Anwendungspfad ist in block/rescue gekapselt, sodass ein einzelner fehlerhafter Host nie
den Rest stoppt. Die Grub-Bearbeitung ist idempotent und über
mitigation_staged abgesichert, sodass erneute Läufe No-Ops sind.
bash tests/run-checks.sh all
Stufen: lint (yamllint + ansible-lint) → syntax
(ansible-playbook --syntax-check) → dry-run (führt den Playbook im
--check-Modus gegen localhost mit -c local aus, sowohl Erkennungs- als auch Anwendungspfad). Dasselbe Skript wird von der GitHub-Actions-Matrix über
debian:12-, ubuntu:22.04-, ubuntu:24.04- und almalinux:9-Container
bei jedem Push und Pull Request aufgerufen.
Was der Dry-Run nicht verifiziert:
update-grub nicht aus und löst keinen Neustart aus./proc/cmdline in einem CI-Container zeigt die Cmdline des Runner-Hosts,
nicht die des Containers, sodass mitigation_active in der CI-Ausgabe bedeutungslos ist.
CI beweist, dass der Playbook sauber läuft; es beweist nicht, dass ein Host
mitigiert ist.Weitere Details finden Sie in tests/README.md.
Schwachstelle entdeckt von Taeyang Lee (Theori) und zu einer vollständigen Exploit-Kette ausgebaut vom Xint Code Research Team, dem die Anerkennung dafür gebührt, die Sicherheits-Community aufmerksam gemacht zu haben. Dieses Rezept automatisiert lediglich die von ihnen empfohlene Mitigation.
Beerware. Siehe LICENSE. Kurzfassung: Mach damit, was du willst;
wenn wir uns je treffen, kauf mir ein Bier.
AESTECHNO — Hugues Orgitello — Elektronik-Designhaus, Montpellier, Frankreich.