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-2024-30051 — Investigación de tesis de maestría sobre CVE-2024-30051 (desbordamiento de montón de DWM en Windows). Incluye un exploit de alta fiabilidad con optimización automatizada de heap spray, registro en tiempo real y análisis empírico de la tasa de éxito. Pieza de portafolio que demuestra explotación avanzada de binarios de Windows, manipulación del diseño del montón y LPE a través del Administrador de ventanas de escritorio. | Kitploit
Herramientas/GitHubGitHub/devianntsec/cve-2024-30051
Escalada de PrivilegiosForensia de MemoriaAnálisis de VulnerabilidadesExplotaciónIngeniería InversaPapers e InvestigaciónAprendizaje y EducaciónDesarrollo de PayloadsExplotación de Binarios

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 →
GitHubdevianntsec/cve-2024-30051

CVE-2024-30051

Ver Repositorio
1hace 3 mesesAún no revisado

Acerca de

Investigación de tesis de maestría sobre CVE-2024-30051 (desbordamiento de montón de DWM en Windows). Incluye un exploit de alta fiabilidad con optimización automatizada de heap spray, registro en tiempo real y análisis empírico de la tasa de éxito. Pieza de portafolio que demuestra explotación avanzada de binarios de Windows, manipulación del diseño del montón y LPE a través del Administrador de ventanas de escritorio.

Compartir

CVE-2024-30051 — EoP por desbordamiento de heap del DWM de Windows · Investigación de Tesis de Máster

Platform Language License: MIT Research CVSS

Desbordamiento de búfer basado en heap en el Administrador de ventanas de escritorio de Windows (dwmcore.dll)
Escalada de privilegios local → nivel de integridad SYSTEM a través del proceso DWM
Objetivo de compilación: Windows 11 22H2 (10.0.22621.3447) · Parche: KB5037771


Descripción

Este repositorio contiene mi investigación de Tesis de Máster sobre CVE-2024-30051, una vulnerabilidad de elevación de privilegios de severidad alta (CVSS 7.8) en la librería principal del Administrador de ventanas de escritorio de Windows (dwmcore.dll).

La vulnerabilidad se origina en un error de cálculo de tamaño por división entera en CCommandBuffer::Initialize. El tamaño usado para new() y el usado para memcpy() divergen debido a este error de cálculo, produciendo un desbordamiento de heap de 0x8F bytes. Un exploit exitoso provoca que dwm.exe cargue una DLL controlada por el atacante, ejecutando código arbitrario bajo la cuenta window manager\dwm-1 con nivel de integridad SYSTEM.

Mi contribución


Estructura del repositorio

root@kitploit:~
CVE-2024-30051-Masters-Thesis/
├── README.md
├── LICENSE
├── setup.bat                        # Copies s11.dll to required location
│
├── exploit/
│   ├── C21.sln                      # Visual Studio 2022 solution
│   ├── exploit_src/
│   │   ├── c26f.vcxproj
│   │   ├── c26f.filters
│   │   └── main.cpp                 # Exploit — heap spray + hooking + overflow
│   └── payload/
│       ├── payload.vcxproj
│       ├── payload.vcxproj.filters
│       ├── dllmain.cpp              # Payload DLL — spawns SYSTEM shell + cleanup
│       ├── framework.h
│       ├── pch.h
│       └── pch.cpp
│
└── docs/
    ├── screenshots/                 # Patch diffing, WinDbg, and forensic captures
    └── analysis/
        ├── 01-root-cause.md         # Integer division bug in CCommandBuffer::Initialize
        ├── 02-heap-spray.md         # 50-session empirical data and statistical findings
        └── 03-timeline.md           # Discovery, disclosure, and patch chronology

Inicio rápido

Requisitos previos

  • Windows 11 22H2 (compilación 22621.3447, sin parchear — sin KB5037771)
  • Visual Studio 2022 con la carga de trabajo de escritorio de C++
  • Se recomienda una VM con snapshot (necesaria para un estado de heap reproducible)

Paso 1 — Compilar la DLL del payload

Abre C21.sln en Visual Studio 2022. Compila el proyecto payload en Release x64.

Paso 2 — Colocar la DLL

Ejecuta setup.bat desde la raíz del repositorio. Copia s11.dll a C:\Users\Public\Documents\s11.dll (la ruta definida por PAYLOAD_DLL_PATH).

⚠️ La DLL debe estar en esta ruta exacta antes de ejecutar C26f.exe. Colocarla junto al ejecutable no funcionará.

Paso 3 — Compilar el exploit

Compila el proyecto C26f en Release x64.

Paso 4 — Ejecutar

root@kitploit:~
x64\Release\C26f.exe

Ejecuta desde un CMD estándar (sin elevación). El exploit reintenta automáticamente hasta 10 veces. En caso de éxito, dwm.exe carga s11.dll y abre un CMD con nivel de integridad SYSTEM. Se escribe un registro de sesión en %TEMP%\cve_30051_log.txt.


