SecPod
← Back to Blog

CVE-2026-41089: Windows Netlogon Patch, IOCs, Detection, and Mitigation Guide

Jun 11, 2026

CVE-2026-41089: Windows Netlogon Patch, IOCs, Detection, and Mitigation Guide

June 11, 2026 CRITICAL, CVSS 9.8 Active Exploitation Confirmed Patch Available Part 3 of 4

The patch for CVE-2026-41089 has been available since May 12, 2026. Active exploitation was confirmed 20 days later. This part covers exactly what the patch fixes at the code level, how to verify patch status across your domain controllers, what IOCs to hunt for, and the detection and mitigation controls that matter most.

The Patch: What Microsoft Actually Fixed

The May 2026 Patch Tuesday update introduces a bounded replacement for the vulnerable string-writing function inside netlogon.dll. The fix is gated behind a feature flag, meaning it can be audited precisely in patched vs. unpatched binary comparisons.

Technical Nature of the Fix

Component Before Patch After Patch
Feature flag Not present Feature_404993339 introduced in netlogon.dll
Vulnerable function NetpLogonPutUnicodeString - no output buffer size parameter; performs unbounded character-by-character writes into a 528-byte stack buffer Replaced by bounded version using RtlStringCbCopyExW with a byte-count budget rather than a character count
Error handling None - write proceeds regardless of input length Returns DWORD error code: 0 = success, 87 = ERROR_INVALID_PARAMETER; caller aborts on any non-zero return
Buffer initialization Stack buffer uninitialized on entry NlGetLocalPingResponse now zero-initializes the 528-byte stack buffer when feature flag is active
Legacy path Only path available NetpLogonPutUnicodeStringOld preserved behind the feature flag for diff comparison only; not reachable in normal execution

In plain terms: the old function wrote characters into a fixed buffer until it was done, with no awareness of how large the buffer was. The new function is told the buffer size upfront and stops writing when it reaches the limit, returning an error instead of overflowing into adjacent stack memory.

Patched netlogon.dll SHA-256:
A59733767285859FC3F982C46EA9C1173F4BF025D1569C03B4D137B55132B2DB

Use this hash to verify the patched binary is deployed on domain controllers. Any DC returning a different hash for netlogon.dll should be treated as unpatched until confirmed otherwise.

Patch Coverage by Windows Server Version

Product Patched Build Patch Channel KB / Reference
Windows Server 2012 / 2012 R2 ESU patch required ESU - WSUS / Microsoft Update Catalog ESU enrollment required; KB listed in MSRC advisory
Windows Server 2016 10.0.14393.9140 Windows Update / WSUS / Update Catalog KB5089549
Windows Server 2019 10.0.17763.8755 Windows Update / WSUS / Update Catalog KB5089549
Windows Server 2022 10.0.20348.5074 Windows Update / WSUS / Update Catalog KB5089549
Windows Server 2022 23H2 10.0.25398.2330 Windows Update / WSUS / Update Catalog KB5089549
Windows Server 2025 10.0.26100.32772 Windows Update / WSUS / Update Catalog KB5089549
Windows Server 2008 R2 (EoL) No official patch 0patch micropatch (Acros Security) One-instruction fix: mov edx, 0x40 halves max username length, preventing overflow
Critical operational note: Patch all domain controllers within the same maintenance window. A half-patched Active Directory forest is not a defensible state for a pre-authentication DC vulnerability. One unpatched DC anywhere in the forest is sufficient for exploitation - the attacker simply targets that node. Rolling deployment schedules that are appropriate for workstation patching are operationally unsafe here.

Verify Patch Status on a Domain Controller

# Method 1 - Check KB installation
wmic qfe get HotFixID | findstr KB5089549

# Method 2 - Check OS build number (Settings > About, or PowerShell)
[System.Environment]::OSVersion.Version

# Method 3 - Verify netlogon.dll hash directly
Get-FileHash C:\Windows\System32\netlogon.dll -Algorithm SHA256

# Expected patched hash:
A59733767285859FC3F982C46EA9C1173F4BF025D1569C03B4D137B55132B2DB

# Method 4 - Check file version
(Get-Item C:\Windows\System32\netlogon.dll).VersionInfo.FileVersion

Workarounds for Systems That Cannot Immediately Patch

These controls reduce exploitability while patches are being tested and deployed. They are not substitutes for patching - they are temporary risk reducers for environments with patch testing cycles or legacy systems.

