CopyFail Compromises The Last 9 Years Of Linux Distros
La vidéo détaille la vulnérabilité CVE-2026-31431 (surnommée \"Copy Fail\"), une faille d’élévation de privilèges locaux (LPE) dans le sous-système crypto du noyau Linux, affectant toutes les distributions majeures depuis 2017, et permettant un contrôle total de la m...

SYNTHÈSE STRUCTURÉE
Découverte et impact immédiat
La vulnérabilité a été découverte par le chercheur Tayang Lee en étudiant l’interaction entre le sous-système crypto du noyau et le cache de pages. L’exploit, nommé “Copy Fail”, est un script Python de seulement 732 octets qui donne un accès root sur toute distribution Linux (Ubuntu, Amazon Linux, RHEL, SUSE, etc.) sans nécessiter de recompilation ni d’offset spécifiques. L’intervenant précise : “This is a straight line logic flaw. It triggers without races, retries, or crash-prone timing windows.”
Portabilité et simplicité de l’exploit
L’exploit est portable : le même script fonctionne sur toutes les architectures et distributions testées. Il utilise uniquement les bibliothèques standard Python (os, socket, zlib). Des versions en C et Go existent déjà. L’intervenant insiste : “You don’t need to have Python on the system. That’s just how the testing version was written. Anything can do it.”
Contournement des mécanismes de détection
La corruption de page se fait en mémoire, sans marquer la page comme “dirty” dans le cache. Les outils de vérification d’intégrité (checksums) ne détectent rien car le fichier sur disque reste inchangé. Seule la copie en mémoire (page cache) est altérée. L’intervenant explique : “Standard file integrity tools comparing on-disk checksums will miss it because the on-disk file is unchanged.”
Impact sur les conteneurs et Kubernetes
La faille permet une évasion de conteneur car le cache de pages est partagé entre tous les processus, y compris à travers les frontières de conteneurs. L’intervenant souligne : “Copy fail is not just a local privilege escalation. It is a container escape primitive and a Kubernetes node compromise vector.”
Racine technique : le module algif_aead
Le module algif_aead expose le sous-système crypto du noyau aux utilisateurs non privilégiés via des sockets AF_ALG. La fonction splice() permet de transférer des pages du cache sans copie. Lors d’une opération de déchiffrement AEAD, le noyau utilise un scatterlist en place (même zone mémoire pour entrée et sortie), ce qui place les pages du cache dans une zone accessible en écriture.
Le déclencheur : authenc_esn
Le module authenc_esn (utilisé par IPsec pour les Extended Sequence Numbers) écrit quatre octets à un offset asoclen + cryptlen dans le buffer de destination, sans vérifier que cet offset dépasse la zone allouée. L’intervenant précise : “The algorithm is using memory it does not own as a scratchpad. […] The original bytes at that position are permanently lost.”
Étapes de l’exploitation
- Ouverture d’un socket AF_ALG : accessible à tout utilisateur non privilégié.
- Construction de l’écriture : pour chaque chunk de shellcode, un couple
sendmsg+spliceest créé. Les paramètressplice_offsetetsplice_lengthsont choisis pour que l’écriture tombe sur le code binaire de/usr/bin/su. - Déclenchement :
recvmsglance l’opération de déchiffrement. Le noyau écritsec_number_low(contrôlé par l’attaquant) à l’offset cible. - Exécution : après avoir écrit tout le shellcode, l’attaquant exécute
/usr/bin/su. Le noyau charge la version corrompue du binaire depuis le cache, et le shellcode s’exécute avec les privilèges root (carsuest setuid root).
Correctif et délai de divulgation
Le correctif a été intégré dans le noyau principal en mars 2024 (commit 72548B), mais n’a pas été backporté aux noyaux stables des distributions pendant un mois. L’intervenant s’indigne : “You knew the problem was there and like the most up-to-date kernels have the patch but this not been backported to the older versions. […] Why were these not released earlier?”
Mesure d’atténuation immédiate
Pour désactiver le module vulnérable, exécuter :
sudo modprobe -r algif_aead
L’intervenant précise : “It disables the module which is affected and you’ll be fine.”
Limitation : SELinux
SELinux semble bloquer l’exploit sur certaines distributions. Cependant, l’intervenant nuance : “It might be the proof of concept failing rather than the exploit itself failing. There might be a way to craft the exploit for some of those distros where it is not working currently.”
Pas d’impact sur Android
Android n’est pas affecté, car le module algif_aead n’y est pas activé par défaut.
CONCEPTS CLÉS
- AF_ALG : famille de sockets exposant les algorithmes crypto du noyau aux utilisateurs non privilégiés.
- splice() : appel système transférant des données entre descripteurs de fichiers sans copie, en manipulant directement les pages du cache.
- Scatterlist : structure du noyau décrivant une liste de buffers mémoire non contigus.
- AEAD : Authenticated Encryption with Associated Data, chiffrement avec authentification.
- ESN : Extended Sequence Number, utilisé par IPsec pour des numéros de séquence 64 bits.
- Page cache : cache mémoire du noyau contenant les données lues/écrites sur disque.
CONCLUSION
La vulnérabilité CVE-2026-31431 est une faille critique affectant tous les systèmes Linux depuis 2017, exploitant une erreur de conception dans le sous-système crypto du noyau. Sa simplicité d’exploitation, sa portabilité et son impact sur les conteneurs en font une menace majeure. Le correctif existe mais n’a pas été diffusé rapidement aux distributions. La priorité absolue est d’appliquer le patch ou de désactiver le module algif_aead sur tous les systèmes, y compris les machines anciennes potentiellement vulnérables à des RCE.