Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Log in
Enviar
HerramientasExploitsBlog
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.

FeedsContactoPrivacidad© 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
2323622hace 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.

PS C:\Windows\System32\drivers> get-filehash .\vkrnlintvsp.sys

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

PS C:\Windows\System32\drivers>
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.

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
Descargar herramienta