Original publish date: November 10, 2026
KB ID: 5135557
Summary
Windows updates released on and after November 10, 2026, contain additional protections that address CVE-2026-118737. These updates represent the first phase of improvements to NTLM message signing. These changes help ensure that authenticated NTLM sessions always establish a cryptographic session key and negotiate real message signing, reducing exposure to relay attacks.
Timeline
Phase 1 (November 10, 2026): Windows client devices begin offering NTLM signing on all connections by default. Servers accept both signed and unsigned clients. Auditing events identify clients not using signing.
Phase 2 (May 2027): Windows servers begin requiring NTLM signing by default. Clients that do not offer signing will be rejected by secure servers.
Note
All supported Windows Server versions are capable of NTLM signing. This rollout simply helps ensure that signing is negotiated and eventually required by default.
Background
NTLM supports two signing modes.
| Mode | Flag | Protection |
|---|---|---|
| NTLMSSP_NEGOTIATE_SIGN | 0x00000010 | Real HMAC-MD5 signing. Session key established. Cannot be forged. |
| NTLMSSP_NEGOTIATE_ALWAYS_SIGN | 0x00008000 | Legacy 16-byte zero placeholder. No cryptographic protection. |
Prior to this change, applications that did not request ISC_REQ_INTEGRITY or ISC_REQ_RELAY_DETECT or ISC_REQ_SEQUENCE_DETECT (Context Requirements - Win32 apps) received contexts using the ALWAYS_SIGN placeholder. All supported Windows servers already support signing. This change helps ensure that it is used consistently.
NTLM auditing: How do I know if NTLM is using SIGN?
Start by reviewing the negotiated flags for every NTLM authentication. They appear under Event ID: 4023 (server-side) and Event ID: 4022 (client-side) in Microsoft-Windows-NTLM/Operational.
Note that these events are available on Windows Server 2019 and later with the NTLM Enhanced auditing.GOOD — Event 4023: Signing Negotiated
(Phase 2-ready)⚠️ BAD — Event 4023: Signing Absent
(Will be rejected in Phase 2)Level: Warning
A remote client is using NTLM to authenticate to this workstation.
Process Information:
Process Name: svchost
Remote Client Information:
Username: Administrator
Domain: corp.contoso.com
Client Machine: WORKSTATION-01
Client IP: 10.1.2.100
NTLM Security:
Negotiated Flags: 0xE0888215
NTLM Version: NTLMv2
Session Key Status: Present
Channel Binding: SupportedLevel: Warning
A remote client is using NTLM to authenticate to this workstation.
Process Information:
Process Name: svchost
Remote Client Information:
Username: Administrator
Domain: corp.contoso.com
Client Machine: WORKSTATION-01
Client IP: 10.1.2.100
NTLM Security:
Negotiated Flags: 0xA0888205
NTLM Version: NTLMv2
Session Key Status: Missing
Channel Binding: Not SupportedLook for the key difference in Session Key Status: Present and Negotiated Flags containing bit 0x10 (SIGN) and 0x40000000 (KEY_EXCH). A connection is secure when both bits are set. See MS-NLMP NegotiateFlags for full flag definitions.
Decode negotiated flags using the following table.
Bit value Flag name Meaning 0x00000010NTLMSSP_NEGOTIATE_SIGN✅ Real signing negotiated. Session key present. 0x40000000NTLMSSP_NEGOTIATE_KEY_EXCH✅ Session key exchanged. Required for SIGN. 0x00008000NTLMSSP_NEGOTIATE_ALWAYS_SIGN⚠️ No protection if SIGN is absent. Diagnose your connection as:
Phase 2-ready: 0xE0888215 — contains 0x10 + 0x40000000 + Session Key: Present
Needs attention: 0xA0888205 — no 0x10 (SIGN) bit, Session Key: Missing
Find clients not sending SIGN
Do not filter by event level alone — both signed and unsigned connections appear at the same Warning level. Check the SIGN bit directly.
Get-WinEvent -LogName "Microsoft-Windows-NTLM/Operational" -ErrorAction SilentlyContinue |
Where-Object { $_.Id -in @(4022, 4023) } |
ForEach-Object {
$flags = if ($_.Message -match "Negotiated Flags:\s+(0x[0-9A-Fa-f]+)") { $Matches[1] } else { "?" }
$flagVal = if ($flags -ne "?") { [long]$flags } else { 0L }
if (-not ($flagVal -band 0x10)) { # NTLMSSP_NEGOTIATE_SIGN bit absent
[PSCustomObject]@{
Time = $_.TimeCreated
Id = $_.Id
ClientIP = if ($_.Message -match "Client IP:\s+(\S+)") { $Matches[1] } else { "-" }
ClientHost = if ($_.Message -match "Client Machine:\s+(\S+)") { $Matches[1] } else { "-" }
User = if ($_.Message -match "Username:\s+(\S+)") { $Matches[1] } else { "-" }
Flags = $flags
KeyStatus = if ($_.Message -match "Session Key Status:\s+(\S+)") { $Matches[1] } else { "-" }
Process = if ($_.Message -match "Process Name:\s+(.+)") { $Matches[1].Trim() } else { "-" }
}
}
} | Sort-Object ClientIP -Unique | Format-Table -AutoSize
Registry keys introduced by the November 10, 2026 Windows updates
ClientAllowUnsignedNtlm
| Item | Details |
|---|---|
| Path | HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\MSV1_0 |
| Value name | ClientAllowUnsignedNtlm |
| Type | REG_DWORD |
| Value | 0 (default) - Client offers SIGN on all non-anonymous connections. 1 - Client does NOT offer SIGN. Use only for temporary compatibility. |
ServerRequireNtlmSign
| Item | Details |
|---|---|
| Path | HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\MSV1_0 |
| Value name | ServerRequireNtlmSign |
| Type | REG_DWORD |
| Value | 0 (default) - Server accepts both signed and unsigned clients for secure connections. 1 - Server rejects unsigned clients. Recommended once auditing confirms readiness. |
| Note | No restart required. Enable ServerRequireNtlmSign=1 once sufficient Event ID: 4023 auditing shows no unsigned connections. |
Frequently asked questions (FAQ)
Will this change affect Kerberos?
No. These changes apply only to NTLM authentication.
Will anonymous (null session) connections continue to work?
Yes. Anonymous connections (ISC_REQ_NULL_SESSION) are explicitly exempt. They have no session key by design. Both Phase 1 and Phase 2 exempt anonymous connections.
Will guest account connections continue to work?
Yes. Guest account connection is also exempt. Like anonymous connections, it carries no real session key and no meaningful privilege. There is no security value in requiring signing for guest sessions.
What if a client connects to an older server that does not support SIGN?
If the server does not echo SIGN back in its Challenge, the client automatically removes SIGN from the session and falls back to legacy ALWAYS_SIGN behavior. No connection failure. All Windows servers echo SIGN by default.
What error will rejected clients see in Phase 2?
SEC_E_UNSUPPORTED_FUNCTION (0x80090302). The server logs Warning Event 4023 with this status code.
How do I know if my environment is ready for Phase 2?
Run the PowerShell script included in this article. If no results appear (no unsigned connections), you are ready. Proactively set ServerRequireNtlmSign=1 to enforce it early.