Control What It Does Effectiveness
Block inbound UDP 389 at perimeter Prevents external attackers from reaching DC CLDAP service entirely High - eliminates external attack surface; does not protect against internal attacker
Restrict UDP 389 to trusted subnets Windows Firewall / Advanced Security rules limiting CLDAP access to domain-joined subnets and management hosts only High - limits blast radius if an internal host is compromised
IPsec policy on Netlogon endpoints Requires authenticated IPsec SA before Netlogon RPC endpoints are accessible Medium - operational overhead; may break some legitimate DC locator scenarios
Network micro-segmentation Enforce zone boundaries so no host outside a DC management subnet can reach DCs on UDP 389, TCP 445, or Netlogon RPC ports High - reduces east-west exposure; requires SDN or firewall policy enforcement
0patch micropatch (EoL systems only) Applies one-instruction runtime fix to netlogon.dll in memory without rebooting; prevents overflow by halving maximum username length Medium - effective for Server 2008 R2 with no vendor patch available
Enable Netlogon debug logging Captures all CLDAP requests and response details to %windir%\debug\netlogon.log Detection only - not a prevention control; run immediately on all unpatched DCs
# Enable Netlogon debug logging on all domain controllers
nltest /dbflag:0x2080ffff

# Log output path
%windir%\debug\netlogon.log
%windir%\debug\netlogon.bak

# Disable after patching to avoid log volume overhead
nltest /dbflag:0x0

Indicators of Compromise (IOCs)

No infrastructure IOCs (attacker IPs, C2 domains, campaign-specific file hashes) have been publicly released by CCB or any threat intelligence source as of June 2, 2026. The available IOCs are behavioral and signature-based, focused on the crash condition and the network-level exploit trigger.

Network-Level IOCs

Indicator Description Signal Strength
CLDAP SearchRequest (UDP 389) with User filter attribute > 100 bytes Normal DC locator pings use short usernames or omit the User attribute entirely. Values over 100 bytes are anomalous and directly match the exploit trigger condition. High
CLDAP SearchRequest with NtVer = 0x02 0x00 0x00 0x00 Legitimate DC locator clients set NtVer=6, which routes through the safe BuildSamLogonResponseEx path. This specific value forces the vulnerable legacy code path. High
Single-packet UDP 389 to DC with no response received If the DC does not respond to a CLDAP ping that was previously answered, LSASS has likely crashed. Correlate with subsequent DC reboot event. Medium - requires baseline of normal DC response behavior
Anomalous RPC/SMB traffic to DCs from non-domain-member source IPs Follow-on activity after a successful DoS or RCE attempt. Non-domain-member hosts should not be initiating Netlogon or SMB sessions to DCs. Medium

Host-Level IOCs

Indicator Log Source Signal Strength
Event ID 1000, faulting application lsass.exe, faulting module netlogon.DLL, exception code 0xc0000409 Windows Application Event Log Critical - exception code 0xc0000409 (STATUS_STACK_BUFFER_OVERRUN) is almost exclusively associated with GS stack cookie violations from buffer overflow exploitation
Unexpected DC reboot with no prior scheduled maintenance, Windows Update activity, or admin-initiated restart Windows System Event Log (Event ID 1074, 6006, 6008) High when correlated with CLDAP anomaly on same DC
Child processes of lsass.exe - e.g., cmd.exe, powershell.exe, rundll32.exe Sysmon Event ID 1 (Process Creation), EDR process telemetry Critical - LSASS does not spawn child processes under normal operation; presence indicates post-exploitation code execution
Outbound network connections originating from lsass.exe Sysmon Event ID 3 (Network Connection), EDR Critical - LSASS does not initiate outbound connections; indicates code running in LSASS context post-exploitation
Domain-wide authentication failure spike lasting ~60 seconds and self-resolving DC Security Event Log (Event IDs 4771, 4776), SIEM correlation High - the 60-second auth blackout pattern is specific to DC reboot from LSASS crash; not attributable to most other failure modes

Persistence Mechanism IOCs (Post-RCE)

If an attacker achieves full RCE rather than DoS, the following persistence mechanisms are relevant based on the vulnerability class and historical Netlogon-targeting attack patterns:

Persistence Mechanism Detection Signal
Golden Ticket creation via stolen krbtgt hash Kerberos tickets with anomalous lifetimes (>10 hours) or tickets presented from hosts that have no corresponding TGT request in DC logs (Event ID 4769 without preceding 4768)
New privileged domain accounts (Domain Admin, Enterprise Admin) Event ID 4720 (account creation) + Event ID 4728/4732 (group membership change to privileged groups) outside change-management windows
DCShadow - rogue DC registration to inject AD changes New domain controller objects appearing in AD Sites and Services without a corresponding legitimate DC promotion process; replication partner anomalies in DFS-R or AD replication monitoring
Skeleton Key malware injected into LSASS All domain accounts suddenly able to authenticate with a single master password; detected by ATA/MDI or memory integrity scanning of LSASS process
GPO modification for domain-wide backdoor deployment Event ID 5136 (GPO attribute change), Event ID 4739 (domain policy change) from unexpected admin accounts or during off-hours
DCSync credential harvesting Event ID 4662 on DC with Access Mask 0x100 for DS-Replication-Get-Changes-All rights, from accounts that are not domain controllers and not authorized replication partners

Detection: SIEM Queries

Splunk

# Detect LSASS crash with netlogon.DLL faulting module
index=wineventlog source="WinEventLog:Application"
  EventID=1000
  Process_Name="lsass.exe"
  Module_Name="netlogon.DLL"
  Exception_Code="0xc0000409"
