
Preuve de concept en Rust pour une vulnérabilité locale d'élévation de privilèges dans le noyau Linux, exploitant l'API Crypto et splice pour écraser le cache de pages et modifier l'UID de /etc/passwd afin d'obtenir les droits root.
Ce projet est une preuve de concept (PoC) implémentée en Rust pour une vulnérabilité d'élévation de privilèges locale (LPE) (simulant la CVE-2026-31431). Il démontre comment manipuler le cache de pages du noyau Linux en exploitant l'API Crypto.[cite: 1, 2]
[!CAUTION] Ce code est destiné uniquement à la recherche en sécurité éthique et à des fins éducatives. Toute utilisation non autorisée de cet outil contre des systèmes sans consentement préalable explicite est illégale. L'auteur décline toute responsabilité en cas d'utilisation abusive ou de dommages causés par ce programme.
L'outil exploite une vulnérabilité liée à AF_ALG (interface crypto du noyau) et à l'appel système splice.[cite: 2] Il permet à un utilisateur non privilégié d'écraser 4 octets du cache de pages d'un fichier en lecture seule—en ciblant spécifiquement le champ UID dans /etc/passwd pour le modifier temporairement en 0000 (root).[cite: 1, 2]
main.rs pour trouver le décalage exact du fichier correspondant à l'UID de l'utilisateur actuel dans /etc/passwd.[cite: 1, 2]AF_ALG avec l'algorithme authencesn(hmac(sha256),cbc(aes)).[cite: 2]setsockopt et en utilisant splice, il redirige les données du fichier à travers le pipeline crypto.[cite: 2]0000).[cite: 2]--shell est fournie, il exécute su <user>, ce qui réussit car le système voit désormais l'UID de l'utilisateur comme 0 dans le /etc/passwd mis en cache.[cite: 1]POSIX_FADV_DONTNEED pour restaurer l'intégrité du système.[cite: 1]libc et nix (avec les fonctionnalités fs, socket, zerocopy et user).[cite: 3]cargo build --release
Tester le correctif du cache de pages sans lancer de shell :
./target/release/cve-2026-31431
Tenter d'élever les privilèges vers un shell root :
./target/release/cve-2026-31431 --shell
main.rs : Orchestre l'attaque, gère les arguments de la ligne de commande et exécute la commande shell finale.[cite: 1]modules.rs : Contient la logique d'exploitation principale, y compris la manipulation de la socket AF_ALG et la recherche du décalage de l'UID.[cite: 2]Cargo.toml : Définit les métadonnées du projet et les dépendances de crates externes.[cite: 3]main.rs, modules.rs, Cargo.toml[cite: 1, 2, 3]socket, bind, sendmsg, splice, posix_fadvise.[cite: 1, 2]