
Script Bash pour évaluer l'exposition d'un hôte Linux à la CVE-2026-31431, vérifier l'état du module du noyau, appliquer l'atténuation en bloquant algif_aead, et mettre à jour les paquets du noyau.
Ce dépôt documente un script Bash utilisé pour évaluer l'exposition à CVE-2026-31431 sur des hôtes Linux, avec un accent sur Ubuntu, et pour appliquer une atténuation simple en bloquant le module algif_aead.
Versions linguistiques :
README.mdREADME.pt-BR.mdLe script prend en charge trois modes :
--check : collecter les informations de l'hôte et classer l'état actuel.--mitigate : créer une règle modprobe pour bloquer le module vulnérable et tenter de le décharger.--update : exécuter les mises à niveau des paquets du noyau via apt.CVE-2026-31431, publiquement désignée sous le nom de Copy Fail, est une vulnérabilité d'élévation de privilèges locale dans le noyau Linux associée au module algif_aead, qui implémente l'interface AEAD de l'API crypto du noyau en espace utilisateur via AF_ALG.
En termes pratiques, le problème permet à un utilisateur local à faibles privilèges d'abuser d'un défaut logique dans le chemin de gestion de la mémoire de ce sous-système et d'étendre l'impact jusqu'à un compromis complet de l'intégrité du système. Le score publié par kernel.org et reflété dans la NVD est CVSS 7.8, avec le vecteur AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H, ce qui signifie que l'attaque nécessite une exécution locale mais a un impact élevé sur la confidentialité, l'intégrité et la disponibilité.
2017, lorsqu'une optimisation en place a été ajoutée à algif_aead.22 avril 2026.Copy Fail et avec une preuve de concept publique, a eu lieu le 29 avril 2026.1er avril 2026, avant la divulgation publique aux utilisateurs finaux.Selon les avis techniques publiés, le défaut repose sur la combinaison de :
AF_ALG du noyaualgif_aeadsplice()Le résultat pratique est la capacité pour un processus local d'effectuer une petite écriture contrôlée dans des pages adossées au cache de pages de fichiers lisibles. Dans des conditions favorables, cela suffit à transformer un point d'appui local limité en élévation de privilèges root.
Le risque réel n'est pas simplement « d'exécuter un noyau Linux vulnérable », mais de permettre à du code local à faible confiance d'atteindre ce chemin du noyau. Dans les environnements d'entreprise, cela signifie généralement une exposition plus élevée sur :
Si un attaquant dispose déjà d'une forme d'exécution locale, même sans root, cette CVE peut devenir l'étape suivante vers le compromis de l'hôte. En pratique, cela élargit le risque de :
algif_aeadalgif_aead fait partie de l'interface crypto du noyau en espace utilisateur (AF_ALG). Il permet aux applications d'utiliser les primitives cryptographiques du noyau via des sockets, en particulier les opérations AEAD (chiffrement authentifié avec données associées).
Ce module n'est généralement pas essentiel pour la plupart des charges de travail serveur standard. Selon les recommandations d'atténuation publiées par CERT-EU, désactiver algif_aead comme atténuation temporaire :
dm-crypt ou LUKSkTLSIPsec/XFRMOpenSSL, GnuTLS, NSS ou SSH en usage standardEn revanche, sa désactivation peut affecter :
afalgAF_ALG directementaead, skcipher ou hash via l'API crypto du noyauEn d'autres termes, pour la plupart des hôtes d'entreprise, bloquer le module tend à avoir un faible impact. Dans les appliances, les piles cryptographiques personnalisées ou les chemins logiciels fortement optimisés, l'impact doit être validé avant le déploiement.
Bloquer le module réduit immédiatement l'exposition, mais cela comporte des compromis :
AF_ALG peuvent échouer au démarrage ou perdre l'accélération cryptographique adossée au noyauPour les environnements de production, l'approche la plus sûre consiste à appliquer l'atténuation dans une fenêtre de maintenance contrôlée et à valider les applications critiques ensuite.
La mise sur liste noire du module n'est qu'une atténuation temporaire. Le correctif permanent est :
Mesures supplémentaires recommandées :
AF_ALG avec seccomp dans les conteneurs et les pipelines lorsque cela est applicableafalg ou l'API crypto du noyau est explicitement utiliséeLe script inspecte :
/etc/os-releasealgif_aeadmodprobe/var/run/reboot-required)pro fix CVE-2026-31431 --dry-run, lorsque disponibleSur cette base, il renvoie l'une des classifications suivantes :
PATCHED_OR_NOT_AFFECTEDLIKELY_NOT_VULNERABLEMITIGATEDVULNERABLE_MODULE_LOADEDPOTENTIALLY_VULNERABLEUNKNOWNEn résumé :
PATCHED_OR_NOT_AFFECTED.algif_aead n'existe pas dans le noyau actuel, le statut tend vers LIKELY_NOT_VULNERABLE.MITIGATED.VULNERABLE_MODULE_LOADED.POTENTIALLY_VULNERABLE.modinfomodprobelsmodawkgrephostnameunameapt-get pour --updatesudo lors d'une exécution en tant qu'utilisateur non rootpro facultativement, pour enrichir l'analyse sur UbuntuSi le fichier du script est nommé check_cve_2026_31431.sh :
chmod +x check_cve_2026_31431.sh
./check_cve_2026_31431.sh --check
./check_cve_2026_31431.sh --check
Exemple de sortie :
Host: srv-app-01
OS: Ubuntu 24.04 LTS
Kernel: 6.8.0-58-generic
CVE: CVE-2026-31431
Module exists: 1
Module loaded: 0
Module blocked: 1
Ubuntu affected: yes
Fix available: yes
Reboot required: 0
Status: MITIGATED
Reason: algif_aead exists but is blocked and not loaded
./check_cve_2026_31431.sh --check --json
Exemple :
{"host":"srv-app-01","os":"Ubuntu 24.04 LTS","kernel":"6.8.0-58-generic","cve":"CVE-2026-31431","module":"algif_aead","module_exists":1,"module_loaded":0,"module_blocked":1,"ubuntu_affected":"yes","fix_available":"yes","reboot_required":0,"status":"MITIGATED","reason":"algif_aead exists but is blocked and not loaded"}
Cette sortie est utile pour l'automatisation, l'inventaire des actifs et les pipelines de conformité.
Le mode --mitigate crée le fichier :
/etc/modprobe.d/disable-algif_aead-CVE-2026-31431.conf
Avec le contenu suivant :
install algif_aead /bin/false
blacklist algif_aead
Ensuite, le script tente de retirer le module de la mémoire avec :
modprobe -r algif_aead
Utilisation :
./check_cve_2026_31431.sh --mitigate
Si l'utilisateur n'est pas root, le script tentera d'utiliser sudo.
Le mode --update exécute :
apt-get update
apt-get install --only-upgrade -y 'linux-image-*' 'linux-modules-*' 'linux-aws*'
Utilisation :
./check_cve_2026_31431.sh --update
Ce mode tente de mettre à niveau les paquets liés au noyau sur les systèmes basés sur Debian et Ubuntu. Dans d'autres environnements, cette étape peut ne pas s'appliquer.
./check_cve_2026_31431.sh --help
Sortie :
Usage: ./check_cve_2026_31431.sh [--check|--mitigate|--update] [--json]
ubuntu_affected et fix_available dépendent de la présence de la commande pro.--update utilise des modèles de paquets orientés Ubuntu et Debian et peut ne pas couvrir tous les noyaux personnalisés.--check pour évaluer l'hôte.--mitigate.--update ou appliquer la mise à jour officielle du fournisseur.--check --json pour valider l'état final et conserver les preuves.Pour plus de clarté dans la publication, le script devrait idéalement utiliser un nom descriptif tel que :
check_cve_2026_31431.sh
Matériel organisé et publié avec le crédit de SEC17.
Site web officiel :
https://sec17.com