
CVE-2026-41089 PoC — Netlogon CLDAP Stack-Pufferüberlauf (CVSS 9.8 KRITISCH)
██████╗██╗ ██╗███████╗ ██╗ ██╗ ██╗ ██████╗ ██████╗
██╔════╝██║ ██║██╔════╝ ██║ ██║███║██╔═████╗██╔═████╗
██║ ██║ ██║█████╗ ███████║╚██║██║██╔██║██║██╔██║
██║ ╚██╗ ██╔╝██╔══╝ ██╔══██║ ██║████╔╝██║████╔╝██║
╚██████╗ ╚████╔╝ ███████╗ ██║ ██║ ██║╚██████╔╝╚██████╔╝
╚═════╝ ╚═══╝ ╚══════╝ ╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚═════╝
Windows Netlogon Remote Code Execution durch CLDAP Stack Buffer Overflow
Ein einziges manipuliertes UDP-Paket an Port 389 überläuft einen 528-Byte-Stack-Puffer innerhalb von LSASS auf jedem ungepatchten Windows Domain Controller. Der Prozess stürzt ab. Der DC startet in etwa 60 Sekunden neu. Keine Authentifizierung erforderlich.
| Angriffsvektor | UDP 389 (CLDAP), vor Authentifizierung, keine Anmeldedaten |
| Auswirkung | LSASS-Absturz, DC-Neustart, potenzielle RCE |
| CWE | CWE-121 (Stack-based Buffer Overflow) |
| CVSS-Vektor | AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| Veröffentlicht | 12. Mai 2026 von Microsoft |
python3 poc.py 10.0.50.21 corp.local
Drei Phasen: normaler Ping, um zu bestätigen, dass der DC aktiv ist, Overflow-Ping mit einem 130 Zeichen langen Benutzernamen, Lebendigkeitsprüfung. Dauert etwa 10 Sekunden.
Jede Windows Server-Version, die als Domain Controller läuft:
NlGetLocalPingResponse reserviert einen 528-Byte-Stack-Puffer und übergibt ihn
an BuildSamLogonResponse. Diese Funktion ruft NetpLogonPutUnicodeString auf,
um Servernamen, Domänennamen, GUIDs und den vom Angreifer kontrollierten
Benutzernamen in den Puffer zu schreiben.
Der Fehler: NetpLogonPutUnicodeString erhält eine maximale Länge in Bytes,
behandelt diese aber als WCHAR-Zähler. Jede über diesen Pfad geschriebene Zeichenfolge
belegt den doppelten erwarteten Platz. Das Feld "User" im CLDAP-Filter
(bis zu 130 Wchars, 260 Bytes auf der Leitung) treibt die kombinierte Schreiboperation
über die 528-Byte-Grenze hinaus.
I_NetLogonLdapLookupEx
-> NlGetLocalPingResponse // 528-Byte-Stack-Puffer
-> LogonRequestHandler
-> BuildSamLogonResponse
-> NetpLogonPutUnicodeString // Byte/WCHAR-Größenverwechslung
python3 poc.py <target_ip> <domain_name> [optionen]
| Flag | Beschreibung | Standard |
|---|---|---|
-l | Benutzernamenslänge in Zeichen | 130 |
# Konnektivitätstest (kurzer Benutzername, kein Overflow)
python3 poc.py 10.0.50.21 corp.local
# Standard-Overflow-Versuch
python3 poc.py 10.0.50.21 corp.local -l 130
# Größere Nutzlast, längerer Timeout für langsame Netzwerke
python3 poc.py 10.0.50.21 corp.local -l 200 -t 10
Erfordert Python 3.8+. Keine Drittanbieter-Pakete.
Der Overflow führt zu einem Denial-of-Service (LSASS-Absturz, DC-Neustart). RCE durch Stack-Korruption ist theoretisch möglich. Dieser PoC versucht keine Codeausführung.
Netzwerk. Überwachen Sie CLDAP-Verkehr auf Suchanfragen, bei denen das Filterattribut "User" mehr als 20-30 Zeichen umfasst. Normale DC-Locator-Pings verwenden Dienstkontonamen (kurze Zeichenfolgen).
Host. Achten Sie auf LSASS-Abstürze im Zusammenhang mit netlogon.dll (Ereignis-ID 1000). Aktivieren Sie die Netlogon-Debugprotokollierung:
nltest /dbflag:0x2080ffff
mov edx, 0x40 um die maximale Benutzernamenslänge zu halbieren)Rechtliches. Dieser Code dient der autorisierten Sicherheitsforschung und -bildung. Testen Sie nur Systeme, die Ihnen gehören oder für die Sie eine schriftliche Genehmigung haben. Unautorisierter Zugriff auf Computersysteme verstößt gegen den CFAA und entsprechende Gesetze in den meisten Rechtsordnungen.
| Server Version | Behoben in |
|---|
| 2012 / 2012 R2 | Nur ESU-Patches |
| 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 | UDP-Empfangs-Timeout (Sekunden) | 5 |
-d | Verzögerung zwischen Overflow und Lebendigkeitsprüfung (Sekunden) | 3 |