
Un playbook de Ansible para mitigar la vulnerabilidad CVE-2026-31431 en sistemas operativos basados en RHEL y Debian.
Un playbook de Ansible para aplicar y revertir la mitigación del módulo del kernel CVE-2026-31431 (AF_ALG) en sistemas Debian/Ubuntu y RHEL/Rocky/AlmaLinux.
Este playbook mitiga CVE-2026-31431 deshabilitando el módulo vulnerable del kernel algif_aead:
grubby para añadir un argumento de lista negra de initcall del kernel⚠️ Importante: El playbook NO reinicia automáticamente sus servidores. Muestra un mensaje de recordatorio cuando se requiere un reinicio, permitiendo a los operadores programar reinicios durante ventanas de mantenimiento.
Se proporcionan archivos de configuración de ejemplo en el directorio examples/:
# Copiar inventario de ejemplo
cp examples/inventory/hosts.ini inventory/hosts.ini
# Copiar configuración de ansible de ejemplo (opcional)
cp examples/ansible.cfg ansible.cfg
Consulte examples/README.md para instrucciones detalladas de personalización.
Edite inventory/hosts.ini con los detalles de sus servidores:
[servers]
server1.example.com
server2.example.com ansible_host=192.168.1.50
[servers:vars]
ansible_user=admin
ansible_become=true
ansible all -m ping
ansible-playbook mitigation-playbook.yaml
Para aplicar la mitigación a todos los hosts de su inventario:
ansible-playbook mitigation-playbook.yaml
Para aplicar a hosts o grupos específicos:
ansible-playbook mitigation-playbook.yaml --limit webservers
Para revertir (eliminar) la mitigación:
ansible-playbook mitigation-playbook.yaml -e "rollback=true"
O use la etiqueta rollback:
ansible-playbook mitigation-playbook.yaml --tags rollback -e "rollback=true"
Para eliminar archivos drop-in de systemd obsoletos (si migra desde una versión anterior de esta mitigación):
ansible-playbook mitigation-playbook.yaml -e "run_systemd_cleanup=true"
TASK [CVE-2026-31431 Summary (Debian)] ****************************************
ok: [server1] => {
"msg": [
"===== CVE-2026-31431 SUMMARY — server1 =====",
"Action: apply",
"Module loaded (pre): False",
"Module loaded (post): False",
"Reboot required: False"
]
}
TASK [Remind operator to reboot (RHEL)] ****************************************
ok: [server2] => {
"msg": "REMINDER: Kernel args changed. Reboot required to activate mitigation."
}
TASK [CVE-2026-31431 Summary (Red Hat)] ****************************************
ok: [server2] => {
"msg": [
"===== CVE-2026-31431 SUMMARY — server2 =====",
"Action: apply",
"Kernel arg active (pre): False",
"Kernel arg active (post): False",
"Reboot required: True"
]
}
TASK [Remind to reboot if required (Red Hat)] **********************************
ok: [server2] => {
"msg": "REMINDER: A reboot is required to activate/deactivate the mitigation on this Red Hat-based host."
}
| Familia de SO | Reinicio Requerido Cuando | Comportamiento |
|---|---|---|
| Debian/Ubuntu | El módulo estaba "en uso" y no pudo descargarse | Solo recordatorio |
| RHEL/Rocky/Alma | Grubby realizó cambios en los argumentos del kernel | Solo recordatorio |
El playbook está diseñado para nunca reiniciar automáticamente para dar a los operadores control total sobre las ventanas de mantenimiento.
| Variable | Valor por Defecto | Descripción |
|---|---|---|
rollback | false | Establecer en true para revertir la mitigación |
run_systemd_cleanup | false | Establecer en true para eliminar drop-ins de systemd obsoletos |
target_hosts | all | Limitar la ejecución a hosts o grupos específicos |
mitigation_serial | 25% | Tamaño de lote para ejecución en paralelo |
mitigation - Ejecutar solo las tareas de aplicación de mitigaciónrollback - Ejecutar solo las tareas de reversiónsystemd-cleanup - Ejecutar solo las tareas de limpieza de systemdEjemplo:
# Ejecutar solo tareas de mitigación
ansible-playbook -i inventory/hosts.ini mitigation-playbook.yaml --tags mitigation
# Ejecutar solo tareas de reversión
ansible-playbook -i inventory/hosts.ini mitigation-playbook.yaml --tags rollback -e "rollback=true"
Después de ejecutar el playbook (y reiniciar si se solicita), verifique que la mitigación esté activa:
# Verificar si el módulo está en lista negra
cat /etc/modprobe.d/disable-algif.conf
# Verificar si el módulo está cargado (no debería devolver nada)
lsmod | grep algif_aead
# Verificar si el argumento del kernel está presente
grep initcall_blacklist /proc/cmdline
# Debería mostrar algo como:
# ... initcall_blacklist=algif_aead_init ...
Licencia MIT - Consulte el archivo LICENSE para más detalles
¡Las contribuciones son bienvenidas! Por favor, envíe problemas y solicitudes de extracción.
Este playbook fue creado tomando inspiración de las siguientes fuentes:
Este playbook se proporciona tal cual. Siempre pruebe exhaustivamente en su entorno antes de aplicarlo a sistemas de producción. Los autores no son responsables de ningún daño al sistema o tiempo de inactividad causado por el uso de este playbook.