
CVE-2026-41089 PoC — Desbordamiento de búfer de pila de Netlogon CLDAP (CVSS 9.8 CRÍTICO)
██████╗██╗ ██╗███████╗ ██╗ ██╗ ██╗ ██████╗ ██████╗
██╔════╝██║ ██║██╔════╝ ██║ ██║███║██╔═████╗██╔═████╗
██║ ██║ ██║█████╗ ███████║╚██║██║██╔██║██║██╔██║
██║ ╚██╗ ██╔╝██╔══╝ ██╔══██║ ██║████╔╝██║████╔╝██║
╚██████╗ ╚████╔╝ ███████╗ ██║ ██║ ██║╚██████╔╝╚██████╔╝
╚═════╝ ╚═══╝ ╚══════╝ ╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚═════╝
Ejecución remota de código en Windows Netlogon mediante desbordamiento de búfer en la pila de CLDAP
Un único paquete UDP al puerto 389 desborda un búfer de pila de 528 bytes dentro de LSASS en cualquier Controlador de Dominio de Windows sin parchear. El proceso se bloquea. El DC se reinicia en aproximadamente 60 segundos. No se requiere autenticación.
| Vector de ataque | UDP 389 (CLDAP), pre-autenticación, cero credenciales |
| Impacto | Bloqueo de LSASS, reinicio del DC, posible RCE |
| CWE | CWE-121 (Desbordamiento de búfer basado en pila) |
| Vector CVSS | AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| Publicado | 12 de mayo de 2026 por Microsoft |
python3 poc.py 10.0.50.21 corp.local
Tres fases: ping normal para confirmar que el DC está activo, ping de desbordamiento con un nombre de usuario de 130 caracteres, verificación de actividad. Tarda aproximadamente 10 segundos.
Cada versión de Windows Server que funcione como Controlador de Dominio:
NlGetLocalPingResponse asigna un búfer de pila de 528 bytes y lo pasa
a BuildSamLogonResponse. Esta función llama a NetpLogonPutUnicodeString
para escribir el nombre del servidor, el nombre del dominio, los GUIDs y el nombre de usuario
controlado por el atacante en el búfer.
El error: NetpLogonPutUnicodeString recibe una longitud máxima en bytes
pero la trata como un recuento de WCHAR. Cada cadena escrita a través de esta ruta
ocupa el doble del espacio esperado. El campo "User" en el filtro CLDAP
(hasta 130 wchars, 260 bytes en el cable) empuja la escritura combinada
más allá del límite de 528 bytes.
I_NetLogonLdapLookupEx
-> NlGetLocalPingResponse // búfer de pila de 528 bytes
-> LogonRequestHandler
-> BuildSamLogonResponse
-> NetpLogonPutUnicodeString // confusión de tamaño byte/WCHAR
python3 poc.py <ip_destino> <nombre_dominio> [opciones]
| Bandera | Descripción | Valor por defecto |
|---|---|---|
-l | Longitud del nombre de usuario en caracteres |
# Prueba de conectividad (nombre de usuario corto, sin desbordamiento)
python3 poc.py 10.0.50.21 corp.local
# Intento de desbordamiento por defecto
python3 poc.py 10.0.50.21 corp.local -l 130
# Payload más grande, tiempo de espera más largo para redes lentas
python3 poc.py 10.0.50.21 corp.local -l 200 -t 10
Requiere Python 3.8+. No requiere paquetes de terceros.
El desbordamiento provoca una denegación de servicio (bloqueo de LSASS, reinicio del DC). El RCE mediante corrupción de la pila es teóricamente posible. Este PoC no intenta ejecución de código.
Red. Escanee el tráfico CLDAP en busca de solicitudes de búsqueda donde el atributo de filtro "User" supere los 20-30 caracteres. Los pings normales del localizador de DC utilizan nombres de cuentas de servicio (cadenas cortas).
Host. Vigile los bloqueos de LSASS relacionados con netlogon.dll (Id. de evento 1000). Active el registro de depuración de Netlogon:
nltest /dbflag:0x2080ffff
mov edx, 0x40 para reducir a la mitad la longitud máxima
del nombre de usuario)Legal. Este código existe para investigación de seguridad autorizada y educación. Pruébelo únicamente contra sistemas que posea o para los que tenga permiso por escrito. El acceso no autorizado a sistemas informáticos viola la CFAA y leyes equivalentes en la mayoría de las jurisdicciones.
| Versión del servidor | Corregido en |
|---|
| 2012 / 2012 R2 | Parches solo ESU |
| 2016 | 10.0.14393.9140 |
| 2019 | 10.0.17763.8755 |
| 2022 | 10.0.20348.5074 |
| 2022 23H2 | 10.0.25398.2330 |
| 2025 | 10.0.26100.32772 |
| 130 |
-t | Tiempo de espera de recepción UDP (segundos) | 5 |
-d | Retardo entre desbordamiento y verificación de actividad (segundos) | 3 |