CVE 2026 31431, communément appelée "Copy Fail", est une vulnérabilité locale d'élévation de privilèges de haute sévérité affectant le noyau Linux. Le problème affecte les noyaux livrés par toutes les distributions Linux majeures depuis 2017 et permet à un utilisateur local non privilégié d'obtenir une exécution au niveau racine sur le système hôte.
La vulnérabilité provient d'un défaut de logique dans le sous-système cryptographique du noyau Linux, en particulier l' interface algif_aead exposée via les socketsAF_ALG. Sous certaines conditions, cette faille permet une modification contrôlée ducache de page enmémoire du noyaupour lesfichiers enlectureseule, y compris les binairessetuid root. Lorsqu'un tel binaire modifié est exécuté, l'attaquant peut obtenir des privilèges élevés.
Impact
Un attaquant disposant d'une exécution locale de code (par exemple, un compte utilisateur standard, un compte de service compromis, un point d'appui d'évasion de conteneur, ou un travail CI malveillant) peut :
- élever ses privilèges au niveau de root
- Modifierle chemin d'exécutionenmémoiredes binaires de confiance sans modifier les fichiers sur le disque.
- échapper aux mécanismes de détection qui reposent uniquement sur la surveillance de l'intégrité des fichiers
- échapper potentiellement aux conteneurs sur lesplates-formesà noyaupartagéen raison de la nature globale du cache de pages de Linux.
Contrairement auxfaillesantérieures d'élévationdes privilèges sous Linux, Copy Fail :
- ne nécessite pas de conditions de course
- ne dépend pas desdécalages de mémoirespécifiquesau noyau
- est déterministe et portable sur toutes les distributions
Systèmes concernés
- Noyaux Linux 4.14 et ultérieurs qui incluent l'optimisation AEAD insitude 2017dans algif_aead
- Toutes les distributions majeures utilisant des noyaux construits à partir de 2017 jusqu'à ce que les correctifs du fournisseur soient appliqués.
Recommandations
- Apporter un correctif au noyau sur tous les systèmes affectés en tant que solution primaire. Ce comportement est lié au noyau ; les contrôles de l'espace utilisateur ne sont pas suffisants.
- Restreindre l'utilisation d'AF_ALG pour les charges de travail non fiables en utilisant seccomp, SELinux, AppArmor, la politique de conteneur ou les profils de durcissement si ces charges de travail ne nécessitent pas de sockets cryptographiques du noyau.
Validationde la preuve deconceptet tests Integrity360
Integrity360 a effectué une analyse dynamique contrôlée descharges utiles dedémonstrationdeCopy Fail accessibles au publicafin de valider l'exploitabilité et d'évaluer le risque opérationnel.
L'analyse dynamique par l'exécution des charges utiles a révélé que l'exploit cible le chemin du bogue "Copy Fail" de Linux en corrompant le cache de page d'un exécutable protégé, spécifiquement "su", sans ouvrir ce fichier en écriture. La charge utile ouvre la cible en lecture seule, pilote à plusieurs reprises une interface cryptographique du noyau via "AF_ALG", déplace les données soutenues par la cible via splice, puis signale que le cache de page a été modifié avant d'exécuter la cible.
Il ne s'agit pas d'un écrasement de fichier normal. L'exploit abuse d'un chemin de copie côté noyau de sorte que l'image en mémoire de l'exécutable est modifiée même si le descripteur de fichier est en lecture seule. La trace de l'analyse dynamique montre que l'exécution passe par "sh -c su", suivi par l'exécution de "su", qui ne se comporte plus comme l'aide"setuid" d'origineet passe à "sh". Pendant l'exécution, nous avons observé que "setgid(0)" et "setuid(0)" échouent avec "EPERM", ce qui est cohérent avec l'élévation de privilèges supprimée par le traçage ; le comportement de l'exploit est toujours visible parce que l'exécution est redirigée vers un shell.
Explication technique
L'exploit commence par ouvrir "su" avec "O_RDONLY" et annonce une charge utile de 1704 octets (426 itérations). Ce nombre est important : la boucle semble patcher la cible en morceaux de 4 octets, avec 426 x 4 = 1704. Chaque itération crée un nouveau socket "AF_ALG", le lie à un crypto path "AEAD", définit les paramètres de l'algorithme avec "setsockopt", et envoie un petit bloc de contrôle artisanal avec "sendmsg".
L'étape critique est la paire d'appels d'épissage. Tout d'abord, les octets sont épissés à partir du descripteur de fichier cible en lecture seule dans un tuyau. Ensuite, ils sont épissés à partir du tuyau dans laprise"AF_ALG"acceptée. Cela permet de maintenir le transfert dans l'espace du noyau et d'éviter une écriture normale dans l'espace utilisateur. Après chaque tentative, "recvfrom" renvoie "EBADMSG", ce qui indique que l'opération cryptographique a échoué du point de vue de l'espace utilisateur, mais la trace montre clairement que l'exploit s'appuie sur un effet secondaire côté noyau qui survit à cet échec.
Vers la fin de la trace, l'exploit effectue le transfert complet de 1704 octets, ferme les descripteurs, imprime le cache de page muté ; exécute la cible, et exécute immédiatement "sh -c su". Cela conduit à "execve("/usr/bin/su", ...)", puis à l'échec de "setgid(0)" et "setuid(0)", et enfin à "execve("/bin/sh", ["sh"], [])". Cette séquence indique que l'image mise en cache de "su" a été modifiée de sorte que l'exécution ne suit plus la logique du programme original.
Appels système les plus critiques
- openat :
- Ouvre su en lecture seule. C'est important car cela montre que l'exploit ne nécessite pas d'accès en écriture au fichier cible.
- socket(AF_ALG, SOCK_SEQPACKET, 0) suivi de bind
- Ces commandes sélectionnent l'interface cryptographique du noyau et le chemin de traitement vulnérable.
- setsockopt :
- Configure l'opération AF_ALG de manière à ce que la requête élaborée puisse être acceptée et traitée.
- sendmsg :
- Fournit les données de contrôle et le matériel de correction élaborés par itération.
- pipe2 :
- Crée le chemin de tampon dans le noyau utilisé pour relier les pages adossées à un fichier à la socket crypto.
- splice :
- Il s'agit de la principale primitive d'exploitation de la trace. L'exploit commence par épisser le fichier cible dans le pipe, puis le pipe dans la socket AF_ALG. C'est la paire de syscall la plus directement liée à la corruption réelle du cache.
- recvfrom :
- Renvoie de manière répétée EBADMSG. C'est important car cela montre que l'exploit réussit malgré un échec apparent de l'opération, ce qui implique que la corruption se produit avant que l'erreur n'apparaisse.
- execve :
- Confirme le résultat de l'exploit en exécutant immédiatement le chemin d'accès à la cible altérée, puis en tombant dans sh.
Versions du noyau utilisées dans les tests Integrity360
Exploitation réussie
-
Linux 5.4.0-122-generic (x86_64)
Exploitation infructueuse
-
Linux 7.0.0-15-générique (x86_64, noyau corrigé)
Référence de la charge utile
https:// github.com/tgies/copy-fail-c
Si vous êtes préoccupé par l'une des menaces décrites dans ce bulletin ou si vous avez besoin d'aide pour déterminer les mesures à prendre pour vous protéger contre les menaces les plus importantes auxquelles votre organisation est confrontée, veuillez contacter votre gestionnaire de compte, ou bien prenez contact avecnous pour savoir comment vous pouvez protéger votre organisation.