
# Playbooks Ansible pour auditer et atténuer CVE-2026-31431 (« Copy Fail »), une vulnérabilité d'élévation de privilèges locale dans le module `algif_aead` du noyau Linux affectant toutes les principales distributions depuis 2017.
Élévation de privilèges / corruption mémoire du noyau Linux
algif_aead
Playbooks d'audit et d'atténuation basés sur Ansible — prêts à être exécutés en production
Copy Fail (CVE-2026-31431) est une vulnérabilité dans le module algif_aead
du noyau Linux — l'interface AEAD orientée utilisateur de la famille de sockets
crypto AF_ALG.
Une faille dans le chemin copy_*user du noyau à l'intérieur du gestionnaire de
requêtes AEAD permet à un utilisateur local non privilégié de corrompre la mémoire
du noyau ou d'élever ses privilèges en forgeant une requête de socket malformée.
| Champ | Détail |
|---|
| ID CVE | CVE-2026-31431 |
| Surnom | Copy Fail |
| Composant | Noyau Linux — algif_aead (net/socket.c, crypto/algif_aead.c) |
| Vecteur d'attaque | Local |
| Privilèges requis | Faibles (utilisateur non privilégié) |
| Impact | Corruption mémoire du noyau / élévation de privilèges locale |
| Corrigé | Correctif en amont du noyau en cours — vérifiez auprès de votre éditeur de distribution |
| Distribution | Versions concernées | Statut |
|---|---|---|
| Ubuntu 22.04 / 24.04 | noyaux < version corrigée | Correctif en attente — voir l'USN Ubuntu |
| Debian 12 (Bookworm) | noyaux < version corrigée | Correctif en attente |
| RHEL / AlmaLinux / Rocky 8 & 9 | noyaux < version corrigée | Correctif en attente |
| Amazon Linux 2 / 2023 | noyaux < version corrigée | Correctif en attente |
| Amont générique | algif_aead compilé ou chargé automatiquement | Vulnérable si le module est présent |
Un système n'est pas à risque immédiat si
algif_aeadn'est pas chargé et qu'aucun outil espace utilisateur ne le charge à la demande (voir l'étape 1 de l'audit).
| Sous-système | Affecté par cette CVE ? | Affecté par l'atténuation ? |
|---|---|---|
| dm-crypt / LUKS | Non | Non |
| kTLS | Non | Non |
| IPsec / StrongSwan | Non | Non |
| OpenSSL (build par défaut) | Non | Non |
| GnuTLS / NSS | Non | Non |
| OpenSSH | Non | Non |
| Moteur afalg d'OpenSSL | Potentiellement oui | Oui — à examiner avant application |
Outils kcapi-enc / kcapi-dgst | Oui | Oui |
.
├── audit_algif_aead.yml # Étape 1 — audit : détecter l'exposition par hôte
├── mitigate_copyfail.yml # Étape 2 — atténuation : décharger + mettre sur liste noire le module
└── README.md # Ce document
community.general (ansible-galaxy collection install community.general)become: true (sudo) sur les hôtes cibleslsof installé sur les cibles (généralement présent par défaut)inventory.ini est ignoré par git — il reste local et n'atteint jamais le dépôt.
inventory.ini.example est le modèle versionné à partir duquel tout le monde démarre.
# Cloner et préparer
git clone https://github.com/your-org/copy-fail-CVE-2026-31431.git
cd copy-fail-CVE-2026-31431
cp inventory.ini.example inventory.ini
# Modifier inventory.ini avec vos vrais hôtes, puis exécuter :
ansible-playbook -i inventory.ini audit_algif_aead.yml
Les chemins suivants sont ignorés par git pour éviter toute fuite de données d'infrastructure :
| Chemin ignoré par git | Pourquoi |
|---|---|
inventory.ini | Vrais noms d'hôtes / IP |
inventories/ | Tout répertoire d'inventaire local |
copyfail_reports/ | La sortie d'audit contient les versions du noyau, les listes de processus |
.vault_pass | Fichier de mot de passe Ansible Vault |
*.retry | Artefacts de nouvelle tentative Ansible |
Exécutez le playbook d'audit avant de toucher à quoi que ce soit. Il collecte des preuves par hôte et écrit un rapport à la fois localement et sur chaque cible.
ansible-playbook -i inventory.ini audit_algif_aead.yml
Les rapports sont récupérés dans ./copyfail_reports/<hostname>_audit.txt.
| Vérification | Commande | Verdict |
|---|---|---|
| Version du noyau | uname -r | Informatif |
| Module chargé ? | lsmod | grep algif_aead | Chargé = risque d'exposition |
| Sockets AF_ALG actives | lsof | grep AF_ALG | Utilisateurs trouvés = à examiner obligatoirement |
| Moteur afalg d'OpenSSL | openssl engine | grep afalg | Actif = examiner l'impact |
| Outils kcapi présents | which kcapi-* | Présents = utilisateurs potentiels |
| Atténuation déjà appliquée | stat /etc/modprobe.d/disable-algif.conf | Présent = déjà atténué |
| Condition | Action recommandée |
|---|---|
| Module NON chargé | Risque immédiat faible — surveiller le correctif du noyau |
| Module chargé, aucun utilisateur de socket AF_ALG | Sans risque d'appliquer l'atténuation |
| Module chargé et utilisateurs AF_ALG actifs | Examiner les processus avant d'appliquer l'atténuation |
| Fichier d'atténuation déjà présent | L'atténuation a été appliquée précédemment — vérifier |
Exécutez d'abord l'audit. Le playbook d'atténuation peut être exécuté de manière idempotente, mais l'audit vous fournit la piste de preuves.
ansible-playbook -i inventory.ini mitigate_copyfail.yml
ansible-playbook -i inventory.ini mitigate_copyfail.yml \
-e '{"skip_hosts": ["db-prod-01", "hsm-node-02"]}'
/etc/modprobe.d/disable-algif.conf avec install algif_aead /bin/falsealgif_aead du noyau en cours d'exécution (aucun redémarrage requis pour la protection initiale)update-initramfs sur Debian/Ubuntu, dracut --force sur RHEL)/var/backup/copyfail_mitigation/mitigation.logAucun redémarrage n'est requis pour retirer le module de la mémoire.
Un redémarrage reste recommandé pour confirmer que la liste noire prend effet et pour établir un état post-atténuation propre.
Une fois le playbook terminé, vérifiez sur n'importe quel hôte cible :
# Le module ne doit PAS apparaître
lsmod | grep algif_aead
# Le fichier de liste noire doit exister et contenir la ligne install
cat /etc/modprobe.d/disable-algif.conf
# Le chargement manuel doit être rejeté
sudo modprobe algif_aead # Attendu : FATAL: Module algif_aead not found or refused
Une fois que votre éditeur publie un noyau corrigé et que vous l'avez appliqué :
# Sur chaque hôte — supprimer la liste noire
sudo rm /etc/modprobe.d/disable-algif.conf
# Reconstruire l'initramfs
sudo update-initramfs -u # Debian / Ubuntu
sudo dracut --force # RHEL / CentOS / Amazon Linux
# Redémarrer sur le noyau corrigé
sudo reboot
Publié sous licence MIT.
À utiliser à vos propres risques. Validez toujours dans un environnement de
préproduction avant d'appliquer à des systèmes de production.
Maintenu par la communauté. Les PR et les rapports de problèmes sont les bienvenus.