En bref

  • CVE-2026-31431 « Copy Fail » : élévation de privilèges locale fiable et déterministe vers root sur la quasi-totalité des distributions Linux livrées depuis 2017.
  • Module noyau algif_aead vulnérable (interface socket AEAD de l'API crypto AF_ALG) — script Python de 732 octets suffit, CVSS 7.8, ajoutée au catalogue CISA KEV le 1er mai 2026.
  • Mettre à jour le noyau Linux vers 6.18.22, 6.19.12 ou 7.0 ; à défaut, désactiver le module algif_aead via modprobe.

Les faits

CVE-2026-31431, baptisée « Copy Fail » par ses découvreurs, est une vulnérabilité d'élévation de privilèges locale (LPE) dans le noyau Linux dévoilée fin avril 2026 puis intégrée au catalogue Known Exploited Vulnerabilities (KEV) de la CISA le 1er mai 2026. La faille porte un score CVSSv3.1 de 7.8 et un vecteur AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H — exploitation locale, sans interaction utilisateur, avec impact total sur la confidentialité, l'intégrité et la disponibilité. La CISA a fixé une date limite de remédiation au 15 mai 2026 pour les agences fédérales civiles américaines, signe de la criticité réelle de la faille malgré un score CVSS « seulement élevé ».

Le bug réside dans le module algif_aead, l'interface socket AEAD (Authenticated Encryption with Associated Data) exposée aux applications utilisateur via l'adresse AF_ALG de l'API crypto du noyau. Le mécanisme historique permettait initialement aux applications utilisateurs de déléguer au noyau les opérations de chiffrement authentifié. Selon les chercheurs de Xint qui ont publié l'analyse complète, la racine du problème combine trois ingrédients introduits sur plusieurs années : l'ajout du template cryptographique authencesn en 2011 (utilisé par IPsec), l'introduction du support socket AEAD via AF_ALG en 2015, et l'ajout d'une optimisation in-place dans algif_aead.c en 2017.

Concrètement, l'algorithme authencesn(hmac(sha256),cbc(aes)) écrit quatre octets à l'offset assoclen + cryptlen comme espace de travail pour la réorganisation de l'Extended Sequence Number. À cause du défaut de validation, le scatterlist de sortie peut s'étendre dans les pages chaînées du page cache du noyau, de sorte que cette écriture de quatre octets atterrit directement dans les données mises en cache d'un fichier en mémoire — court-circuitant les permissions du fichier. Le page cache, rappelons-le, contient les copies en mémoire des fichiers exécutables et libraries du système.

L'exploitation revient donc à une primitive d'écriture contrôlée de 4 octets dans n'importe quelle page du cache lisible par l'utilisateur. En remplaçant des octets dans la version mise en cache d'un binaire setuid lisible (ld.so, su, sudo, mount, etc.), l'attaquant injecte du code qui sera exécuté avec les privilèges du fichier dès qu'un processus privilégié exécute la version corrompue. D'après l'analyse de Sysdig, le scénario d'attaque ne nécessite ni race condition, ni timing fenêtre, ni redémarrage : c'est une exploitation déterministe en ligne droite (straight-line logic flaw).

L'exploit publié par les chercheurs tient en 732 octets de Python utilisant uniquement les modules standards os, socket et zlib, et requiert Python 3.10 ou plus récent pour la fonction os.splice. Un utilisateur local non privilégié peut donc passer root en quelques secondes, sans dépendance externe, sans bibliothèque exotique, sur la quasi-totalité des distributions Linux livrées depuis 2017 — Debian, Ubuntu, RHEL, AlmaLinux, Rocky Linux, Fedora, openSUSE, Arch, Alpine, et leurs dérivés cloud.

Selon l'avis CERT-EU 2026-005 et l'analyse Help Net Security, la vulnérabilité est restée latente près de neuf ans dans le code du noyau Linux avant d'être identifiée. Les premières exploitations in-the-wild ont motivé l'inscription au catalogue KEV de la CISA dès le 1er mai 2026, et d'après NVD/NIST, des correctifs ont été intégrés dans les branches maintenues du noyau dès la fin avril : Linux 6.18.22, 6.19.12 et la branche 7.0 contiennent désormais le patch upstream qui corrige le calcul de longueur dans le scatterlist de sortie.

Sur les distributions, les correctifs ont été livrés de manière échelonnée. Red Hat a publié des paquets noyau pour RHEL 8 et 9, Canonical pour Ubuntu 22.04 et 24.04, SUSE pour SLES 15, Debian pour bookworm et trixie. CloudLinux indique de son côté avoir livré une mise à jour KernelCare diffusée en live patching pour ses clients hébergeurs, évitant le redémarrage. Les utilisateurs de noyaux Long Term Support sont encouragés à vérifier explicitement la présence du correctif via la commande uname -r et un changelog distribution.

Côté détection, la faille ne laisse pas de signature réseau, mais l'usage exotique de l'API AF_ALG via authencesn(hmac(sha256),cbc(aes)) depuis un binaire utilisateur non privilégié constitue un indicateur fort. L'audit Linux (auditd) peut être configuré pour journaliser les syscalls socket avec famille AF_ALG, et eBPF/Falco/Sysdig disposent désormais de règles de détection publiques publiées par les vendors EDR à partir du 2 mai 2026.

Impact et exposition

L'exposition est massive : tout serveur Linux multi-utilisateur, toute machine d'analyse partagée, tout conteneur partagé, toute jump box, tout poste de travail Linux livré entre 2017 et fin avril 2026 contient un noyau vulnérable par défaut, sauf si algif_aead a été explicitement désactivé — ce qui n'est presque jamais le cas. Les environnements d'hébergement mutualisé (cPanel, Plesk, hébergeurs cloud avec accès SSH partagé), les CI/CD runners exposant un shell aux développeurs, et les bastions Kubernetes (kubectl exec dans un pod non-root) sont en première ligne.

L'exploitation requiert un accès local utilisateur non privilégié — donc pas exploitable directement depuis Internet. Mais sur tout système où un attaquant a déjà obtenu un shell faible (compromission web vers www-data, fuite SSH, accès développeur compromis, conteneur compromis avec syscalls AF_ALG autorisés), Copy Fail offre une remontée vers root quasi garantie. Les conteneurs Docker et Kubernetes sont concernés si l'AppArmor/seccomp profile par défaut autorise socket(AF_ALG, ...) — c'est encore largement le cas sans profil seccomp restrictif explicite.

Les chercheurs de Penligent et Sysdig confirment l'exploitation in-the-wild depuis fin avril 2026, principalement dans des chaînes d'attaque post-compromission de serveurs web exposés. Les opérateurs de ransomware s'en servent comme primitive de pivot interne pour passer d'un compte de service web (www-data, nginx) à root puis à l'évasion du conteneur ou à la latéralisation vers l'hôte. D'après Help Net Security, plusieurs incidents observés sur des fermes Kubernetes managées tournant des images Linux non patchées ont déjà été liés à Copy Fail.

La surface d'attaque comprend également les appliances et matériel embarqué basé sur des noyaux Linux LTS rarement mis à jour : routeurs, NAS, équipements IoT industriels, télévisions connectées, infotainment automobile. Pour ces équipements, les correctifs dépendent du calendrier des constructeurs et peuvent ne jamais arriver. Sur des box télécom et routeurs grand public, la désactivation manuelle d'algif_aead via le firmware n'est généralement pas possible — la sortie de vie effective du parc est l'unique mitigation.

Recommandations immédiates

  • Mettre à jour le noyau Linux vers 6.18.22, 6.19.12 ou 7.0 (ou version distribution équivalente livrant le patch upstream) — vérifier explicitement le changelog du paquet kernel/linux-image.
  • À défaut de patch immédiat, désactiver le module algif_aead de manière persistante : créer /etc/modprobe.d/disable-algif.conf contenant « install algif_aead /bin/false », puis exécuter « rmmod algif_aead 2>/dev/null || true » pour décharger la version en cours.
  • Sur les conteneurs et Kubernetes, appliquer un profil seccomp restrictif bloquant socket(AF_ALG, ...) — le profil Docker default-with-blocked-af_alg est disponible dans la documentation runc/containerd.
  • Activer l'audit auditd pour journaliser les appels socket avec famille AF_ALG : « auditctl -a always,exit -F arch=b64 -S socket -k af_alg_use ».
  • Déployer une règle Falco/EDR détectant l'usage de authencesn depuis un binaire utilisateur non root (règles publiées par Sysdig le 2 mai 2026).
  • Sur hébergement mutualisé, prioriser le live patching (KernelCare, kpatch, kgraft) pour éviter le redémarrage en production.
  • Auditer rétroactivement les journaux des deux dernières semaines pour rechercher des élévations root inattendues, des modifications de binaires setuid (rkhunter, chkrootkit, AIDE/Tripwire), et des connexions depuis comptes de service vers ssh root.

⚠️ Urgence

Copy Fail est inscrite au catalogue CISA KEV depuis le 1er mai 2026 avec exploitation in-the-wild confirmée. Le PoC public en 732 octets de Python rend l'exploitation triviale pour tout attaquant ayant déjà obtenu un shell utilisateur non privilégié. Patcher dans les 72 heures sur tout serveur Linux multi-utilisateur, mutualisé ou exposant un shell développeur.

Comment savoir si je suis vulnérable ?

Vérifier la version du noyau via « uname -r » et la comparer aux versions correctives 6.18.22 / 6.19.12 / 7.0 (ou consulter le changelog du paquet de votre distribution : « rpm -q --changelog kernel | grep CVE-2026-31431 » sur RHEL/CentOS, « dpkg -l linux-image-$(uname -r) » puis « apt changelog linux-image-$(uname -r) | grep -i copy-fail » sur Debian/Ubuntu). Tester ensuite si le module algif_aead est chargé avec « lsmod | grep algif_aead » — s'il l'est sur un noyau non patché, le système est exploitable.

Votre infrastructure est-elle exposée ?

Ayi NEDJIMI réalise des audits ciblés pour identifier et corriger vos vulnérabilités.

Demander un audit