
Un playbook Ansible pour atténuer la vulnérabilité CVE-2026-31431 sur les OS basés sur RHEL et Debian.
Un playbook Ansible pour appliquer et annuler l'atténuation du module noyau CVE-2026-31431 (AF_ALG) sur les systèmes Debian/Ubuntu et RHEL/Rocky/AlmaLinux.
Ce playbook atténue la CVE-2026-31431 en désactivant le module noyau vulnérable algif_aead :
grubby pour ajouter un argument de liste noire initcall au noyau⚠️ Important : Le playbook ne redémarre PAS automatiquement vos serveurs. Il affiche un message de rappel lorsqu'un redémarrage est nécessaire, permettant aux opérateurs de planifier les redémarrages pendant les fenêtres de maintenance.
Des fichiers de configuration d'exemple sont fournis dans le répertoire examples/ :
# Copier l'inventaire d'exemple
cp examples/inventory/hosts.ini inventory/hosts.ini
# Copier la configuration ansible d'exemple (facultatif)
cp examples/ansible.cfg ansible.cfg
Consultez examples/README.md pour des instructions de personnalisation détaillées.
Modifiez inventory/hosts.ini avec les détails de vos serveurs :
[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
Pour appliquer l'atténuation à tous les hôtes de votre inventaire :
ansible-playbook mitigation-playbook.yaml
Pour appliquer à des hôtes ou groupes spécifiques :
ansible-playbook mitigation-playbook.yaml --limit webservers
Pour annuler (supprimer) l'atténuation :
ansible-playbook mitigation-playbook.yaml -e "rollback=true"
Ou utilisez la balise rollback :
ansible-playbook mitigation-playbook.yaml --tags rollback -e "rollback=true"
Pour supprimer les fichiers drop-in systemd obsolètes (si vous migrez depuis une version antérieure de cette atténuation) :
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."
}
| Famille OS | Redémarrage requis lorsque | Comportement |
|---|---|---|
| Debian/Ubuntu | Le module était « en cours d'utilisation » et n'a pas pu être déchargé | Rappel uniquement |
| RHEL/Rocky/Alma | Grubby a apporté des modifications aux arguments du noyau | Rappel uniquement |
Le playbook est conçu pour ne jamais redémarrer automatiquement afin de donner aux opérateurs un contrôle total sur les fenêtres de maintenance.
| Variable | Défaut | Description |
|---|---|---|
rollback | false | Définir sur true pour annuler l'atténuation |
run_systemd_cleanup | false | Définir sur true pour supprimer les drop-ins systemd obsolètes |
target_hosts | all | Limiter l'exécution à des hôtes ou groupes spécifiques |
mitigation_serial | 25% | Taille de lot pour l'exécution progressive |
mitigation - Exécuter uniquement les tâches d'application de l'atténuationrollback - Exécuter uniquement les tâches d'annulationsystemd-cleanup - Exécuter uniquement les tâches de nettoyage systemdExemple :
# Exécuter uniquement les tâches d'atténuation
ansible-playbook -i inventory/hosts.ini mitigation-playbook.yaml --tags mitigation
# Exécuter uniquement les tâches d'annulation
ansible-playbook -i inventory/hosts.ini mitigation-playbook.yaml --tags rollback -e "rollback=true"
Après avoir exécuté le playbook (et redémarré si demandé), vérifiez que l'atténuation est active :
# Vérifier si le module est en liste noire
cat /etc/modprobe.d/disable-algif.conf
# Vérifier si le module est chargé (ne doit rien renvoyer)
lsmod | grep algif_aead
# Vérifier si l'argument du noyau est présent
grep initcall_blacklist /proc/cmdline
# Devrait afficher quelque chose comme :
# ... initcall_blacklist=algif_aead_init ...
Licence MIT - Voir le fichier LICENSE pour plus de détails
Les contributions sont les bienvenues ! Veuillez soumettre des problèmes et des demandes de tirage (pull requests).
Ce playbook a été créé en s'inspirant des sources suivantes :
Ce playbook est fourni tel quel. Testez toujours minutieusement dans votre environnement avant de l'appliquer à des systèmes de production. Les auteurs ne sont pas responsables des dommages système ou des temps d'arrêt causés par l'utilisation de ce playbook.