
# Playbook de Ansible para detectar y aplicar la mitigación de la línea de comandos del kernel para CVE-2026-31431 (Copy Fail) en flotas Debian/Ubuntu/RHEL, con detección de solo lectura y aplicación idempotente.
Detecta y aplica la mitigación de la línea de comandos del kernel para CVE-2026-31431 ("Copy Fail") en una flota Debian / Ubuntu / familia RHEL usando Ansible.
La CVE es una falla de escalada de privilegios local en la interfaz
algif_aead de AF_ALG del kernel de Linux. Cualquier usuario local sin privilegios — incluidos
cuentas de servicio como www-data, mysql, o procesos dentro de una aplicación web comprometida por RCE —
puede encadenarla hasta root en unas pocas syscalls. El bug afecta a todas las principales
distribuciones publicadas desde 2017.
initcall_blacklist=algif_aead_init
a la línea de comandos del kernel — cuando se invoca con .-e apply_mitigation=trueLa lista negra de la línea de comandos del kernel funciona en ambas configuraciones:
integrada (familia RHEL) y modular (Debian/Ubuntu), algo que el workaround frecuentemente citado
modprobe blacklist algif_aead no logra.
algif_aead_init() es la función del kernel que registra el algoritmo aead de AF_ALG
con el subsistema de sockets criptográficos durante el arranque. El parámetro de la línea de comandos
initcall_blacklist=algif_aead_init indica al kernel que omita esa initcall. El código vulnerable sigue
en el binario del kernel, pero socket(AF_ALG, ..., "aead") devuelve ENOENT, por lo que la primera
syscall del exploit falla. Sin superficie alcanzable, no hay escalada de privilegios.
Una vez que los proveedores publican kernels parcheados y reinicias con ellos, la mitigación ya no es necesaria y puede eliminarse.
# 1. Detectar (solo lectura) — genera un informe de estado por host
ansible-playbook -i inventory check_cve_2026_31431.yml
# 2. Preparar la mitigación primero en un solo host (sin reinicio automático)
ansible-playbook -i inventory --limit <ip-o-host> \
-e apply_mitigation=true check_cve_2026_31431.yml
# 3. Reiniciar ese host mediante tu mecanismo habitual
# 4. Volver a detectar; confirmar "Mitigación activa: sí"
# 5. Desplegar al resto de la flota por lotes
El informe de un host vulnerable tiene este aspecto:
═══════════════════════════════════════════
Host: 192.168.1.42
Distro: Ubuntu 24.04
Kernel: 6.8.0-60-generic
Mitigación activa: no
Mitigación preparada: no
═══════════════════════════════════════════
⚠️ 192.168.1.42: la mitigación de CVE-2026-31431 NO está activa.
Fuera del alcance de esta receta. One-liners manuales:
# Debian / Ubuntu
sudo sed -i 's/ initcall_blacklist=algif_aead_init//' /etc/default/grub
sudo update-grub
sudo reboot
# Familia RHEL
sudo grubby --update-kernel=ALL --remove-args="initcall_blacklist=algif_aead_init"
sudo reboot
La ruta de detección es estrictamente de solo lectura (uname, leer /proc/cmdline,
leer /etc/default/grub, grubby --info=ALL). Las sondas usan
failed_when: false para que una salida inesperada nunca aborte el play.
ignore_unreachable: true significa que los hosts inalcanzables reciben una advertencia clara
"INALCANZABLE — tratar como VULNERABLE" en lugar de fallar la ejecución.
La ruta de aplicación está envuelta en block/rescue para que un único host con problemas nunca
detenga al resto. La edición de grub es idempotente y está condicionada a
mitigation_staged para que las re-ejecuciones sean no operativas.
bash tests/run-checks.sh all
Etapas: lint (yamllint + ansible-lint) → syntax
(ansible-playbook --syntax-check) → dry-run (ejecuta el playbook en
modo --check contra localhost con -c local, tanto la ruta de detección como la de aplicación). El mismo script lo invoca la matriz de GitHub Actions en
contenedores debian:12, ubuntu:22.04, ubuntu:24.04 y almalinux:9
en cada push y pull request.
Lo que el dry-run no verifica:
update-grub ni dispara un reinicio./proc/cmdline dentro de un contenedor de CI muestra la línea de comandos del host del runner,
no la del contenedor, por lo que mitigation_active en la salida de CI no tiene significado.
CI demuestra que el playbook se ejecuta limpiamente; no demuestra que un host esté
mitigado.Consulta tests/README.md para más información.
Vulnerabilidad descubierta por Taeyang Lee (Theori) y convertida en una cadena de exploit completa por el Xint Code Research Team, quienes merecen el crédito por hacer que la comunidad de seguridad prestara atención. Esta receta solo automatiza la mitigación que ellos recomendaron.
Beerware. Consulta LICENSE. En resumen: haz lo que quieras con esto;
si alguna vez nos encontramos, invítame una cerveza.
AESTECHNO — Hugues Orgitello — empresa de diseño electrónico, Montpellier, Francia.