Configuración del exploit

root@kitploit:~
#define MAX_ATTEMPTS        10      // Max auto-retry attempts per session
#define SPRAY_STEP          0x10    // Hole spacing index (1024 holes)
#define SPRAY_RANGE_START   0x3000  // Spray range start index
#define SPRAY_RANGE_END     0x7000  // Spray range end index
#define SLEEP_POST_SPRAY    0xC8    // ms wait after spray (200ms)
#define SLEEP_POST_HOLES    0xC8    // ms wait after freeing holes (200ms)
#define PAYLOAD_DLL_PATH    "C:\\Users\\Public\\Documents\\s11.dll"

Resumen técnico

Causa raíz de la vulnerabilidad

En CCommandBuffer::Initialize (dwmcore.dll 10.0.22621.3447), CD2DSharedBuffer::GetBufferSize se llama dos veces. El tamaño pasado a new() se somete a una división entera por 0x90 antes de la multiplicación, mientras que memcpy() usa el valor bruto:

root@kitploit:~
buffer_size = GetBufferSize()   → e.g. 0x23F

size_new    = (0x23F / 0x90) * 0x90  = 0x1B0   ← allocated
size_memcpy = 0x23F                             ← copied

overflow    = 0x23F - 0x1B0 = 0x8F bytes

Resultados del diffing de parches

Comparación BinDiff entre la compilación 10.0.22621.3447 (vulnerable) y la 10.0.22621.3593 (parcheada):

La puntuación anómala de 0.32 frente a una similitud global de 0.98 es la firma directa del lugar de la vulnerabilidad.

Cadena de explotación

root@kitploit:~
1. Hook RtlCreateHeap               → capture dwmcore heap handle
2. Hook RtlAllocateHeap             → capture base chunk address
3. Hook NtDCompositionCreateChannel → capture MappedAddress (shared memory region)
4. Hook NtDCompositionCommitChannel → overwrite size field (0x120 → 0x23F)
                                      inject additional batch commands
5. Heap spray 0x10000 CHolographicInteropTexture objects (size=0x1B0)
6. Free holes every 0x10 indices    → create gaps for overflow landing
7. Write payload into overflow buffer → KCBTable+0x388 + LoadLibraryA + DLL path
8. Release all spray objects         → trigger overflow → LoadLibraryA("s11.dll")
9. dwm.exe loads payload DLL         → spawns CMD as SYSTEM integrity

Análisis empírico del heap spray (50 sesiones)

Pregunta de investigación

¿Influye la RAM disponible en el número de intentos necesarios para lograr un heap spray exitoso?

Diseño experimental

Dos bloques de 25 sesiones cada uno. Protocolo por sesión: restaurar un snapshot limpio posterior al arranque → esperar 100 segundos de estabilización → lanzar el exploit → registrar el intento de éxito.

BloqueRAMSesionesÉxitosFallos
A8,192 MB2524

Resultados

Pruebas estadísticas

PruebaEstadísticoValor pConclusión
Mann-Whitney UU = 184.0p = 0.031Rechaza H₀
Prueba t de Welcht(23) = −2.695p = 0.011Rechaza H₀

Conclusiones clave

  • C1: El heap de DWM tras el arranque es 12.9–19× más determinista que la predicción teórica.
  • C2: La disponibilidad de RAM tiene un efecto estadísticamente significativo en la fiabilidad del spray (p = 0.031).
  • C3: Reducir la RAM a la mitad duplica la desviación estándar (1.135 → 2.645).
  • C4: La tasa de fallos es homogénea, del 4 %, en ambas configuraciones.
  • C5: La constante base = heap_base + 0x720 confirma que el diseño reproducible del heap tras el arranque es el principal impulsor del determinismo, y no la densidad de huecos.
  • C6: Con ≥ 8 GB de RAM, un atacante puede esperar éxito dentro de los primeros 5 intentos.

Los datos brutos completos, el formato del registro de sesión y las observaciones del heap determinista están documentados en docs/analysis/02-heap-spray.md.


Salida posterior a la explotación

En caso de éxito, se abre una ventana de CMD bajo window manager\dwm-1:

root@kitploit:~
=====================================================
  CVE-2024-30051 - Windows DWM Heap Overflow EoP
  CWE-122  |  CVSS 7.8  |  Elevation of Privilege
=====================================================

  Researched and reproduced by : devianntsec
  Original PoC by              : Ricardo Narvaja (Fortra)
  Target                       : Windows 11 22H2 (22621.3447)

=====================================================

  [*] Current user:
  window manager\dwm-1

  [*] Mandatory Integrity Level:
  Mandatory Label\System Mandatory Level   S-1-16-16384

  [*] Enabled privileges:
  SeImpersonatePrivilege    Enabled

