
Exploit pour CVE-2026-31431, une vulnérabilité authencesn du noyau Linux permettant une élévation locale de privilèges vers root via la manipulation du cache de pages.
« Copy Fail » est une vulnérabilité logique critique dans le modèle cryptographique authesn du noyau Linux. Elle permet à un utilisateur local non privilégié de déclencher une écriture déterministe et contrôlée de 4 octets dans le cache de pages de n'importe quel fichier lisible sur le système. En ciblant les binaires setuid (tels que /usr/bin/su), un attaquant peut modifier le cache d'exécution en mémoire pour élever ses privilèges jusqu'à Root (UID 0).
Contrairement aux vulnérabilités plus anciennes comme « Dirty Cow » ou « Dirty Pipe », Copy Fail est un défaut logique linéaire qui se déclenche sans conditions de course, sans nouvelles tentatives ni fenêtres temporelles sujettes aux plantages. Elle est hautement portable et furtive, car elle ne modifie que le cache de pages en mémoire tout en laissant le fichier sur disque complètement inchangé, contournant ainsi les outils standard de surveillance de l'intégrité des fichiers.
La vulnérabilité existe à l'intersection de trois composants distincts du noyau :
splice() : L'appel système splice() transfère des données entre des descripteurs de fichiers et des tubes sans copie, en passant les pages du cache de pages par référence. Lorsqu'un utilisateur épisse un fichier (comme /usr/bin/su) dans un socket AF_ALG, la liste de scatter-gather d'entrée du socket contient des références directes aux pages en cache du noyau de ce fichier.authesn : L'algorithme authesn (utilisé pour les numéros de séquence étendus IPsec) nécessite de réorganiser les octets. Pour ce faire, il écrit temporairement 4 octets de numéros de séquence dans le tampon de sortie comme « espace de brouillon ». Cependant, il écrit au-delà de la limite de sortie légitime.En raison de l'optimisation en place de 2017, la liste de scatter-gather de sortie contient les pages du cache de pages en lecture seule passées par splice(). Lorsque authesn écrit au-delà de la limite de sortie, il écrase directement 4 octets dans la mémoire cache du noyau du fichier cible.
Un attaquant peut exploiter cette vulnérabilité en suivant ces étapes :
AF_ALG non privilégié et le lier à authesn(hmac(sha256),cbc(aes)).sendmsg() conçu avec une charge utile de données authentifiées associées (AAD) contenant les 4 octets que l'on souhaite écrire.splice() pour canaliser le fichier cible (/usr/bin/su) dans le socket. Le décalage et la longueur définissent précisément où dans le cache de pages les 4 octets seront écrits.recv() déclenche l'opération de déchiffrement, exécutant l'écriture de brouillon hors limites directement dans le cache de pages du fichier cible.execve("/usr/bin/su")). Le noyau exécute la version altérée du cache de pages contenant le shellcode malveillant injecté, accordant un accès root.Si le correctif ou le redémarrage du noyau n'est pas immédiatement possible, vous pouvez atténuer cette vulnérabilité en bloquant tous les modules af_alg associés et en les déchargeant de la mémoire.
Pour bloquer ces modules, exécutez les commandes suivantes :
# 1. Décharger les modules de la mémoire s'ils sont actuellement chargés
sudo modprobe -r algif_hash algif_skcipher algif_aead algif_rng af_alg
# 2. Ajouter les modules à la liste noire
echo -e "blacklist af_alg\nblacklist algif_hash\nblacklist algif_skcipher\nblacklist algif_aead\nblacklist algif_rng" | sudo tee /etc/modprobe.d/stop-exploit.conf
# 3. Empêcher complètement le chargement du module af_alg
echo "install af_alg /bin/true" | sudo tee -a /etc/modprobe.d/stop-exploit.conf
# 4. Redémarrer le système pour garantir que les modifications prennent pleinement effet
sudo reboot
L'équipe de sécurité du noyau Linux a corrigé cette vulnérabilité (Commit : a664bf3d603d). Le correctif rétablit les opérations AEAD d'AF_ALG à un modèle hors place, séparant les listes de scatter-gather source et destination. Cela empêche les pages du cache de pages d'être exposées à la liste de scatter-gather de destination accessible en écriture.
Action requise : Mettez à jour le noyau de votre distribution vers la dernière version fournie par votre fournisseur (Ubuntu, Amazon Linux, RHEL, SUSE, etc.) et redémarrez votre système.