
Proof-of-concept funzionante per CVE-2026-31431, un'escalation locale dei privilegi nel kernel Linux tramite corruzione della cache delle pagine AF_ALG AEAD, che concede una shell di root.
2026-04-29 — Pubblico questo exploit un giorno dopo averlo condiviso sul forum MyDigitalLife. Non richiede Python; è scritto in C e compilato nella dimensione più piccola possibile usando:
musl-gcc -static -Os -o exploit exploit.c -sMinaccia critica. Il binario dell'exploit è compilato senza dipendenze e può essere utilizzato per testare le vulnerabilità su qualsiasi sistema Linux
CVE-2026-31431 è una vulnerabilità confermata da NIST nel kernel Linux che consente a un utente locale non privilegiato di ottenere una shell
rootin pochi secondi. Alla luce dell'exploit circolante pubblicamente per CVE-2026-31431, ho sviluppato una proof-of-concept (PoC) binaria per valutare l'esposizione della nostra infrastruttura interna. Sebbene alcuni ambienti limitino l'uso di su, questa vulnerabilità è particolarmente critica per i server condivisi perché colpisce la gestione della memoria del kernel sottostante. Di conseguenza, qualsiasi binario SETUID — inclusi sudo, passwd, mount o newgrp — può essere sfruttato per attivare l'exploit e ottenere una shell root. È necessaria un'azione amministrativa immediata per applicare la patch al kernel, poiché le restrizioni standard a livello di spazio utente sono insufficienti per mitigare questa minaccia. Qualsiasi sistema Linux che esegue un kernel non patchato è a rischio.
Il Mio Exploit Funzionante · Kernel Linux · Interfaccia crittografica AF_ALG (AEAD)
Sostituisce /usr/bin/su nella cache delle pagine del kernel senza toccare il file su disco
È sufficiente l'accesso alla shell locale — non sono richiesti privilegi aggiuntivi
Colpisce le distribuzioni Linux non patchate

CVE-2026-31431 è un bug nella gestione delle operazioni di I/O scatter-gather e dei riferimenti alla cache delle pagine nel sottosistema crittografico del kernel Linux — in particolare nell'implementazione dei socket AF_ALG per gli algoritmi AEAD (crypto/af_alg.c, crypto/aead.c).
| Proprietà | Valore |
|---|---|
| Identificatore | CVE-2026-31431 |
| Riferimento | NIST NVD |
| Tipo | Escalatazione dei Privilegi Locali (LPE) |
| Componente | Kernel Linux — AF_ALG / AEAD (authencesn) |
| Accesso richiesto | Utente locale non privilegiato |
| Impatto | Shell root interattiva |
| Stato dell'exploit | PoC funzionante disponibile pubblicamente su GitHub |
| Persistenza | Nessuna — la modifica esiste solo in RAM; il riavvio ripristina lo stato originale |
Il kernel Linux espone un'interfaccia crittografica allo spazio utente tramite i socket AF_ALG. La vulnerabilità risiede nel fatto che durante un'operazione di decrittazione AEAD, il kernel mappa erroneamente l'output della decrittazione direttamente sulle pagine della cache delle pagine del file sorgente — invece di un buffer temporaneo. Un attaccante può quindi sovrascrivere il contenuto in memoria di qualsiasi file senza modificarlo su disco, senza privilegi root e senza lasciare tracce visibili nel filesystem.
| Sistema | Stato |
|---|---|
| Ubuntu 24.04 (bare metal / VM) | ⚠️ Vulnerabile su kernel non patchato |
| Debian, Fedora, Arch su kernel non patchato | ⚠️ Vulnerabile |
Distribuzioni con CONFIG_SECURITY_LOCKDOWN_LSM | ✅ Probabilmente protette |
Sistemi con nosuid o ProtectSUID (systemd) | ✅ Protetti |
Sistemi con AppArmor/SELinux che bloccano AF_ALG | ✅ Protetti |
| macOS, Windows (nativo) | ✅ Non colpiti |
L'exploit è composto da due componenti: uno script helper in /tmp/x e un ciclo di corruzione basato su AF_ALG. Di seguito una descrizione esatta basata sull'analisi del codice sorgente:
1. Configurazione dello script helper
L'exploit crea /tmp/x con il seguente contenuto:
#!/bin/sh
export TERM=xterm-256color
exec /bin/sh
Imposta i permessi a 0755. Il motivo: /usr/bin/su rimuove le variabili d'ambiente (inclusa TERM) all'avvio. Lo script helper le ripristina prima di generare la shell reale, garantendo un terminale funzionante.
2. Costruzione del payload ELF
Un binario ELF x86_64 minimale di 158 byte contenente shellcode grezzo viene costruito in memoria. La stringa /bin/sh all'offset 150 viene poi modificata in /tmp/x\0 tramite memcmp/memcpy. Vedere Payload ELF per i dettagli.
3. Apertura di /usr/bin/su in sola lettura
int su_fd = open("/usr/bin/su", O_RDONLY);
Il file viene aperto in sola lettura — l'exploit non richiede alcun permesso di scrittura.
4. Ciclo di corruzione — 39 iterazioni di 4 byte ciascuna
Il payload (158 byte) viene elaborato in blocchi di 4 byte (39 blocchi completi). Ogni blocco viene passato a corrupt_binary_chunk(), che esegue:
AF_ALG (SOCK_SEQPACKET)authencesn(hmac(sha256),cbc(aes)) — un algoritmo AEAD compostoop_sock)sendmsg con un buffer di 8 byte (4× 'A' + 4 byte di payload) e tre CMSG: ALG_OP_DECRYPT, IV (20 byte), assoclen=8splice: su_fd → pipe → op_sock (zero-copy attraverso il kernel)recv() — è qui che il kernel sovrascrive erroneamente la cache delle pagine5. Esecuzione
execve("/usr/bin/su", args, NULL);
Il kernel carica /usr/bin/su attraverso la cache delle pagine — che ora è avvelenata. Il bit SUID (chmod u+s) è intatto, quindi il kernel esegue il file come root. Lo shellcode esegue setuid(0) → execve("/tmp/x") → shell root interattiva.