
Exploit di escalation dei privilegi del kernel per CVE-2026-31431, che abusa dell'interfaccia AF_ALG per sovrascrivere /bin/su e generare una shell root. Include implementazione in C e guida alla risoluzione dei problemi.
Autore: 0xShe
Lingua / 语言
Guida allo strumento di escalation dei privilegi del kernel CVE-2026-31431
0x01 Avvio rapido
Alcuni ambienti target non hanno Python installato, quindi questa logica di escalation dei privilegi è stata riscritta in C.
Esegui il seguente comando sulla tua macchina Linux o WSL (si consiglia di usare -static per evitare problemi di versione GLIBC):
gcc -static exploit.c -o exploit
2. Distribuzione ed esecuzione
Carica il binario generato sulla macchina target:
chmod +x exploit
./exploit
Se l'exploit ha successo, il programma eseguirà automaticamente su e avvierà direttamente una shell root senza richiedere una password.
0x02 Logica di escalation dei privilegi: come funziona?
Questo exploit abusa di un difetto logico nell'interfaccia AF_ALG del kernel Linux (Kernel Crypto API).
Creare un socket crittografico Il programma crea un socket AEAD (Authenticated Encryption with Associated Data) usando socket(AF_ALG, ...).
Iniezione in memoria (Splice) Sfruttando la chiamata di sistema splice di Linux, i dati da un descrittore di file (in questo caso /bin/su) possono essere reindirizzati direttamente nel buffer crittografico del kernel.
Sovrascrittura del payload Utilizzando specifici offset di memoria, l'exploit sostituisce parte della logica di autenticazione di /bin/su con un payload di escalation dei privilegi (un programma ELF minimale che avvia /bin/sh).
Attivazione dell'escalation dei privilegi Dopo che il kernel completa la serie di operazioni crittografiche, il processo su in memoria è già stato manomesso. Quando system("su") viene infine eseguito, il sistema esegue in realtà il payload della shell root modificato.
0x03 Guida alla risoluzione dei problemi: perché chiede ancora la password?
Durante il debug, se il programma restituisce Exploit finished ma l'esecuzione di su richiede ancora una password, il problema è solitamente causato da uno dei seguenti dettagli.
Questo è il punto di errore più comune. La chiamata sendmsg deve includere il flag MSG_MORE.
Motivo: Questo flag indica al kernel che stanno arrivando altri dati e impedisce che il buffer crittografico venga finalizzato troppo presto.
Conseguenza: Senza questo flag, il kernel chiude immediatamente il contesto crittografico corrente. Di conseguenza, la successiva iniezione splice non può entrare nel buffer corretto del kernel, rendendo la sovrascrittura impossibile.
Il kernel è estremamente severo riguardo all'allineamento e ai controlli di lunghezza per i dati associati AEAD.
Durante il ciclo che modifica /bin/su, ogni operazione splice deve iniziare la lettura dall'offset 0.
Alcuni sistemi potrebbero avere già applicate patch di sicurezza silenti. Questo è stato confermato durante i test su più macchine — alcuni target avevano già ricevuto correzioni non ufficiali o backportate.
0x04 Note
Versione del kernel: Questa vulnerabilità colpisce principalmente i kernel Linux 5.x iniziali (come la versione iniziale di Ubuntu 20.04). Se il kernel è già stato patchato, questo metodo non funzionerà più.
Differenze di percorso: Diverse distribuzioni Linux possono memorizzare su in posizioni diverse (/bin/su o /usr/bin/su). Il codice tenta di rilevare automaticamente il percorso corretto, ma se nessuno dei due esiste, verifica manualmente usando which su e modifica il codice di conseguenza.
Disclaimer: Questo articolo è inteso strettamente per scopi di ricerca tecnica e didattici. Non usarlo per attività illegali. Gli utenti sono gli unici responsabili di qualsiasi conseguenza legale derivante dall'uso improprio dello strumento.