
# Playbook Ansible per rilevare e applicare la mitigazione della riga di comando del kernel per CVE-2026-31431 (Copy Fail) su flotte Debian/Ubuntu/RHEL, con rilevamento in sola lettura e applicazione idempotente.
Rileva e applica la mitigazione tramite parametri della riga di comando del kernel per CVE-2026-31431 ("Copy Fail") su un parco macchine Debian / Ubuntu / famiglia RHEL usando Ansible.
La CVE è una falla di escalation dei privilegi locale nell'interfaccia algif_aead AF_ALG del kernel Linux.
Qualsiasi utente locale non privilegiato — inclusi account di servizio come www-data, mysql o processi
all'interno di un'app web compromessa via RCE — può concatenarla fino a root in poche syscall. Il bug
interessa tutte le principali distribuzioni rilasciate dal 2017.
initcall_blacklist=algif_aead_init
alla riga di comando del kernel — quando viene invocata con .-e apply_mitigation=trueLa blacklist tramite parametri della riga di comando del kernel funziona su configurazioni sia integrate
(famiglia RHEL) sia modulari (Debian/Ubuntu), cosa che il workaround spesso citato
modprobe blacklist algif_aead non fa.
algif_aead_init() è la funzione del kernel che registra l'algoritmo aead AF_ALG
con il sottosistema socket crittografico all'avvio. Il parametro della riga di comando
initcall_blacklist=algif_aead_init istruisce il kernel a saltare quella initcall.
Il codice vulnerabile è ancora nel binario del kernel, ma
socket(AF_ALG, ..., "aead") restituisce ENOENT, quindi la prima syscall
dell'exploit fallisce. Nessuna superficie raggiungibile, nessuna escalation di privilegi.
Quando i vendor distribuiranno kernel patchati e riavvierai su di essi, la mitigazione non sarà più necessaria e potrà essere rimossa.
# 1. Rileva (sola lettura) — produce un report di stato per host
ansible-playbook -i inventory check_cve_2026_31431.yml
# 2. Prepara la mitigazione su un singolo host prima (nessun riavvio automatico)
ansible-playbook -i inventory --limit <ip-o-host> \
-e apply_mitigation=true check_cve_2026_31431.yml
# 3. Riavvia quell'host tramite il tuo meccanismo abituale
# 4. Rileva di nuovo; conferma "Mitigazione attiva: sì"
# 5. Distribuisci al resto del parco macchine in lotti
Il report di un host vulnerabile appare così:
═══════════════════════════════════════════
Host: 192.168.1.42
Distro: Ubuntu 24.04
Kernel: 6.8.0-60-generic
Mitigazione attiva: no
Mitigazione preparata: no
═══════════════════════════════════════════
⚠️ 192.168.1.42: la mitigazione CVE-2026-31431 NON è attiva.
Fuori dallo scopo di questa ricetta. Comandi manuali:
# Debian / Ubuntu
sudo sed -i 's/ initcall_blacklist=algif_aead_init//' /etc/default/grub
sudo update-grub
sudo reboot
# Famiglia RHEL
sudo grubby --update-kernel=ALL --remove-args="initcall_blacklist=algif_aead_init"
sudo reboot
Il percorso di rilevamento è strettamente in sola lettura (uname, lettura di /proc/cmdline,
lettura di /etc/default/grub, grubby --info=ALL). Le sonde usano
failed_when: false così un output inatteso non interrompe mai il play.
ignore_unreachable: true significa che gli host non raggiungibili ricevono un chiaro
avviso "UNREACHABLE — trattare come VULNERABILE" invece di far fallire l'esecuzione.
Il percorso di applicazione è racchiuso in block/rescue così un singolo host problematico non
ferma mai il resto. La modifica di grub è idempotente e condizionata da
mitigation_staged così le riesecuzioni sono no-op.
bash tests/run-checks.sh all
Fasi: lint (yamllint + ansible-lint) → syntax
(ansible-playbook --syntax-check) → dry-run (esegue il playbook in
modalità --check contro localhost con -c local, sia il percorso di rilevamento sia quello di
applicazione). Lo stesso script viene invocato dalla matrice GitHub Actions su
container debian:12, ubuntu:22.04, ubuntu:24.04 e almalinux:9
a ogni push e pull request.
Cosa il dry-run non verifica:
update-grub e non attiva un riavvio./proc/cmdline dentro un container CI mostra la riga di comando dell'host runner,
non quella del container, quindi mitigation_active nell'output CI è privo di significato.
La CI dimostra che il playbook viene eseguito correttamente; non dimostra che un host sia
mitigato.Vedi tests/README.md per maggiori dettagli.
Vulnerabilità scoperta da Taeyang Lee (Theori) e trasformata in una catena di exploit completa dal Xint Code Research Team, a cui va il merito di aver spinto la community della sicurezza a prestare attenzione. Questa ricetta automatizza semplicemente la mitigazione che hanno raccomandato.
Beerware. Vedi LICENSE. In breve: fai quello che vuoi con questo;
se mai ci incontriamo, offrimi una birra.
AESTECHNO — Hugues Orgitello — studio di progettazione elettronica, Montpellier, Francia.