Guadagno di privilegi su quasi tutti i sistemi windows

ATTENZIONE! NON fate test di buffer overflow del kernel su macchina di produzione o similari. I risultati sono IMPREVEDIBILI.

p0wnbox ha pubblicato un exploit di una vulnerabilità del kernel di Windows (file win32k.sys) colpirebbe tutti i sistemi Windows.

In questo caso viene sfruttato un problema strutturale della funzione RtlQueryRegistryValues delle API di Windows utilizzata per leggere più voci del registry con una sola chiamata. Le voci da interrogare vengono passate tramite una struttura uno dei cui campi, EntryContext, contiene un puntatore al buffer in cui mettere i risultati della voce relativa (si può specificare un buffer separato per ciascuna voce da interrogare).

Il buffer in questione può essere visto dalle API sia come una struttura UNICODE_STRING sia come un puntatore ad un buffer che inizia con un valore di tipo ULONG, che ne indica la dimensione; la scelta dipende dal tipo di dati contenuti nella chiave di registro che viene interrogata.

L’attacco consiste nell’individuare una chiave di registro modificabile dall’utente, modificare il tipo di quella chiave in REG_BINARY e chiamare la funzione per provocare un overflow nel kernel. Quando il kernel interroga la chiave, presume che si tratti di un valore di tipo REG_SZ, quindi viene preparata sullo stack una struttura di tipo UNICODE_STRING, in cui il primo campo ULONG contiene la lunghezza del buffer della stringa. Ma se il valore letto dal registry è di tipo REG_BINARY, il valore ULONG verrà interpretato scorrettamente come la lunghezza del buffer e lo stack verrà, quindi, sovrascritto.

L’eseguibile creato da p0wnbox sfrutta il problema descritto sopra per far guadagnare ad un utente normale il privilegio massimo del sistema operativo (privilege escalation), senza che il sistema stesso se ne accorga e, quindi, senza che la funzione UAC avvisi l’utente.

POC.EXE non funziona allo stesso modo su tutti i kernel. In alcuni kernel (come quello di una macchina virtuale che uso come test da cui è tratta la schermata di apertura dell’articolo) funziona come ci si aspetta, in altri kernel il programma provoca in errore irreversibile (blue screen) immediato o dopo pochi minuti. Il programma è quindi da utilizzare solamente su macchine di test.

Per il momento, non esistono malware noti che sfruttano questa vulnerabilità.

Autore: Luigi Rosa

Consulente IT, sviluppatore, SysAdmin, cazzaro, e, ovviamente, geek.

Spazio per un commento