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/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/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
Mais en raison du 2>/dev/null || true, beaucoup de monde ne semble pas conscient que l'atténuation ne fonctionne pas sur toutes les distributions, et en particulier sur les distributions basées sur RHEL, et manquent le message d'erreur suivant :
rmmod: ERROR: Module algif_aead module is bultin.
Voici une démonstration montrant que l'atténuation ne fonctionne pas sur Almalinux :

Et malheureusement, toutes les atténuations 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 l'atténuation fonctionnant sur le même système Almalinux (après avoir restauré le binaire su original) :

