Windows Kerberos Reflection via Unicode SPN Normalization Bypass (CVE-2026-26128)
by Jarno van den Brink (PoC tool); Guillaume André / Synacktiv (underlying research) · 2026-07-05
- Severity
- Critical
- CVE
- CVE-2026-26128
- Category
- network
- Affected product
- Windows Active Directory (DnsCache SPN resolution / Kerberos authentication)
- Affected versions
- Windows AD environments prior to the March 2026 Patch Tuesday update (SMB relay path patched then; ADCS web enrollment and MSSQL relay paths still exploitable per PoC)
- Disclosed
- 2026-07-05
- Patch status
- unpatched
Tags
Archive entry
intelseclab/poc-archiveMetadata
| Field | Value |
|---|---|
| Date Added | 2026-07-05 |
| Last Updated | 2026-05 |
| Author / Researcher | Jarno van den Brink (PoC tool); Guillaume André / Synacktiv (underlying research) |
| CVE / Advisory | CVE-2026-26128 |
| Category | network |
| Severity | Critical |
| CVSS Score | Not specified in source |
| Status | Weaponized |
| Tags | kerberos-relay, active-directory, adcs, unicode-normalization, spn-spoofing, ntlm-relay, dns-spoofing, privilege-escalation |
| Related | N/A |
Affected Target
| Field | Value |
|---|---|
| Software / System | Windows Active Directory (DnsCache SPN resolution / Kerberos authentication) |
| Versions Affected | Windows AD environments prior to the March 2026 Patch Tuesday update (SMB relay path patched then; ADCS web enrollment and MSSQL relay paths still exploitable per PoC) |
| Language / Platform | Python 3.8+ |
| Authentication Required | Yes (valid low-privileged domain credentials) |
| Network Access Required | Yes (must reach a Domain Controller’s LDAP/DNS and be able to coerce/observe authentication) |
Summary
CVE-2026-26128 is a Kerberos relay vulnerability rooted in a mismatch between how two different Windows components normalize Unicode characters when resolving Service Principal Names. The client-side DnsCache service uses CompareStringW with NORM_IGNORECASE, which fails to equate visually-similar “fullwidth”/circled Unicode characters (e.g. ⓢⓡⓥ1.ⓐⓓ.ⓛⓞⓒⓐⓛ) with the real ASCII hostname, while the Domain Controller uses LCMapStringEx with different normalization flags that do treat them as equivalent. By registering a DNS record for the Unicode look-alike hostname pointing at an attacker-controlled machine, an attacker can trick a victim service into issuing an AP-REQ that Kerberos will still validate as targeting the real host, letting it be relayed. This builds on prior Windows authentication-reflection mitigation research by Synacktiv. The PoC is a full Python relay toolkit (DNS record injection, SMB/HTTP relay servers, coercion helpers) supporting relay to ADCS web enrollment and MSSQL, ultimately netting a certificate usable to request a TGT via PKINIT.
Vulnerability Details
Root Cause
Windows’ DnsCache service and the Domain Controller’s authentication stack use two different Unicode normalization routines (CompareStringW/NORM_IGNORECASE vs LCMapStringEx with flags 0x31403) when comparing SPN/hostnames, causing a Unicode “confusable” hostname to be treated as distinct by one component and identical by the other.
Attack Vector
- Attacker with valid domain credentials connects to LDAP on the Domain Controller and registers a DNS record for a Unicode-normalized look-alike of a legitimate hostname (e.g. a target DC or SQL server).
- Attacker stands up SMB/HTTP relay listeners and coerces or waits for a privileged service/machine account to authenticate toward the spoofed hostname (e.g. via PetitPotam/DFSCoerce-style coercion or the target’s own DNS resolution).
- The victim’s Kerberos client resolves the Unicode SPN as matching the real target and issues an AP-REQ, which is intercepted and relayed by the attacker to an ADCS web enrollment endpoint or MSSQL server not enforcing channel binding/signing.
- The relayed authentication yields a certificate (or SQL session) that can be used to request a TGT via PKINIT, granting the attacker a foothold as the relayed machine/service account.
Impact
Enables authentication relay against ADCS certificate enrollment or MSSQL despite prior Windows relay mitigations, potentially leading to domain machine-account or service compromise and further privilege escalation.
Environment / Lab Setup
Target: Windows Active Directory domain with ADCS web enrollment or MSSQL relay targets, DC reachable over LDAP/DNS
Attacker: Python 3.8+, requirements.txt dependencies (impacket-derived libraries), network path to DC and relay target
Proof of Concept
PoC Script
See
CVE-2026-26128.pyand the supportinglib/package (DNS, coercion, relay clients/servers, Kerberos/SPNEGO utilities) in this folder.
| |
The tool authenticates to LDAP, injects a Unicode-confusable DNS record pointing at the attacker host, spins up an SMB/HTTP relay server, waits for the relayed AP-REQ, and forwards the resulting authentication to the specified ADCS or MSSQL target, ultimately writing a usable client certificate (.pfx) that can be exchanged for a Kerberos TGT via PKINIT.
Detection & Indicators of Compromise
Signs of compromise:
- New AD-integrated DNS records containing homoglyph or circled/fullwidth Unicode characters
- Unexpected certificate issuance events tied to machine accounts via web enrollment
- SMB/HTTP connections from non-standard hosts correlating with Kerberos AP-REQ relay patterns
Remediation
| Action | Detail |
|---|---|
| Primary fix | Apply the March 2026 Patch Tuesday update (closes the SMB relay path); monitor Microsoft advisories for full closure of ADCS/MSSQL relay paths |
| Interim mitigation | Enforce channel binding (EPA) on ADCS web enrollment and require encryption/signing on MSSQL connections; restrict who can create DNS records in AD-integrated zones |
References
Notes
Mirrored from https://github.com/jarnovandenbrink/CVE-2026-26128 on 2026-07-05.
| |