
Proof-of-concept di escalation locale dei privilegi che sfrutta le IOCTL di Gigabyte gdrv3.sys per scrivere il token SYSTEM in un processo utente tramite una lettura non verificata della memoria fisica.
ciao hacker.
gdrv3.sys è il driver kernel firmato che viene distribuito con Gigabyte App Center ed EasyTune. Crea \.\GIOV3 senza security descriptor, quindi qualsiasi utente locale può aprirlo senza admin, senza UAC. Due dei suoi IOCTL sono tutta la storia.
Il primo (0xC3502019) dichiara di leggere la memoria fisica. Gli fornisci un indirizzo fisico, una lunghezza e un puntatore di output, e copia i byte lì. Il puntatore di output è il problema: il driver non verifica mai che sia nello spazio utente. Nessun ProbeForWrite, nessun controllo dei limiti, niente. Quindi una "lettura" è in realtà una write-what-where, basta scegliere dove atterra la risposta. Leggi il token del processo SYSTEM dalla memoria fisica, poi punta l'output direttamente sul campo token del tuo EPROCESS. Il driver scrive il token SYSTEM nel tuo processo per te.
Questo è l'intero exploit. Nessuna corruzione di memoria, nessuno shellcode in modalità kernel. SMEP, SMAP, KVAS, CET e CFG non entrano mai in gioco perché nulla viene eseguito a CPL0 che non dovrebbe esserlo. Sono solo dati, e ha funzionato a ogni esecuzione. La seconda coppia di IOCTL (0xC3502584 lettura, 0xC3502580 scrittura) è quella classica. MSR arbitrario, nessuna whitelist di indici. Leggere IA32_LSTAR rompe già KASLR da solo, e scriverlo dirotta l'entry delle syscall. Richiede lavoro su SMEP/SMAP quindi l'ho tenuto come percorso secondario, ma anche da solo è pericoloso.
Compila ed esegui da un normale account utente:
gcc -O2 -o poc.exe poc.c -lpsapi
poc.exe
Testato su Windows 10 x64 22H2 (build 19045). Il driver viene distribuito con Gigabyte App Center, quindi su molte schede Gigabyte è già caricato.
L'ho segnalato a Gigabyte a giugno 2026 e l'hanno corretto. Le build più recenti applicano un SDDL al dispositivo che lo limita agli admin, e aggiungono una whitelist sulla scrittura MSR. L'attuale gdrv3 non è più sfruttabile in questo modo.