=====================================================
  Shell running under DWM process - SYSTEM level
=====================================================

Los artefactos (s11.dll y el script .bat) se eliminan automáticamente a los 5 segundos mediante un proceso de limpieza diferida.


Artefactos forenses


Documentación técnica

DocumentoDescripción

Contexto académico

Esta investigación forma parte de mi Tesis de Máster en Ciberseguridad (UCAM — Campus Internacional de Ciberseguridad), que analiza vulnerabilidades N-Day en múltiples entornos.

Este CVE representa el vector de aplicación de escritorio de Windows dentro de la tesis, demostrando:

  • Explotación de desbordamiento de búfer basado en heap a través del canal ALPC de DirectComposition
  • Diffing binario (BinDiff) como método sistemático para localizar vulnerabilidades N-Day
  • Hooking de API en proceso sin herramientas externas
  • Cuantificación empírica del determinismo del heap spray en distintas configuraciones de RAM

Palabras clave: EoP · Heap Overflow · DirectComposition · DWM · Patch Diffing · BinDiff · WinDbg · Heap Spray · Empirical Analysis · CVE-2024-30051


Autor

Annais Molina (devianntsec) — Estudiante de Máster en Ciberseguridad

GitHub LinkedIn Email


Agradecimientos

  • Ricardo Narvaja (Fortra/CoreSecurity) — PoC original y writeup de ingeniería inversa
  • Kaspersky GReAT — Descubrimiento original de la vulnerabilidad y divulgación responsable
  • Microsoft MSRC — Parche KB5037771 (mayo de 2024)

Licencia

Licencia MIT — consulta LICENSE


Aviso legal

Este repositorio se proporciona solo con fines educativos y de investigación en seguridad, como parte de una Tesis de Máster académica. Todas las pruebas se realizaron en máquinas virtuales aisladas, sin exposición a la red. Úsalo únicamente en sistemas que poseas o para los que tengas autorización escrita explícita para realizar pruebas. El uso no autorizado contra sistemas es ilegal y puede dar lugar a un proceso penal.

© 2026 Annais Molina · Tesis de Máster en Ciberseguridad
UCAM Universidad Católica San Antonio de Murcia · Campus Internacional de Ciberseguridad
Descargar herramienta
AspectoDescripción
Diffing de parchesAnálisis BinDiff completo que identifica CCommandBuffer::Initialize como el lugar exacto de la vulnerabilidad (puntuación de similitud de 0.32 frente a 0.98 global en 14,062 funciones coincidentes)
Análisis dinámico con WinDbgVerificación paso a paso de los 4 hooks, de la sobrescritura del campo de tamaño y de la construcción del payload
Análisis empírico del heap spray50 sesiones controladas en dos configuraciones de RAM (8,192 MB y 4,096 MB) con pruebas estadísticas formales
Hallazgos estadísticosMann-Whitney U (p = 0.031) y prueba t de Welch (p = 0.011) confirman el efecto de la RAM; medias observadas 12.9–19× mejores que la predicción teórica de ~64 intentos
Ruta de la DLL del payload centralizadaRuta hardcodeada extraída a la constante de preprocesador #define PAYLOAD_DLL_PATH
Registro de sesionesRegistro completo con marcas de tiempo por sesión escrito en %TEMP%\cve_30051_log.txt
Documentación académicaCausa raíz, análisis de heap spray de 50 sesiones y cronología del CVE
MétricaValor
Similitud global0.98
Confianza0.99
Funciones coincidentes14,062 (99.1 %)
Similitud de CCommandBuffer::Initialize0.32
Bloques básicos — versión vulnerable4
Bloques básicos — versión parcheada20 (16 bloques de validación añadidos)
1
B4,096 MB25241
BloqueRAMMedia de intentosDesviación estándarIC 95 %Factor frente a la teoría (64)
A8,192 MB3.3751.135[2.896; 3.854]≈ 19× más rápido
B4,096 MB4.9582.645[3.841; 6.076]≈ 12.9× más rápido
ArtefactoUbicaciónPersistenciaHerramienta de detección
cmd.exe hijo de dwm.exeRegistro de eventos de seguridadSí (si la auditoría de procesos está activa)Event ID 4688
Proceso externo accediendo a dwm.exeSysmonSíSysmon Event ID 10
Bloqueo de dwm.exe en intentos fallidosRegistro de eventos de aplicaciónSíEvent ID 1000
DLL del payload s11.dll en discoC:\Users\Public\Documents\Solo los primeros ~5 segundosMonitorización SHA-256
Análisis de causa raíz
Bug de división entera en CCommandBuffer::Initialize, metodología de diffing de parches
Análisis del heap sprayDatos empíricos de 50 sesiones, datos brutos de sesión, pruebas estadísticas
Cronología del CVEDescubrimiento, divulgación y cronología del parche