
Exploit per CVE-2026-31431, un bug di authencesn del kernel Linux che consente l'escalation dei privilegi locali e la fuga dal container tramite una scrittura di 4 byte nella cache di pagina.
732 Byte per Root su ogni principale distribuzione Linux
CVE-2026-31431 (Copy Fail) è un bug logico nel template crittografico authencesn del kernel Linux. Consente a un utente locale non privilegiato di innescare una scrittura deterministica e controllata di 4 byte nella cache delle pagine di qualsiasi file leggibile sul sistema.
CONFIG_CRYPTO_AUTHENC (praticamente tutte le principali distribuzioni dal 2017)Il bug combina due comportamenti:
AF_ALG + splice: splice() trasferisce le pagine della cache delle pagine per riferimento nello scatterlist di un socket AF_ALG. Per la modalità in-place di decrittazione AEAD, le pagine dei tag (dalla cache delle pagine del file di destinazione) rimangono concatenate allo scatterlist di output tramite sg_chain().
Scrittura scratch di authencesn: crypto_authenc_esn_decrypt() usa dst[assoclen + cryptlen] (oltre il tag, nelle pagine della cache delle pagine) come spazio scratch per il riordino del numero di sequenza ESN, scrivendo 4 byte controllati dall'attaccante senza mai ripristinarli.
La pagina corrotta non viene mai marcata come sporca, quindi il file su disco rimane invariato. Ma la cache delle pagine in memoria è ciò che viene effettivamente letto — rendendo la corruzione immediatamente visibile a livello di sistema.
L'exploit corrompe la cache delle pagine di /usr/bin/su (o di qualsiasi binario setuid) con un piccolo payload shellcode, 4 byte alla volta. Dopo tutte le iterazioni, l'esecuzione di su esegue il payload e apre una shell di root.
python3 exp.py
gcc -o exp exp.c
./exp
| Capacità | Dettagli |
|---|---|
Questo repository è pubblicato esclusivamente a scopo di ricerca educativa e difensiva. Non utilizzare questo codice su sistemi di cui non sei proprietario o per i quali non hai esplicita autorizzazione al test.
| Portabile |
| Lo stesso script funziona su Ubuntu, Amazon Linux, RHEL, SUSE e altro — nessun offset specifico per distribuzione |
| Minuscolo | L'exploit Python è di ~732 byte |
| Furtivo | Bypassa il percorso di scrittura VFS; la pagina non viene mai marcata come sporca; i checksum su disco rimangono invariati |
| Cross-container | La cache delle pagine è condivisa tra i container — vettore di evasione dal container (vedi Parte 2) |