
CVE-2026-41089 PoC — Overflow del buffer di stack in Netlogon CLDAP (CVSS 9.8 CRITICO)
██████╗██╗ ██╗███████╗ ██╗ ██╗ ██╗ ██████╗ ██████╗
██╔════╝██║ ██║██╔════╝ ██║ ██║███║██╔═████╗██╔═████╗
██║ ██║ ██║█████╗ ███████║╚██║██║██╔██║██║██╔██║
██║ ╚██╗ ██╔╝██╔══╝ ██╔══██║ ██║████╔╝██║████╔╝██║
╚██████╗ ╚████╔╝ ███████╗ ██║ ██║ ██║╚██████╔╝╚██████╔╝
╚═════╝ ╚═══╝ ╚══════╝ ╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚═════╝
Esecuzione di codice remota in Windows Netlogon tramite stack buffer overflow in CLDAP
Un singolo pacchetto UDP sulla porta 389 provoca un overflow di un buffer dello stack di 528 byte all'interno di LSASS su qualsiasi controller di dominio Windows non aggiornato. Il processo si arresta in modo anomalo. Il DC si riavvia in circa 60 secondi. Non è richiesta alcuna autenticazione.
| Vettore d'attacco | UDP 389 (CLDAP), pre-autenticazione, zero credenziali |
| Impatto | Crash di LSASS, riavvio del DC, potenziale RCE |
| CWE | CWE-121 (Overflow del buffer basato su stack) |
| Vettore CVSS | AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| Pubblicato | 12 maggio 2026 da Microsoft |
python3 poc.py 10.0.50.21 corp.local
Tre fasi: ping normale per confermare che il DC è attivo, ping di overflow con un nome utente di 130 caratteri, verifica della vitalità. Richiede circa 10 secondi.
Ogni versione di Windows Server in esecuzione come controller di dominio:
NlGetLocalPingResponse alloca un buffer dello stack di 528 byte e lo passa a BuildSamLogonResponse. Questa funzione chiama NetpLogonPutUnicodeString per scrivere il nome del server, il nome del dominio, i GUID e il nome utente controllato dall'attaccante nel buffer.
Il bug: NetpLogonPutUnicodeString riceve una lunghezza massima in byte, ma la interpreta come un conteggio di WCHAR. Ogni stringa scritta attraverso questo percorso occupa il doppio dello spazio previsto. Il campo "User" nel filtro CLDAP (fino a 130 wchar, 260 byte sul filo) spinge la scrittura combinata oltre il limite di 528 byte.
I_NetLogonLdapLookupEx
-> NlGetLocalPingResponse // buffer stack da 528 byte
-> LogonRequestHandler
-> BuildSamLogonResponse
-> NetpLogonPutUnicodeString // confusione byte/WCHAR
python3 poc.py <ip_target> <nome_dominio> [opzioni]
| Flag | Descrizione | Default |
|---|---|---|
-l | Lunghezza del nome utente in caratteri | 130 |
# Test di connettività (nome utente breve, nessun overflow)
python3 poc.py 10.0.50.21 corp.local
# Tentativo di overflow predefinito
python3 poc.py 10.0.50.21 corp.local -l 130
# Payload più grande, timeout più lungo per reti lente
python3 poc.py 10.0.50.21 corp.local -l 200 -t 10
Richiede Python 3.8+. Nessun pacchetto di terze parti.
L'overflow provoca un denial of service (crash di LSASS, riavvio del DC). In teoria è possibile un RCE tramite corruzione dello stack. Questo PoC non tenta l'esecuzione di codice.
Rete. Analizzare il traffico CLDAP alla ricerca di richieste di ricerca in cui l'attributo "User" del filtro supera i 20-30 caratteri. I normali ping del localizzatore DC utilizzano nomi di account di servizio (stringhe brevi).
Host. Monitorare i crash di LSASS legati a netlogon.dll (Event ID 1000). Abilitare la registrazione di debug di Netlogon:
nltest /dbflag:0x2080ffff
mov edx, 0x40 per dimezzare la lunghezza massima del nome utente)Legale. Questo codice esiste per scopi di ricerca e formazione sulla sicurezza autorizzata. Testare solo su sistemi di propria proprietà o per i quali si dispone di autorizzazione scritta. L'accesso non autorizzato a sistemi informatici viola il CFAA e leggi equivalenti nella maggior parte delle giurisdizioni.
| Versione Server | Fix applicato in |
|---|
| 2012 / 2012 R2 | Solo patch 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 |
-t | Timeout di ricezione UDP (secondi) | 5 |
-d | Ritardo tra overflow e verifica vitalità (secondi) | 3 |