Back to Intelligence

CVE-2026-62712: Windows UMPDDrvRealizeBrush Local Privilege Escalation — Detection and Remediation Guide

SA
Security Arsenal Team
September 8, 2026
10 min read

The Zero Day Initiative has published advisory ZDI-26-621 covering CVE-2026-62712, a local privilege escalation vulnerability in Microsoft Windows tracked at CVSS 7.8. The flaw lives in the User-Mode Printer Driver (UMPD) subsystem — specifically in the UMPDDrvRealizeBrush function — and is classified as an improper object management flaw, which in GDI/UMPD code typically means an object lifecycle or reference-handling defect that an attacker can weaponize into arbitrary kernel-context or elevated-context code execution.

The exploitation prerequisite matters: an attacker must already be executing low-privileged code on the target. That makes this a classic post-compromise escalation primitive — exactly the class of bug ransomware operators and APT intrusion chains rely on to move from a phished user session to SYSTEM. If your threat model assumes initial access will eventually happen (and it should), a reliable LPE like this is what turns a containable endpoint compromise into full domain impact. Defenders need to treat this with the same urgency as any actively weaponizable local escalation: patch fast, hunt for escalation artifacts, and reduce the attack surface in the interim.

Technical Analysis

Affected Component

The vulnerable function, UMPDDrvRealizeBrush, belongs to the User-Mode Printer Driver hosting path used by Windows to service printer driver callbacks. When GDI needs to realize a brush object for printing operations, control passes through the UMPD host process (PrintIsolationHost.exe for isolated drivers) and into GDI handling code (win32u.dll / win32kfull.sys for kernel-mode GDI paths). Improper object management in this path means the driver-facing code fails to correctly validate, reference-count, or type-check an object during brush realization — opening the door to type confusion or use-after-free style primitives.

Why This Function Family Is Dangerous

The UMPD* callback family has a long, well-documented abuse history. Because these functions accept attacker-influenced parameters from user-mode callers and act on complex graphics objects, object management defects here frequently yield:

  • Arbitrary read/write primitives usable for token theft (SYSTEM token duplication)
  • Privilege escalation from a standard user to SYSTEM without user interaction beyond running the exploit binary
  • Sandbox escape potential from low-integrity contexts such as browser renderer processes or Office containers

Exploitation Requirements and Status

  • Attack vector: Local (AV:L). The attacker needs code execution at low privilege — typically achieved via phishing, a dropped loader, or a second-stage payload.
  • User interaction: None beyond the initial low-privileged foothold.
  • Severity: CVSS 7.8 (High) per ZDI.
  • Exploitation status (as of advisory publication): ZDI advisories at this stage typically follow coordinated disclosure with no confirmed in-the-wild exploitation reported yet, and CVE-2026-62712 has not been listed in the CISA Known Exploited Vulnerabilities catalog at time of writing. However, ZDI's publication means technical details are now public, and LPEs in the printer/GDI stack historically get reverse-engineered into working exploits quickly — sometimes within days of the patch diff. Do not confuse "no confirmed exploitation" with "no risk."