| eval risk="CRITICAL - Possible CVE-2026-41089 exploitation"
| table _time, host, Process_Name, Module_Name, Exception_Code, risk
# Detect child processes spawned by lsass.exe (post-RCE signal)
index=sysmon EventCode=1 ParentImage="*lsass.exe"
| eval risk="CRITICAL - Abnormal LSASS child process"
| table _time, host, Image, ParentImage, CommandLine, risk

Elastic / Lucene (KQL)

# LSASS crash detection
event.code:1000 AND
process.name:lsass.exe AND
winlog.event_data.ModuleName:*netlogon* AND
winlog.event_data.ExceptionCode:0xc0000409

# LSASS outbound network connection (Sysmon EID 3)
event.code:3 AND process.name:lsass.exe AND
NOT destination.ip:(127.0.0.1 OR "::1")

Microsoft Sentinel (KQL)

# LSASS crash with netlogon faulting module
SecurityEvent
| where EventID == 1000
| where CommandLine contains "lsass.exe"
    and CommandLine contains "netlogon.DLL"
    and CommandLine contains "0xc0000409"
| project TimeGenerated, Computer, CommandLine
| extend Risk = "CRITICAL - CVE-2026-41089 candidate"

# Privileged group membership changes outside business hours
SecurityEvent
| where EventID in (4728, 4732, 4756)
| where MemberName !contains "expected-admin"
| where hourofday(TimeGenerated) !between (8 .. 18)
| project TimeGenerated, Computer, SubjectUserName, MemberName, GroupName

Immediate Response Actions

Step 1 - Audit patch status across all domain controllers

Run wmic qfe get HotFixID | findstr KB5089549 on every DC. Cross-reference with build numbers. Generate a list of unpatched nodes before doing anything else. One missed DC invalidates the entire remediation effort.

Step 2 - Patch all DCs in the same maintenance window

Apply the May 2026 Patch Tuesday updates to all domain controllers simultaneously. For ESU-covered Server 2012/2012 R2, apply via WSUS or Update Catalog. For EoL Server 2008 R2, apply 0patch micropatch immediately and begin emergency migration planning. Rolling deployment is not appropriate for this vulnerability class.

Step 3 - Block UDP 389 from untrusted sources at the network level

While patching is underway, restrict inbound CLDAP (UDP 389) to domain-joined hosts and management subnets via Windows Firewall Advanced Security rules and perimeter/internal firewall policy. Block from Internet-facing addresses unconditionally.

Step 4 - Enable Netlogon debug logging on all unpatched DCs

Run nltest /dbflag:0x2080ffff on every DC that has not yet been patched. This captures CLDAP request details to %windir%\debug\netlogon.log and provides evidence of any exploitation attempts that occurred before patching.

Step 5 - Retroactive log review on all DCs

Search Application Event Logs on every DC for Event ID 1000 with exception code 0xc0000409 and faulting module netlogon.DLL. Any such event on an unpatched DC prior to your patching date should be treated as a potential exploitation incident and trigger your IR procedures. Do not assume it was a benign crash.

Step 6 - Verify netlogon.dll binary integrity

Hash C:\Windows\System32\netlogon.dll on every DC and compare against the known patched SHA-256 (A59733767285859FC3F982C46EA9C1173F4BF025D1569C03B4D137B55132B2DB). Any mismatch should be investigated before the DC is treated as secured.

Long-Term Hardening Recommendations

Control Description Priority
DC patch SLA for pre-auth criticals Establish a formal policy: pre-authentication critical DC vulnerabilities must be patched within 24–72 hours of Patch Tuesday, not the standard 30-day enterprise window Immediate
Network micro-segmentation for DCs No host outside a defined DC management subnet should communicate with DCs on UDP 389, TCP 445, or Netlogon RPC ports. East-west DC access must be explicitly allow-listed. High
Tier 0 / PAW architecture Enforce Privileged Access Workstation model for DC administration. Credential material from Tier 1/2 systems must not appear on domain controllers. High
Windows Credential Guard on DCs Isolates credential material from LSASS context using virtualization-based security; limits damage if LSASS is compromised Medium
LSASS Protected Process Light (PPL) Prevents unauthorized access to LSASS memory from non-protected processes; reduces credential dumping surface Medium
Permanent CLDAP anomaly detection rule Integrate long User attribute and non-standard NtVer detection into your SIEM or NDR as a persistent rule - not just for this CVE but as general Netlogon abuse detection Medium
Migrate EoL Windows Server Plan and execute migration off Server 2012/2012 R2 and especially 2008 R2. ESU and micropatch coverage is finite; these systems are a permanent AD liability. Medium
Unexpected DC reboot IR runbook Any unscheduled DC reboot should trigger an automatic security investigation workflow, not just an infrastructure ticket. The 60-second auth blackout pattern from this exploit is specific and detectable. Ongoing

Part 4 covers MITRE ATT&CK mapping, advanced SIEM queries, and domain controller hardening for CVE-2026-41089.

SecPod | Prevent Cyberattacks