Microsoft Windows NCSI Cross-Context Proxy Authentication Coercion - ZDI-26-708 - Part 1
A researcher reverse-engineers Windows NCSI (ncsi.dll, running under the Network List Service/netprofm as NETWORK SERVICE) to explain how a manual proxy or WPAD/PAC URL set by an unprivileged user gets applied to NCSI's active-probe HTTP request, causing the service account to NTLM-authenticate to an attacker-controlled proxy. On domain-joined hosts this cross-context proxy authentication can be captured/relayed (e.g. via ntlmrelayx) toward ADCS, Shadow Credentials, or RBCD; the finding was submitted to ZDI as ZDI-26-708 and Microsoft declined to assign a CVE, classifying it Moderate-Spoofing. Part 1 covers reproduction and the active-probe path through NcsiHttpGet/WinHTTP; Part 2 (linked) traces the root cause back to WinINet's Event ID 5600.
What it is
Part 1 of a reverse-engineering series on ZDI-26-708, an authentication-coercion primitive in Windows NCSI (Network Connectivity Status Indicator). It carries the concrete internals the summary abstracts away: the specific WinHTTP option NCSI gets wrong, the probe-mode branch that applies the user's proxy, and a five-step PoC. The bug is unpatched; Microsoft classified it Moderate–Spoofing and declined a CVE, so it will not be prioritized for a fix.
How it works
Two independent details the summary omits:
- The WinHTTP option mistake. While preparing the active-probe session, NCSI calls
WinHttpSetOptionwithWINHTTP_OPTION_DISABLE_PROXY_AUTH_SCHEMESbut passes0x100(WINHTTP_PROXY_DISABLE_AUTH_LOCAL_SERVICE). The bit that actually disables NTLM is0x04, which NCSI never sets — so NTLM is not disabled on the captured path. (The author notes WinHTTP was not shown ignoring a policy; NCSI simply failed to set the right bit.) - The user-proxy probe branch. NCSI's reversed probe modes include types 4 and 5, the "user-proxy" modes. In that branch,
NcsiHttpGetopens a no-proxy session, then explicitly applies the stored proxy viaWINHTTP_OPTION_PROXY(38), after setting the undocumentedWINHTTP_OPTION_PROXY_DISABLE_SERVICE_CALLS(137). The proxy string is already resident (IsUserProxyConfigured = 1, set when WinINet emits Event ID 5600; a WNF callback then queues the probe). No user impersonation occurs — the request runs as NETWORK SERVICE with user-chosen destination.
Preconditions / Affected
- Windows 11 / Server 2022+ run NCSI under Network List Service (
netprofm,svchost.exe -k netprofm); Windows 10 uses NLA. Both hostncsi.dllas NETWORK SERVICE. - A relay chain additionally needs the host domain-joined, plus a relay target lacking signing/channel-binding. The non-domain-joined test showed no computer account in the auth exchange.
What to do
Reproduce with the author's minimal PoC:
- Log on as a non-administrative user.
- Configure a manual proxy or PAC URL you control.
- Let the proxy change trigger NCSI's active probe.
- Return
407 Proxy Authentication Required. - Observe the request and NTLM exchange originating from the
netprofmprocess.
Inspect current proxy state (also reveals PerUserProxySettings):
netsh winhttp show advproxyConfirm origin via Process Monitor (TCP connection from the netprofm svchost) or WinDbg at the point NCSI handles user-proxy metadata.
Caveats
The author is explicit that this is a coercion primitive, not a complete escalation chain: usefulness depends on domain membership, the auth WinHTTP negotiates, and an unprotected relay target. Part 2 (unwritten here) traces the root cause to Event ID 5600 and includes the author's failed attempts.
Organisations named here
- ADCS
- Event ID 5600
- NCSI
- ncsi.dll
- NcsiHttpGet
- netprofm
- NETWORK SERVICE
- PAC
- RBCD
- Shadow Credentials
- WINHTTP_OPTION_DISABLE_PROXY_AUTH_SCHEMES
- WINHTTP_OPTION_PROXY
- WPAD
- ZDI-26-708
Technologies named here
- ZDI
- Microsoft Windows NCSI
- Windows 11
- WinDbg
- Windows Server 2022 and later
- IDA
- Windows 10
- ChatGPT
- impacket-ntlmrelayx
- WinHTTP
- Process Monitor
- WinINet
- netsh winhttp show advproxy
- Windows
- Active Directory
- Impacket
- Kali Linux
Techniques named here
- Cross-context proxy authentication coercion
- WPAD/PAC abuse
- NTLM relay
- Active probe abuse
Related in Offensive Security