
Détecteur et preuve de concept d'élévation de privilèges locale pour la vulnérabilité d'écriture parasite dans le cache de pages algif_aead de Linux (CVE-2026-31431). Inclut un test non destructif et un exploit qui bascule l'UID à 0 dans le cache de pages de /etc/passwd.
Auteur : byt3l0rd
Détecteur et preuve de concept d'élévation de privilèges locale (LPE) pour le bug d'écriture parasite dans le cache de pages de algif_aead / authencesn sous Linux, divulgué le 29/04/2026.
Article de divulgation : https://xint.io/blog/copy-fail-linux-distributions
À utiliser uniquement sur des hôtes que vous possédez ou pour lesquels vous êtes explicitement mandaté pour effectuer un audit. La LPE modifie l'état en mémoire (cache de pages), mais la technique constitue une véritable élévation de privilèges — l'exécuter sur des systèmes sans autorisation est illégal dans la plupart des juridictions.
algif_aead exécute les opérations AEAD en place (req->src == req->dst). Lorsque les données sources sont fournies via splice() depuis un fichier régulier, la liste de segments dispersés (scatterlist) de destination contient des références aux pages du cache de pages du fichier — c'est-à-dire que le noyau écrira dans celles-ci. L'algorithme authencesn(hmac(sha256), cbc(aes)) effectue ensuite une écriture « parasite » de 4 octets du champ seqno_lo de l'AAD (octets 4 à 7 de l'AAD fourni via sendmsg) dans cette destination, corrompant la copie du fichier dans le cache de pages.
Comme le fichier sur disque n'est jamais modifié, il n'existe aucune signature sur disque ; la corruption n'est observée que par les lecteurs qui partagent le cache de pages. /etc/passwd et /usr/bin/su sont tous deux lisibles par tous, de sorte qu'un utilisateur local non privilégié peut corrompre la vue qu'a le noyau en cours d'exécution de l'un ou l'autre.
Systèmes concernés : noyaux intégrant le commit 72548b093ee3 (AEAD en place, 2017) sans le revert en amont. La divulgation a confirmé Ubuntu 24.04 LTS, Amazon Linux 2023, RHEL 14.3 et SUSE 16, mais la primitive sous-jacente est antérieure à cette plage.
| Fichier | Objectif |
|---|---|
test_cve_2026_31431.py | Détecteur non destructif. Opère sur un fichier sentinelle dans un répertoire temporaire ; ne touche jamais aux binaires système. |
exploit_cve_2026_31431.py | LPE. Bascule l'UID de l'utilisateur courant à 0 dans le cache de pages de /etc/passwd, puis invoque su pour obtenir un shell root. |
Les deux scripts sont en Python 3.10+ pur, bibliothèque standard uniquement.
# 1. Détection
python3 test_cve_2026_31431.py
# code de sortie 0 = non vulnérable, 2 = vulnérable, 1 = erreur de test
# 2. Exploitation (interactif — su vous demandera votre propre mot de passe)
python3 exploit_cve_2026_31431.py --shell