
Checker CVE-2026-41089: rilevamento non autenticato e non distruttivo per il buffer overflow dello stack CLDAP di Netlogon (CVSS 9.8). Segnala se il dominio di un controller di dominio è abbastanza lungo da causare un crash, senza inviare l'overflow. L'analisi verificata in binario che i PoC pubblici hanno sbagliato.
LongLogon è un controllore di precondizione non autenticato e non distruttivo per CVE-2026-41089, un buffer overflow su stack pre-autenticazione nel servizio Netlogon di Windows. Senza credenziali e senza inviare l'overflow, segnala se il nome di dominio DNS di un controller di dominio è abbastanza lungo perché il bug lo faccia crashare.

Su un controller di dominio con nome normale, no. I PoC exploit pubblici per questa CVE
(quello con più stelle e le copie che lo hanno seguito) affermano di crashare un controller di dominio
inviando un nome utente lungo. Non crashano un DC non patchato su un dominio ordinario, per due motivi
confermati dal diffing della netlogon.dll pre- e post-patch e dalla riproduzione del crash in laboratorio:
0x16), che indirizza verso
BuildSamLogonResponseEx con limiti di sicurezza. La vulnerabile BuildSamLogonResponse legacy
viene raggiunta solo con quel bit azzerato. LongLogon utilizza 0x02.User controllato dall'attaccante
è limitato a 130 caratteri wide dal binario, ben al di sotto del buffer di 528 byte. I byte che portano
la scrittura oltre il cookie dello stack sono i lunghi nomi DNS del server stesso, che nessuna modifica
della lunghezza del payload può alterare.Quindi l'exploit popolare fallisce su un dominio ordinario, e un timeout di recv (che un singolo pacchetto
UDP perso causa su un DC sano) viene frainteso come un crash. LongLogon non è uno di quegli exploit: è
l'analisi corretta e verificata dal binario, distribuita come controllore non distruttivo che non invia mai
l'overflow. La soglia di crash confermata in laboratorio e il meccanismo completo sono di seguito.
Un buffer overflow basato su stack (CWE-121, CVSS 9.8) nel percorso di localizzazione DC di Netlogon
NlGetLocalPingResponse → BuildSamLogonResponse → NetpLogonPutUnicodeString.
Rispondendo a un ping CLDAP o MAILSLOT, il DC serializza i propri nomi di foresta, dominio e host
più una piccola stringa controllata dall'attaccante in un buffer fisso di 528 byte sullo stack
(ushort local_258[264]), con il cookie dello stack immediatamente dopo. Quando i nomi DNS propri del server
sono abbastanza lunghi, la scrittura cumulativa raggiunge la fine del buffer, il terminatore finale L'\0'
sfora il cookie, __report_gsfailure si attiva, e lsass.exe termina con STATUS_STACK_BUFFER_OVERRUN
(0xc0000409). Il controller di dominio si riavvia. Non autenticato, un singolo pacchetto UDP.
Mentre Zerologon (CVE-2020-1472) abusava di una sfida interamente zero, LongLogon abusa di un nome di dominio patologicamente lungo.
longlogon.py è non distruttivo. Invia ping CLDAP benigni con un campo User minimo,
misura la risposta del builder legacy e segnala se la precondizione per l'overflow è soddisfatta:
se il dominio di questo DC è abbastanza lungo perché un DC non patchato crashi.
Non fa:
Sapere quali DC siano effettivamente patchati richiede un controllo delle versioni con credenziali (admin) su tutto il parco. È il tipo di cosa che ADscan automatizza in un engagement (vedi sotto).
Gli unici byte controllati dall'attaccante che raggiungono il buffer provengono dal filtro CLDAP User,
limitato a 130 caratteri wide, ben al di sotto del buffer di 528 byte da soli. I byte che portano il
cursore sul cookie sono i nomi propri del server, che l'attaccante non controlla. Un DC con nome
predefinito (corp.local) non può essere crashato. Ecco perché Microsoft lo valuta "Exploitation Less Likely."
In laboratorio, la lunghezza minima del dominio DNS per crashare Windows Server 2016 (con un nome host di 7 caratteri)
era di 98 caratteri.
Con uv, nessuna configurazione. Le dipendenze sono dichiarate inline
(PEP 723), quindi questo installa automaticamente rich in un ambiente effimero:
uv run longlogon.py <dc-ip> <dc-dns-domain>
Oppure con pip:
pip install rich
python3 longlogon.py <dc-ip> <dc-dns-domain>
Il dominio DNS deve corrispondere a quello servito dal DC. Non è segreto: rootDSE, DNS inverso e CLDAP stesso lo rivelano. L'output è un verdetto sulla precondizione più il calcolo del riempimento del buffer per campo.
Il routing di NtVer è importante. La vulnerabile BuildSamLogonResponse legacy viene raggiunta solo
quando (NtVer & 0xc) == 0 e (NtVer & 0x2) != 0. I tentativi di exploit pubblici che inviano
NtVer=0x16 o 0x06 impostano il bit 2 (0x4) e colpiscono BuildSamLogonResponseEx con limiti di sicurezza,
quindi non innescano mai il bug. LongLogon utilizza 0x02.
Controller di dominio Windows Server non patchati, da 2012 R2 a 2025. Prime build patchate:
Solo per ricerca sulla sicurezza autorizzata e validazione difensiva. Questo repository distribuisce il controllore di precondizione non distruttivo, non un crasher weaponizzato, per una CVE attivamente sfruttata e wormabile. Applicate le patch ai vostri controller di dominio.
Ricerca di Yeray Martín Domínguez · ADscan · CVE-2026-41089 · Netlogon · Active Directory · controller di dominio · buffer overflow su stack · CLDAP · non autenticato · pre-autenticazione · prova di concetto
| Windows Server | Prima build patchata |
|---|
| 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 |