
# Exploit d'élévation de privilèges locaux Linux pour CVE-2026-31431 Exploit d'élévation de privilèges locaux sous Linux pour CVE-2026-31431, abusant de l'API crypto AF_ALG avec splice() pour modifier le cache de pages et lancer un shell root.
Ce dépôt contient un petit PoC d'élévation de privilèges locale sous Linux pour la CVE-2026-31431, également connue sous le nom de « Copy Fail ».
L'exploit cible le chemin algif_aead du noyau Linux dans l'API crypto
utilisateur AF_ALG. Il utilise AF_ALG plus splice() pour forcer le noyau
à écrire dans le cache de pages de /usr/bin/su par blocs de 4 octets, puis
exécute su après que le cache de pages a été modifié.
Le PoC dans copy_fail_exp.py fait quatre choses :
AF_ALG pour aead avec la transformation
authencesn(hmac(sha256),cbc(aes)).setsockopt() utilisées dans la
preuve de concept originale.splice() pour déplacer les données du fichier cible
dans le chemin de requête AF_ALG, qui est le chemin vulnérable du noyau./bin/sh.Le blob zlib n'est pas des données aléatoires. C'est une charge utile compacte
destinée à remplacer le début de /usr/bin/su dans le cache de pages afin que
la prochaine exécution de su génère un shell root.
Le code vulnérable a été introduit dans les modifications algif_aead de
l'ère 4.14 du noyau Linux et est resté présent jusqu'au correctif en amont qui
annule l'optimisation en place.
algif_aead vulnérable.AF_ALG est activée, ce qui est le défaut sur la
plupart des distributions Linux généralistes.| Distribution | Noyau |
|---|---|
| Ubuntu 24.04 LTS | 6.17.0-1007-aws |
| Amazon Linux 2023 | 6.18.8-9.213.amzn2023 |
| RHEL 10.1 | 6.12.0-124.45.1.el10_1 |
| SUSE 16 | 6.12.0-160000.9-default |
6.18.226.19.127.0Les branches LTS en aval ne sont sûres qu'après que le rétroportage du fournisseur arrive dans le paquet noyau que vous exécutez réellement.
Utilisez une VM de laboratoire ou un hôte conteneurisé qui vous appartient. Ne l'exécutez pas sur des systèmes de production.
/usr/bin/su existe et est setuid-root.python3 copy_fail_exp.py
/usr/bin/su puis invoque su.
Vous devriez aboutir dans un shell root ou voir une invite root, selon
l'environnement.Le script n'a aucune dépendance supplémentaire au-delà de la bibliothèque standard Python 3.
python3 copy_fail_exp.py
Si vous souhaitez d'abord inspecter la cible, le script utilise actuellement
/usr/bin/su par défaut.
Si vous maintenez un noyau en aval, le correctif approprié consiste à rétroporter l'annulation en amont qui supprime l'optimisation AEAD en place :
a664bf3d603dc3bdcf9ae47cc21e0daec706d7a572548b093ee3.Flux de travail recommandé pour un arbre de noyau en aval :
git cherry-pick a664bf3d603dc3bdcf9ae47cc21e0daec706d7a5
make olddefconfig
make -j"$(nproc)"
make modules_install
make install
reboot
Si vous ne recompilez pas vous-même les noyaux, installez le paquet noyau du fournisseur qui contient le rétroportage et redémarrez dessus.
Si le correctif est retardé, désactivez le chemin du module comme mesure temporaire :
echo "install algif_aead /bin/false" > /etc/modprobe.d/disable-algif-aead.conf
rmmod algif_aead 2>/dev/null
Ceci est une atténuation, pas un correctif.