
ThrottleStop.sys Lettura/Scrittura Arbitraria della Memoria Fisica
Proof-of-concept completo per il driver ThrottleStop.sys di TechPowerUp (CVE-2025-7771).
Un driver kernel firmato e ancora caricabile espone lettura e scrittura non convalidate della
memoria fisica tramite due IOCTL. Questo repository trasforma tale primitiva in una
funzionante escalation di privilegi locale da amministratore a SYSTEM e documenta una stranezza
nella denominazione del dispositivo che aggira la maggior parte dei rilevamenti basati su
percorsi e nomi file.
Un PoC per gli stessi IOCTL esisteva già (vedi Crediti). Questa è una catena di exploit completa e indipendente, non una semplice dimostrazione della primitiva.
| Campo | Valore |
|---|---|
| SHA256 | 16F83F056177C4EC24C7E99D01CA9D9D6713BD0497EEEDB777A3FFEFA99C97F0 |
| SHA1 | 82ED942A52CDCF120A8919730E00BA37619661A3 |
| MD5 | 6BC8E3505D9F51368DDF323ACB6ABC49 |
| Versione | 3.0.0.0 ("Low-Level Driver", 2004-2020) |
| Firmatario | TechPowerUp LLC, DigiCert EV Code Signing |
| Impronta certificato | 524EDA9C819321C66E22C7BABEB23DAEAFFB2182 |
| Validità certificato | 2019-08-10 al 2022-06-15 |
Il certificato è scaduto nel 2022, ma la firma include una controfirma temporale attendibile, quindi Windows lo carica ancora. La revoca aiuta solo se la sua data precede il momento della firma, cosa rara per driver vecchi come questo.
La risorsa della versione non ha CompanyName, OriginalFilename o InternalName, quindi il
file non può essere attribuito a un fornitore in base ai propri metadati.
Due IOCTL leggono e scrivono la memoria fisica senza alcun controllo di limiti o di validazione dell'indirizzo:
| IOCTL | Operazione |
|---|---|
0x80006498 | Lettura fisica |
0x8000649C | Scrittura fisica |
Entrambi sono METHOD_BUFFERED, quindi non c'è alcun dereferenziamento di puntatori utente; il
difetto è la mancata validazione dell'indirizzo fisico fornito dal chiamante, non un puntatore
non controllato.
Vale la pena segnalare: il gestore di scrittura 0x8000649C è dichiarato FILE_READ_ACCESS. Un
handle aperto in sola lettura può comunque effettuare scritture fisiche, quindi la maschera di
accesso dichiarata non corrisponde a ciò che il gestore fa realmente.
L'apertura del dispositivo richiede diritti di amministratore, quindi di per sé non è un attraversamento di confine di privilegi. Ciò che offre a un attaccante che è già admin è una lettura/scrittura arbitraria del kernel dalla modalità utente, che vanifica le protezioni che dovrebbero valere al di sopra dell'admin: integrità del codice HVCI, PPL e autoprotezione di EDR/AV. Classico bring-your-own-vulnerable-driver.
Come dimostrazione concreta, il PoC usa la primitiva R/W per rubare il token di SYSTEM e generare una shell SYSTEM.
CVSS 4.0: AV:L/AC:H/AT:N/PR:H/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H (8.7, Alto).
Tutto viene eseguito dalla modalità utente tramite gli IOCTL di R/W fisico del driver. Non c'è scorrimento delle tabelle delle pagine e non è coinvolto CR3; entrambi i processi vengono localizzati scansionando direttamente la memoria fisica:
ImageFileName sia System e il cui UniqueProcessId sia 4. La scansione è limitata agli
intervalli di RAM popolati letti dalla chiave di registro HARDWARE\RESOURCEMAP\...\Physical Memory del firmware, non a una finestra ipotizzata, quindi i buchi MMIO non vengono mai
toccati e nulla al di sopra della RAM installata viene saltato.Token (EPROC_TOKEN) dall'EPROCESS
individuato.Token del nostro
processo. Il token è un _EX_FAST_REF, quindi i bit bassi del conteggio dei riferimenti
vengono mascherati di default (--mask seleziona il comportamento).cmd.exe; restituisce .Gli offset (EPROC_TOKEN, EPROC_PID, EPROC_IMG_NAME, ecc.) sono relativi a una build
specifica e devono essere verificati con dt nt!_EPROCESS sulla versione di Windows di
destinazione.
Il nome dell'eseguibile è importante. Il passo 3 localizza il nostro processo confrontando il
suo ImageFileName nella memoria fisica, e quel campo è limitato a 15 caratteri con la
scansione che confronta i primi 8. Mantieni il nome compilato corto e distintivo; se rinomini
il binario, resta entro quel limite o l'auto-scansione non troverà il processo.
Il driver non usa un nome di dispositivo fisso. Deriva il nome dell'oggetto dispositivo dal
nome del servizio con cui è registrato; il nome del file su disco è irrilevante.
Registrando il binario sotto il servizio TRIXX si ottiene \\.\TRIXX qualunque sia il nome
del file su disco.
Quindi qualsiasi rilevamento basato su \Device\ThrottleStop o ThrottleStop.sys viene
aggirato banalmente. Il rilevamento deve basarsi sull'hash del file o sul certificato di firma:
SHA256: 16F83F056177C4EC24C7E99D01CA9D9D6713BD0497EEEDB777A3FFEFA99C97F0
Thumbprint: 524EDA9C819321C66E22C7BABEB23DAEAFFB2182
Subject: CN=TechPowerUp LLC, O=TechPowerUp LLC, L=Spokane, S=Washington, C=US
L'elenco DEVICE_NAMES nel sorgente è solo una sonda per installazioni note del prodotto.
Passa un nome di dispositivo come argomento per prendere di mira un servizio registrato da te.
| CVE | Driver |
|---|---|
| CVE-2019-7245 | GPU-Z.sys |
| CVE-2025-5324 | GPU-Z.sys |
| CVE-2025-7771 | ThrottleStop.sys (questo repository) |
Il binario non viene fornito qui. Verifica qualsiasi copia con lo SHA256 sopra riportato. Il campione è catalogato in LOLDrivers.
cl /nologo /EHsc /W4 /O2 src\ThrottleStop.cpp /Fe:myLittleLpe.exe /link advapi32.lib
Solo per uso in laboratorio. Esegui in una VM isolata con uno snapshot a cui tornare.
sc.exe create <name> type= kernel binPath= C:\path\to\ThrottleStop.sys
sc.exe start <name>
myLittleLpe.exe
sc.exe stop <name>
sc.exe delete <name>
Il binario non accetta argomenti. Stampa la mappa della memoria fisica, scansione alla ricerca
dell'EPROCESS di SYSTEM e di quello locale, scambia il token e avvia cmd.exe in esecuzione
come NT AUTHORITY\SYSTEM.

Altri lavori pubblici sullo stesso driver, per confronto:
Pubblicato per ricerca difensiva e ingegneria del rilevamento. La vulnerabilità è già pubblica come CVE-2025-7771. Tutto ciò che è qui contenuto è stato testato su sistemi di proprietà dell'autore. Non eseguire questo strumento contro sistemi che non possiedi o per cui non sei autorizzato a fare test.
whoamiNT AUTHORITY\SYSTEM