
PoC in Rust per una vulnerabilità di escalation locale dei privilegi nel kernel Linux, che sfrutta la Crypto API e splice per sovrascrivere la page cache e modificare l'UID in /etc/passwd per ottenere i privilegi di root.
Questo progetto è una Proof of Concept (PoC) implementata in Rust per una vulnerabilità di escalation dei privilegi locale (LPE) (che simula CVE-2026-31431). Dimostra come manipolare la cache delle pagine del kernel Linux sfruttando la Crypto API.[cite: 1, 2]
[!CAUTION] Questo codice è destinato esclusivamente a scopi di ricerca sulla sicurezza etica e educativa. L'uso non autorizzato di questo strumento contro sistemi senza previo consenso esplicito è illegale. L'autore non si assume alcuna responsabilità per usi impropri o danni causati da questo programma.
Lo strumento sfrutta una vulnerabilità relativa a AF_ALG (interfaccia crittografica del kernel) e alla chiamata di sistema splice.[cite: 2] Consente a un utente non privilegiato di sovrascrivere 4 byte della cache delle pagine per un file di sola lettura, prendendo di mira specificamente il campo UID in /etc/passwd per modificarlo temporaneamente in 0000 (root).[cite: 1, 2]
main.rs per trovare l'offset esatto del file corrispondente all'UID dell'utente corrente all'interno di /etc/passwd.[cite: 1, 2]AF_ALG con l'algoritmo authencesn(hmac(sha256),cbc(aes)).[cite: 2]setsockopt e utilizzando splice, reindirizza i dati del file attraverso la pipeline crittografica.[cite: 2]0000).[cite: 2]--shell, esegue su <user>, che ha successo perché il sistema ora vede l'UID dell'utente come 0 nella cache di /etc/passwd.[cite: 1]POSIX_FADV_DONTNEED per ripristinare l'integrità del sistema.[cite: 1]libc e nix (con le funzionalità fs, socket, zerocopy e user).[cite: 3]cargo build --release
Test del patching della cache delle pagine senza avviare una shell:
./target/release/cve-2026-31431
Tentativo di escalation a una shell di root:
./target/release/cve-2026-31431 --shell
main.rs: Orchestra l'attacco, gestisce gli argomenti della CLI ed esegue il comando shell finale.[cite: 1]modules.rs: Contiene la logica principale dello sfruttamento, inclusa la manipolazione del socket AF_ALG e la ricerca dell'offset UID.[cite: 2]Cargo.toml: Definisce i metadati del progetto e le dipendenze dalle crate esterne.[cite: 3]main.rs, modules.rs, Cargo.toml[cite: 1, 2, 3]socket, bind, sendmsg, splice, posix_fadvise.[cite: 1, 2]