CVE-2026-31431 copyfail mitigation
Récemment, Xint a divulgué une vulnérabilité très critique dans le noyau Linux, CVE-2026-31431, qui permet aux attaquants locaux d'obtenir des privilèges root. Plus de détails sur le fonctionnement de cette vulnérabilité peuvent être trouvés dans le blogpost de Xint.
Nous fournissons une démo que vous pouvez utiliser pour tester si votre système est vulnérable.
N'utilisez pas ce code sur des systèmes que vous ne possédez pas ou pour lesquels vous n'avez pas explicitement la permission de tester.
Faites attention Ă backuper votre binaire su original, car cet exploit le modifie.
Tester la vulnérabilité​
Sur une machine locale​
Tout d'abord, assurez-vous de sauvegarder le binaire su sur votre système, car cet exploit peut le modifier :
root# cp /usr/bin/su /usr/bin/su.bak
Ensuite, avec un utilisateur non root, exécutez les commandes suivantes pour lancer le script d'exploitation :
user$ curl https://gitlab.cwcloud.tech/oss/cybersec/cve-2026-31431-demo/-/raw/main/cve-2026-31431.py > cve-2026-31431.py
user$ python3 cve-2026-31431.py
root#
Ensuite, restaurez le binaire su original :
root# mv /usr/bin/su.bak /usr/bin/su
Avec docker compose​
Il est souvent préférable d'utiliser des conteneurs pour une isolation plus sûre sans contaminer votre binaire su :
$ git clone https://gitlab.cwcloud.tech/oss/cybersec/cve-2026-31431-demo.git
$ cd cve-2026-31431-demo
$ docker compose up -d --build --force-recreate
$ docker exec -it cve-2026-31431 /bin/bash
demo@8536b73279be:/app$ su -
#
Mitigation​
Xint a fourni un moyen de mitiger cette vulnérabilité pour plusieurs distributions, y compris Debian ou Ubuntu :
root# echo 3 > /proc/sys/vm/drop_caches
root# echo "install algif_aead /bin/false" > /etc/modprobe.d/disable-algif-aead.conf
root# rmmod algif_aead 2>/dev/null || true
Cependant, en raison du 2>/dev/null || true, beaucoup de monde ne semble pas conscient que la mitigation ne fonctionne pas sur toutes les distributions, et en particulier sur les distributions basées sur RHEL (qui ont ce module compilé en tant que builtin dans le kernel), et manquent le message d'erreur suivant :
rmmod: ERROR: Module algif_aead module is builtin.
Voici une démonstration montrant que la mitigation ne fonctionne pas sur Almalinux :

Et malheureusement, toutes les mitigations pour ces distributions impliquent un redémarrage. Voici l'une des plus simples jusqu'à ce qu'un nouveau correctif du noyau soit publié :
root# grubby --update-kernel=ALL --args="initcall_blacklist=algif_aead_init"
root# reboot
Voici une démonstration de la mitigation fonctionnant sur le même système Almalinux (après avoir restauré le binaire su original) :

Autres sources et références​
- 🇫🇷 Article de Korben
- 🇬🇧 Blogpost de Xint
- 🇬🇧 Exploit Copy.fail
