
Proof-of-concept per CVE-2025-7771. ThrottleStop.sys espone due gestori IOCTL che consentono lettura/scrittura arbitraria della memoria fisica senza alcun controllo degli accessi — qualsiasi processo amministrativo può leggere o scrivere ovunque nella RAM fisica.
Testato su Windows 10 22H2 e Windows 11 23H2 x64.
Ho iniziato caricando il binario del driver in IDA Pro per capire come funziona internamente. Ho trovato la routine di dispatch IRP_MJ_DEVICE_CONTROL e l'ho seguita fino a due codici IOCTL:
0x80006498 — lettura da indirizzo fisico0x8000649C — scrittura su indirizzo fisicoEntrambi chiamano direttamente MmMapIoSpace con qualsiasi indirizzo venga passato. Nessun controllo dei limiti, nessuna validazione del chiamante, niente. Questo è il bug.
Da lì il percorso di sfruttamento è abbastanza semplice:
\\.\ThrottleStopNtQuerySystemInformation classe 79) per costruire una mappa di traduzione da indirizzo virtuale a fisicoNtQuerySystemInformation classe 11ntoskrnl.exe dal disco per risolvere l'RVA dell'export PsInitialSystemProcess, sommarla alla base di runtime per ottenere il VA del kernelEPROCESS+0x4b8ActiveProcessLinks per trovare il nostro EPROCESSIl campo token è un _EX_FAST_REF, quindi i 4 bit bassi sono un reference count, non parte del puntatore. Mascherali quando leggi il token di SYSTEM e preserva i bit di reference count del nostro processo quando scrivi, altrimenti rischi un BSOD.
cl /std:c++20 /EHsc /O2 exploit_single.cpp /link ntdll.lib advapi32.lib
Richiede MSVC (VS2022+) e che il driver sia caricato. Eseguire come amministratore.
Questi sono per Windows 10 20H2 fino a 22H2 e Windows 11 22H2/23H2 x64. Controlla con dt nt!_EPROCESS in WinDbg se sei su una build diversa.
| Campo | Offset |
|---|---|
| UniqueProcessId | 0x440 |
| ActiveProcessLinks | 0x448 |
| Token | 0x4b8 |
Solo per scopi educativi e di ricerca. Testato su una VM personale.