CVE-2026-66804: dangling COM registration leads to SYSTEM in Windows

James Forshaw from Google Project Zero analyzed CVE-2026-66804 — an LPE in Windows caused by an incomplete fix for the earlier CVE-2026-50343 (Dark Elevator).
The system retained a CrossDevice COM registration with the CLSID {E9F83CF2-E0C0-4CA7-AF01-E90C70BEF496}, pointing to a missing %PROGRAMDATA%\CrossDevice\CrossDevice.Streaming.Source.dll. Because regular users can create directories under C:\ProgramData, an attacker can plant their own DLL at the expected path.
The main challenge is getting a privileged process to load it. Forshaw used custom COM marshaling: an object implementing IMarshal can specify an arbitrary CLSID to use during unmarshaling, causing the COM runtime to look up the corresponding in-process server and load its DLL. Exploitation therefore requires a privileged COM server that does not disable custom marshaling. Forshaw found one in the Shell Create Object Handler, hosted in dllhost.exe as NT AUTHORITY\SYSTEM with CustomMarshalAllowed=True.
A regular user can start the privileged server through the \Microsoft\Windows\Shell\CreateObjectTask scheduled task, after creating the global ShellCreateObjectTaskReadyEvent event. The attacker can then pass a specially crafted COM object to the ICreateObject interface. During unmarshaling, COM resolves the CrossDevice CLSID and loads the planted DLL from %PROGRAMDATA% into the SYSTEM process, resulting in privilege escalation.
Forshaw published a fully working exploit. He also included a PowerShell script using OleViewDotNet and NtObjectManager to identify other registered in-process COM classes whose DLLs cannot be found by LoadLibrary. The resulting paths must then be manually checked to determine whether an attacker can plant a DLL there.
Forshaw notes that the same exploitation technique can simplify exploitation of other dangling COM registrations and can also be applied to buggy custom COM unmarshalers.
Vulnerabilities
7.8
CVE-2026-50343
7.8
CVE-2026-66804
Vendors
Microsoft
Google
Products
Com
Createobjecttask
Crossdevice
Crossdevice.Streaming.Source.Dll
Dllhost.Exe
Icreateobject
More