Likely Exploitation Pattern (Defender's Model)

Based on the function and bug class, a working exploit chain would most likely:

  1. Run as a standard user (possibly from a low-integrity sandbox).
  2. Create/manipulate GDI objects (DCs, brushes, palettes) and trigger the vulnerable UMPDDrvRealizeBrush path — often via print driver callbacks or NtGdi* syscalls.
  3. Abuse the object management defect to corrupt memory or swap object types.
  4. Achieve kernel write → overwrite the process token or enable privileges (SeDebugPrivilege, SeImpersonatePrivilege).
  5. Spawn a child process (frequently cmd.exe, powershell.exe, or an injected payload) running as NT AUTHORITY\SYSTEM.

That last observable — a user-context process producing SYSTEM-privileged children — is your highest-fidelity detection hook.

Detection & Response

This is a technical threat. The following detections target the observable behaviors of a UMPD/GDI object-management LPE: privilege boundary violations, abnormal process trees involving the print isolation host, and token-elevation artifacts. Tune for your environment, but none of these should fire broadly on a healthy fleet.

Sigma Rules

YAML
---
title: Suspicious Child Process Spawned by Print Isolation Host
id: 8c2a1f47-3b6e-4d91-a5c2-7e9f0b1d3a55
status: experimental
description: Detects PrintIsolationHost.exe spawning command shells, script engines, or other executables. PrintIsolationHost is the UMPD driver host and should never spawn interactive child processes; this is a strong indicator of printer-driver-path exploitation such as CVE-2026-62712.
references:
  - https://www.zerodayinitiative.com/advisories/ZDI-26-621/
  - https://attack.mitre.org/techniques/T1068/
author: Security Arsenal
date: 2026/02/14
tags:
  - attack.privilege_escalation
  - attack.t1068
logsource:
  category: process_creation
  product: windows
detection:
  selection_parent:
    ParentImage|endswith: '\PrintIsolationHost.exe'
  selection_children:
    Image|endswith:
      - '\cmd.exe'
      - '\powershell.exe'
      - '\pwsh.exe'
      - '\wscript.exe'
      - '\cscript.exe'
      - '\rundll32.exe'
      - '\regsvr32.exe'
      - '\mshta.exe'
      - '\net.exe'
      - '\net1.exe'
      - '\whoami.exe'
  condition: selection_parent and selection_children
falsepositives:
  - Rare. Legitimate print isolation hosts do not spawn interactive shells or admin tooling.
level: high
---
title: Non-System Parent Spawning Process Running as SYSTEM
id: 4f7b9e12-6c3a-4d82-b9e1-2a5c8d0f6b77
status: experimental
description: Detects a SYSTEM-privileged process whose parent is a non-elevated user process, consistent with token-theft privilege escalation from object-management bugs such as CVE-2026-62712 in the UMPD/GDI stack.
references:
  - https://www.zerodayinitiative.com/advisories/ZDI-26-621/
  - https://attack.mitre.org/techniques/T1134/
author: Security Arsenal
date: 2026/02/14
tags:
  - attack.privilege_escalation
  - attack.t1134
  - attack.t1068
logsource:
  category: process_creation
  product: windows
detection:
  selection_user:
    User: 'NT AUTHORITY\SYSTEM'
  selection_shells:
    Image|endswith:
      - '\cmd.exe'
      - '\powershell.exe'
      - '\pwsh.exe'
  filter_known_parents:
    ParentImage|endswith:
      - '\services.exe'
      - '\svchost.exe'
      - '\wininit.exe'
      - '\smss.exe'
      - '\MsMpEng.exe'
      - '\SgrmBroker.exe'
      - '\msiexec.exe'
      - '\TiWorker.exe'
      - '\wmiprvse.exe'
      - '\taskhostw.exe'
      - '\spoolsv.exe'
  condition: selection_user and selection_shells and not filter_known_parents
falsepositives:
  - Software deployment agents or management tools spawning interactive SYSTEM shells. Tune ParentImage filters per your management stack (SCCM, Intune, RMM).
level: high
---
title: Unusual GDI/Print API Churn from Suspicious User Processes
id: 1d9e5a38-2f47-4b60-8c13-9e4a7d2c5f66
status: experimental
description: Detects unsigned or temp-directory executables loading printer and GDI-related modules, consistent with LPE tooling that drives the UMPD callback path used by CVE-2026-62712.
references:
  - https://www.zerodayinitiative.com/advisories/ZDI-26-621/
  - https://attack.mitre.org/techniques/T1068/
author: Security Arsenal
date: 2026/02/14
tags:
  - attack.privilege_escalation
  - attack.t1068
logsource:
  category: image_load
  product: windows
detection:
  selection_dlls:
    ImageLoaded|endswith:
      - '\winspool.drv'
      - '\umpdmgr.dll'
  selection_suspicious_path:
    Image|startswith:
      - 'C:\Users\'
      - 'C:\ProgramData\'
      - 'C:\Windows\Temp\'
  condition: selection_dlls and selection_suspicious_path
falsepositives:
  - Legitimate printing from user-context applications (e.g., browsers printing documents). Correlate with unsigned binaries and non-standard app paths.
level: medium

KQL — Microsoft Sentinel / Defender Hunting

This query hunts for the two primary exploitation artifacts: print-isolation-host child processes and SYSTEM shells spawned from user-context parents. Run it across the last 14 days and baseline before deploying as an analytic rule.

KQL — Microsoft Sentinel / Defender
// Hunt for UMPD/GDI LPE indicators (CVE-2026-62712): anomalous process trees involving
// PrintIsolationHost and SYSTEM-context shells spawned by non-system parents.
let Lookback = 14d;
let SystemParents = dynamic(["services.exe", "svchost.exe", "wininit.exe", "smss.exe", "msiexec.exe", "TiWorker.exe", "wmiprvse.exe", "taskhostw.exe", "spoolsv.exe", "MsMpEng.exe"]);
union isfuzzy=true
(
    DeviceProcessEvents
    | where TimeGenerated > ago(Lookback)
    | where InitiatingProcessFileName =~ "PrintIsolationHost.exe"
    | where FileName in~ ("cmd.exe", "powershell.exe", "pwsh.exe", "rundll32.exe", "regsvr32.exe", "mshta.exe", "wscript.exe", "cscript.exe", "net.exe", "whoami.exe")
    | project TimeGenerated, DeviceName, FileName, ProcessCommandLine, InitiatingProcessFileName, InitiatingProcessCommandLine, AccountName, SHA256 = SHA256, ReportId
    | extend Indicator = "PrintIsolationHost spawned child process"
),
(
    DeviceProcessEvents
    | where TimeGenerated > ago(Lookback)
    | where AccountName =~ "SYSTEM"
    | where FileName in~ ("cmd.exe", "powershell.exe", "pwsh.exe")
    | where not(InitiatingProcessFileName in~ (SystemParents))
    | project TimeGenerated, DeviceName, FileName, ProcessCommandLine, InitiatingProcessFileName, InitiatingProcessCommandLine, AccountName, SHA256, ReportId
    | extend Indicator = "SYSTEM shell from non-system parent"
)
| sort by TimeGenerated desc

Velociraptor VQL

Use this artifact during triage on a host where LPE is suspected. It enumerates live processes and flags SYSTEM-privileged shells or print-isolation hosts with unusual command lines — useful for confirming whether an exploitation chain already executed.

VQL — Velociraptor
-- Triage: find SYSTEM-context interactive shells and anomalous PrintIsolationHost instances
-- relevant to UMPD/GDI privilege escalation (CVE-2026-62712 / ZDI-26-621)
SELECT Pid,
       Ppid,
       Name,
       CommandLine,
       Exe,
       Username,
       CreateTime
FROM pslist()
WHERE (Username =~ 'SYSTEM'
       AND Name =~ '(?i)cmd\.exe|powershell\.exe|pwsh\.exe')
   OR (Name =~ '(?i)printisolationhost\.exe'
       AND CommandLine =~ '(?i)cmd|powershell|pwsh|\\temp\\|\\users\\|\\programdata\\')

Remediation & Verification Script

Run the following on endpoints (or via your RMM/Intune at scale) to confirm the servicing state, enumerate recently installed updates, and harden the print subsystem while patching rolls out.

PowerShell
# CVE-2026-62712 (ZDI-26-621) - Verification and hardening helper
# Run elevated. Checks patch state, reports recent hotfixes, and applies interim hardening.

# 1) Confirm OS build and latest cumulative update install date
$os = Get-CimInstance Win32_OperatingSystem
Write-Host "[i] OS: $($os.Caption) Build $($os.BuildNumber).$((Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion').UBR)"

Write-Host "`n[i] Hotfixes installed in the last 60 days:"
Get-HotFix | Where-Object { $_.InstalledOn -gt (Get-Date).AddDays(-60) } |
    Sort-Object InstalledOn -Descending | Format-Table HotFixID, Description, InstalledOn -AutoSize

# 2) Check for pending reboot (patches staged but not active)
$pendingReboot = Test-Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired'
Write-Host "`n[i] Pending reboot from Windows Update: $pendingReboot"

# 3) Interim attack-surface reduction: audit/stop the Print Spooler on systems
#    that do NOT require printing (servers, jump boxes, kiosks)
$spooler = Get-Service -Name Spooler
Write-Host "`n[i] Print Spooler status: $($spooler.Status) / StartType: $($spooler.StartType)"
Write-Host "    -> On non-print servers, disable until patched:"
Write-Host "       Stop-Service -Name Spooler -Force; Set-Service -Name Spooler -StartupType Disabled"

# 4) Verify print driver isolation is enabled (Group Policy baseline)
$isolation = Get-ItemProperty 'HKLM:\SOFTWARE\Policies\Microsoft\Windows NT\Printers' -Name 'PrintDriverIsolationEnabled' -ErrorAction SilentlyContinue
if ($null -eq $isolation) {
    Write-Host "`n[!] PrintDriverIsolationEnabled policy not explicitly set. Recommended: enabled (1)."
    Write-Host "    Set-ItemProperty 'HKLM:\SOFTWARE\Policies\Microsoft\Windows NT\Printers' -Name 'PrintDriverIsolationEnabled' -Value 1"
} else {
    Write-Host "`n[i] PrintDriverIsolationEnabled = $($isolation.PrintDriverIsolationEnabled)"
}

# 5) Baseline check: SYSTEM shells with non-system parents (quick local sweep of recent process ancestry requires EDR; see KQL/VQL above)
Write-Host "`n[i] Next step: run the Sentinel KQL hunt and Velociraptor artifact from the IR runbook across the fleet."

Remediation

  1. Apply the Microsoft security update for CVE-2026-62712 immediately. The fix is delivered through the corresponding monthly cumulative update for your Windows version (Windows 10/11 and Windows Server editions, as listed in Microsoft's Security Update Guide entry for CVE-2026-62712). Verify the installed build/UBR against the Microsoft Security Response Center (MSRC) advisory page for this CVE — do not rely on patch date alone.
  2. Confirm reboots completed. A staged-but-unapplied cumulative update leaves the vulnerable code path active. Sweep for RebootRequired flags fleet-wide.
  3. Reduce the attack surface during rollout. On servers, jump boxes, and any system that does not print, stop and disable the Print Spooler service. This eliminates the UMPD hosting path entirely and is a zero-cost mitigation for the bug class. Ensure print driver isolation is enabled via Group Policy so driver code runs in PrintIsolationHost.exe rather than inside the spooler.
  4. Deploy the detections above (Sigma via your SIEM pipeline, KQL as a Sentinel analytic rule with high severity, VQL for IR triage). Privilege-escalation process-tree anomalies are low-noise, high-signal — these are rules worth alerting on, not just hunting with.
  5. Watch CISA KEV. If CVE-2026-62712 is added to the Known Exploited Vulnerabilities catalog, federal deadlines (typically 21 days for BOD 22-01 agencies) become a forcing function — and history says GDI/print-stack LPEs get operationalized by ransomware affiliates quickly.
  6. Layered controls: enforce application control (WDAC/AppLocker) to block unsigned binaries in user-writable paths, and keep Credential Guard / LSASS protection enabled so a successful SYSTEM escalation does not automatically become domain compromise.

References:

Related Resources

Security Arsenal Penetration Testing Services AlertMonitor Platform Book a SOC Assessment vulnerability-management Intel Hub

Is your security operations ready?

Get a free SOC assessment or see how AlertMonitor cuts through alert noise with automated triage.