CVE-2026-50518 — Windows DHCP Server Remote Code Execution Vulnerability
Executive Summary
Heap-based buffer overflow in Windows DHCP Server allows an unauthorized attacker to execute code over a network.
Overview
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H/E:U/RL:O/RC:C
EPSS Score
Affected Products
| Product | KB Article | Severity | Impact | Restart Required |
|---|---|---|---|---|
| Windows 10 Version 1607 for 32-bit Systems | 5099535 (Security Update) |
Critical | Remote Code Execution | Yes |
| Windows 10 Version 1607 for x64-based Systems | 5099535 (Security Update) |
Critical | Remote Code Execution | Yes |
| Windows 10 Version 1809 for 32-bit Systems | 5099538 (Security Update) |
Critical | Remote Code Execution | Yes |
| Windows 10 Version 1809 for x64-based Systems | 5099538 (Security Update) |
Critical | Remote Code Execution | Yes |
| Windows Server 2012 | 5099445 (Monthly Rollup) |
Critical | Remote Code Execution | Yes |
| Windows Server 2012 (Server Core installation) | 5099445 (Monthly Rollup) |
Critical | Remote Code Execution | Yes |
| Windows Server 2012 R2 | 5099444 (Monthly Rollup) |
Critical | Remote Code Execution | Yes |
| Windows Server 2012 R2 (Server Core installation) | 5099444 (Monthly Rollup) |
Critical | Remote Code Execution | Yes |
| Windows Server 2016 | 5099535 (Security Update) |
Critical | Remote Code Execution | Yes |
| Windows Server 2016 (Server Core installation) | 5099535 (Security Update) |
Critical | Remote Code Execution | Yes |
| Windows Server 2019 | 5099538 (Security Update) |
Critical | Remote Code Execution | Yes |
| Windows Server 2019 (Server Core installation) | 5099538 (Security Update) |
Critical | Remote Code Execution | Yes |
| Windows Server 2022 | 5099540 (Security Update) |
Critical | Remote Code Execution | Yes |
| Windows Server 2025 | 5099536 (Security Update) |
Critical | Remote Code Execution | Yes |
| Windows Server 2025 (Server Core installation) | 5099536 (Security Update) |
Critical | Remote Code Execution | Yes |
Patches
| Article | Type | Restart |
|---|---|---|
5099535 |
Security Update | Yes |
5099538 |
Security Update | Yes |
5099445 |
Monthly Rollup | Yes |
5099444 |
Monthly Rollup | Yes |
5099540 |
Security Update | Yes |
5099536 |
Security Update | Yes |
Patch Diff
Heap-based buffer overflow (CWE-122) in the Windows DHCP Server Service dhcpssvc.dll punycode DNS-name conversion, unauthenticated remote code execution over the network (Critical, AV:N, CVSS 9.8). The DHCP server parses DHCP options carrying DNS names (client FQDN option / domain search list) in wire/punycode form and converts them to Unicode in DhcpGetUnicodeNameFromWirePunycodeName, which walks the name label-by-label calling ConvertPunycodeToUnicode into a fixed 512-byte (0x200) destination buffer. PRE: the remaining-space accounting was incorrect - the running size was recomputed as remaining = remaining + (remaining>>1)*-2 + 2 instead of being properly decremented per converted label - so a crafted name with enough/long labels could drive the cumulative Unicode output past the end of the destination buffer, a heap overflow. Because the DHCP server processes attacker-supplied packets over the network without authentication, the overflow is an RCE primitive (Microsoft rates it Critical 9.8). Diff of dhcpssvc.dll 10.0.14393.8781 (KB5094122) -> .9339 (KB5099535, Jul 14 2026, Server 2016) confirms the fix: DhcpGetUnicodeNameFromWirePunycodeName (ratio 0.69) is reworked and CFR-gated to decrement the input/output space correctly per label (input_remaining = (input_remaining - 1) - label_len; dst += converted_len) and to check the ConvertPunycodeToUnicode return before advancing, so the accumulated output can no longer exceed the buffer. Lineage note: this is the Server 2016 (14393) pair (winbindex-indexed); the same fix ships across affected DHCP-Server SKUs incl. Server 2025 (26100.33158 / KB5099536), 2019 (KB5099538), 2022 (KB5099540). Surrounding DHCP option parsers (DhcpParseOptionV6, DhcpParseRegistryOption, DhcpGetOptionV6ByOptClass, AddVendorOptDefsFunc*) are hardened in the same update under Feature_661624120.
| Function | Address | Change | Note |
|---|---|---|---|
DhcpGetUnicodeNameFromWirePunycodeName |
code change |
code (punycode->unicode name-conversion buffer accounting fixed, CFR-gated) | Pre: converts a wire/punycode DNS name into a fixed 512-byte buffer with incorrect remaining-space accounting (remaining = remaining + (remaining>>1)*-2 + 2), letting cumulative writes overflow. Post (ratio 0.69, CFR-gated): decrements input/output space correctly per label and checks ConvertPunycodeToUnicode's return before advancing dst. |
DhcpParseOptionV6 / DhcpParseRegistryOption / DhcpGetOptionV6ByOptClass / AddVendorOptDefsFunc(6) |
code change |
code (DHCP option-parsing hardening in the same update) | Related DHCP option/vendor-option parsing routines reworked alongside the name-conversion fix, under Feature_661624120. |
Feature_2907675961 / Feature_661624120 |
gate |
added (CFR gates) | CFR flags gating the corrected name conversion and the broader DHCP option-parsing hardening; the original code ships when disabled. |
Attack Path
A crafted DHCP DNS-name option overflows the 512-byte punycode-to-unicode conversion buffer on the DHCP server
Derived from the patch delta: the checks added by the vendor identify which fields crossed a trust boundary unvalidated. Reachability and privilege are taken from the call chain in the RCA report.
Exploits & PoC
Detection Rules
Acknowledgments
Amit Schendel with Ventris
Lewis Lee
Owen McCullough with MSRC V&M