VMware Secure Boot CA 2023 Readiness and the VMW.NULLPK Question
A Windows virtual machine on VMware vSphere logs Event 1803 or Event 1795
from Microsoft-Windows-TPM-WMI while trying to apply the 2023
Secure Boot certificates. Reading the UEFI Platform Key with
Get-SecureBootUEFI -Name PK returns a 28-byte
EFI_SIGNATURE_LIST header plus a 16-byte
SignatureOwner GUID (44 bytes total) followed by a zero byte:
VMW.NULLPK. On the next VM in the same cluster, PK is
also VMW.NULLPK, yet that machine does not need a Platform Key
update at all.
Both observations are accurate. On vSphere, VMW.NULLPK is
evidence of how the virtual firmware initialized its Platform Key. It is not, by
itself, proof that the guest is missing the 2023 Key Exchange Key or that a
hypervisor-level PK replacement is required before Windows can finish the
2023 Boot Manager transition.
I added
Detect_VMwareSecureBootUEFICA2023.ps1
and updated the companion inventory and segmentation scripts in
endpoint-toolkit to separate those cases cleanly using the rules
documented in
Broadcom KB 423893
and
Microsoft KB 5085046.
Why PK, KEK and DB fail in different places
Windows Secure Boot servicing is driven by the
\Microsoft\Windows\PI\Secure-Boot-Update scheduled task and the
AvailableUpdates bitmask under
HKLM\SYSTEM\CurrentControlSet\Control\SecureBoot. When armed with
0x5944, the task processes five actions in a fixed order and clears
each bit as it succeeds, leaving the 0x4000 modifier bit at
completion:
0x0040— add Windows UEFI CA 2023 todb(Event 1036).0x0800— add Microsoft Option ROM UEFI CA 2023 todbifMicrosoft Corporation UEFI CA 2011is present (Event 1044).0x1000— add Microsoft UEFI CA 2023 todbifMicrosoft Corporation UEFI CA 2011is present (Event 1045).0x0004— add Microsoft Corporation KEK 2K CA 2023 toKEK(Event 1043).0x0100— install the Windows UEFI CA 2023–signed boot manager on the EFI System Partition (Event 1799, followed by Event 1808 when servicing is complete).
Microsoft's troubleshooting guide
(KB 5085046)
notes one important exception to strict step-by-step blocking: if step 4
(0x0004) cannot be processed because a PK-signed KEK is missing,
the scheduled task still proceeds to step 5 (0x0100) and applies
the 2023-signed Windows Boot Manager. On an affected VMware VM, you will
commonly see the 2023 DB certificates and the 2023 Boot Manager already applied
while AvailableUpdates remains stuck at 0x4004 waiting
on the KEK bit.
The trust delegation boundary explains why steps 1 through 3 behave differently from step 4:
- DB updates are authorized by KEK, not by PK. The Windows
update payloads that append the 2023 certificates to
dbare signed by the existingMicrosoft Corporation KEK CA 2011. As long as the 2011 KEK is present in virtual NVRAM, Windows can updatedbeven on a VM whose Platform Key isVMW.NULLPK. - KEK updates are authorized by PK. To append
Microsoft Corporation KEK 2K CA 2023at step 4 from inside the guest OS, Windows needs a KEK update payload signed by the platform's PK — on vSphere,Windows OEM Devices PK. WhenPKisVMW.NULLPKandKEK 2023is absent from NVRAM, step 4 cannot be authorized from the guest OS and logs Event 1803 (missing PK-signed KEK) or Event 1795 (firmware rejected the variable write). - If KEK 2023 is already in NVRAM, step 4 has nothing to prove.
When the virtual NVRAM already contains
Microsoft Corporation KEK 2K CA 2023, the VM does not need an OS-driven KEK update, which means it does not need a Platform Key replacement to complete the 2023 transition.
Three VMware NVRAM cohorts that look alike from the outside
In vSphere, a VM's Secure Boot databases are initialized in its
.nvram file when the VM is first powered on (or inherited verbatim
from a VM template or an OVF/OVA that includes an NVRAM file). Per
Broadcom KB 423893,
the initial certificate set depends on the ESXi release and VM Hardware Version
at creation time:
| ESX version & VM HW at creation | Initial PK | Initial KEK | Initial DB (Microsoft certificates) |
|---|---|---|---|
| Earlier than ESXi 8.0 U2 (with HW v14+), or any ESX with HW v13 | VMW.NULLPK |
KEK CA 2011 only | Production PCA 2011, UEFI CA 2011 |
| ESXi 8.0 U2 through 8.0 U3i (P08) with HW v14+ | VMW.NULLPK |
KEK 2K CA 2023 + KEK CA 2011 | Windows UEFI CA 2023, Microsoft UEFI CA 2023, Production PCA 2011, UEFI CA 2011 |
| ESXi 8.0 U3j (P09)+ or ESX 9.x with HW v14+ | Windows OEM Devices PK | KEK 2K CA 2023 + KEK CA 2011 | Windows UEFI CA 2023, Microsoft UEFI CA 2023, Production PCA 2011, UEFI CA 2011 |
Look closely at the middle row. Every VM created from scratch on ESXi 8.0 U2
through 8.0 U3i (P08) with VM Hardware Version 14 or newer carries
VMW.NULLPK, and already carries
Microsoft Corporation KEK 2K CA 2023,
Windows UEFI CA 2023 and Microsoft UEFI CA 2023 in
NVRAM.
There is one subtle omission in that initial NVRAM table: Broadcom notes that
vSphere does not pre-populate Microsoft Option ROM UEFI CA 2023
in db at VM creation, while it does pre-populate
Microsoft Corporation UEFI CA 2011. Under Microsoft's
0x4000 modifier rule, the presence of
Microsoft Corporation UEFI CA 2011 makes both
Microsoft UEFI CA 2023 (0x1000) and
Microsoft Option ROM UEFI CA 2023 (0x0800) applicable
during Windows servicing.
That omission creates an easy detection bug. If a script only routes
VMW.NULLPK guests to standard OS servicing when all
applicable 2023 DB certificates are already present in NVRAM, every unserviced
ESXi 8.0 U2–U3i (P08) VM fails that check because
Microsoft Option ROM UEFI CA 2023 has not been added by Windows
yet. The right question is simpler: is KEK 2023 already in
NVRAM? If it is, Windows can add any missing 2023 DB certificates
(using KEK) and install the 2023 boot manager without touching the Platform
Key.
How Broadcom updates VMW.NULLPK when KEK 2023 is missing
When a Secure Boot–enabled VM is genuinely in the first cohort
(KEK 2023 is absent from NVRAM and PK is
VMW.NULLPK), the Platform Key has to be replaced with
Windows OEM Devices PK before Windows can complete step 4
(0x0004). Broadcom's supported path depends on whether a virtual
TPM (vTPM) is attached to the VM, and requires VM Hardware Version
14 or newer:
- vTPM disabled — SilentPK update: On
ESXi 8.0 U3j (P09)+ and ESX 9.1.1.0+, vSphere
silently enrolls
Windows OEM Devices PKduring a guest reboot or VM power cycle. Because no vTPM is present, updating the PK from the hypervisor cannot invalidate TPM PCR measurements. - vTPM enabled — Capsule PK update: On a vTPM-enabled Windows VM, changing Secure Boot variables from outside the guest OS alters PCR 7 measurements without Windows' coordination and risks BitLocker recovery. Broadcom's automated solution for vTPM-enabled Windows guests uses a standard Windows firmware capsule update delivered through VMware Tools. In Device Manager, this appears under Firmware as Platform Key Firmware.
Broadcom KB 423893 sets several concrete prerequisites for the Capsule PK path that are worth checking before scheduling reboots:
- vCenter, host release and cold power-on: Broadcom's documented infrastructure sequence upgrades both vCenter Server and ESX hosts in the cluster to 9.1.1.0+ (automated PK remediation for vTPM-enabled VMs on vSphere 8.x is still listed by Broadcom for a future 8.x patch release). After the host upgrade, the VM must go through a full power-on on the patched host and be on VM Hardware Version 14 or higher.
- Windows cumulative update and VMware Tools 13.1.5+ sequence: Requires the July 2026 or later Windows cumulative update and VMware Tools 13.1.5+. On Windows Server 2019, Windows Server 2022, Windows 11 23H2 and Windows 10 21H2, the July 2026+ cumulative update must be installed before upgrading VMware Tools to 13.1.5 so the capsule PK driver is installed. Only Windows Server 2025 and Windows 11 24H2/25H2 allow installing the cumulative update after upgrading to Tools 13.1.5.
- Deferred Windows SKUs in VMware Tools 13.1.5: Broadcom notes that the Capsule PK driver is not included in VMware Tools 13.1.5 for Windows Server 2016, Windows 10 22H2 or Windows 10 1809; support for those three is deferred to a future VMware Tools release.
- Manual VMX / vUEFI fallbacks: Broadcom documents
uefi.secureBoot.PK.resetOnce = "TRUE"(on ESXi 8.0 U3j+ / ESX 9.0+) and manual vUEFI enrollment, but explicitly notes that the VMX method on vTPM-enabled VMs is recommended only for Linux guests. If a manual PK update is used on a vTPM-enabled Windows VM, suspend BitLocker and back up recovery keys before powering off the VM.
What Detect_VMwareSecureBootUEFICA2023 checks
Detect_VMwareSecureBootUEFICA2023.ps1 is a standalone,
strictly read-only Intune Remediations detection script. It
never writes registry values, never modifies UEFI variables, never triggers the
Secure-Boot-Update task and never touches BitLocker protectors. Its
only writes are CMTrace log entries under
%ProgramData%\Microsoft\IntuneManagementExtension\Logs\PR_VMwareSecureBootCA2023.log.
Several failure modes showed up during review and testing that a naive script gets wrong:
- Unknown states must fail closed. If
Win32_ComputerSystemfails, if Secure Boot state cannot be determined, ifGet-SecureBootUEFIcannot readPK,KEKordbon a Secure Boot–enabled VM, or if theMicrosoft-Windows-TPM-WMIevent log query fails, the script exits1withNON-COMPLIANT-COLLECTION-ERROR. It never turns a failed WMI or firmware read intoNOT-APPLICABLE(Exit 0),NullPKor absent vTPM. - Live NVRAM overrides stale registry and old Event 1808 entries.
If a VM was previously updated (
UEFICA2023Status = Updated,AvailableUpdates = 0x4000, Event 1808 in the System log) and its.nvramwas later reset or restored from an older snapshot, relying on registry and event log state alone reports a falseCOMPLIANT. Conversely, on successfully serviced systems (observed on Windows 11 24H2/25H2) where no servicing error occurred,UEFICA2023Errormay be absent from theServicingkey; an absentUEFICA2023ErroralongsideUEFICA2023Status = Updatedis normalized to0rather than treated as a missing-data failure. - Event chronology matters in both directions. A historical
Event 1803 from before a SilentPK or Capsule PK update must not permanently
block a VM that now has
Windows OEM Devices PKin NVRAM. A historical Event 1800 from before the last OS boot must not report a permanent reboot requirement, while a current-boot Event 1800 (or a blocking error logged after an older Event 1808/1799) must preventCOMPLIANT. Because frequent Event 1801 assessment entries can fill a 100-event window, the script queries completion and pending-restart events (1808,1799and1800inSystem, plus1799in the optionalMicrosoft-Windows-TPM-WMI/Operationalchannel) and blocking events independently. - Not every non-zero PnP code on the Capsule device means "reboot".
When the
Platform Key FirmwarePnP device is present in Device Manager,ConfigManagerErrorCode = 14(CM_PROB_NEED_RESTART) indicates a staged capsule update waiting on a guest restart. Other non-zero codes (such as10,28or31) indicate a driver or device failure and are reported separately asNON-COMPLIANT-VMWARE-CAPSULE-ERROR.
| Marker | Exit | Condition |
|---|---|---|
COMPLIANT |
0 |
Live NVRAM has KEK 2023 + required 2023 DB certs, Status=Updated, Err=0, Avl=0x4000, Capsule PnP is clean, and Event 1808/1799 is verified with no newer blocker or current-boot pending restart. |
NOT-APPLICABLE |
0 |
Confirmed non-VMware platform, or a VMware VM where Secure Boot is confirmed disabled or unsupported (Legacy BIOS). |
PREREQ |
1 |
Script was started in 32-bit PowerShell instead of 64-bit PowerShell. |
NON-COMPLIANT-COLLECTION-ERROR |
1 |
CIM platform query, Secure Boot state, UEFI variable read (PK/KEK/db), PnP query or TPM-WMI event query failed. |
NON-COMPLIANT-VMWARE-CAPSULE-REBOOT |
1 |
VMware Platform Key Firmware PnP device has ConfigManagerErrorCode = 14; guest restart required to complete the Capsule PK update. |
NON-COMPLIANT-VMWARE-CAPSULE-ERROR |
1 |
VMware Platform Key Firmware PnP device has a non-zero error code other than 14; inspect Device Manager rather than rebooting. |
NON-COMPLIANT-PENDING-REBOOT |
1 |
KEK 2023 is in NVRAM and AvailableUpdates = 0x4100 (or a current-boot Event 1800 is active); guest restart required before Secure Boot servicing can continue. |
NON-COMPLIANT-OS-SERVICING-NEEDED |
1 |
KEK 2023 is already in NVRAM (PK replacement not required even with VMW.NULLPK), but one or more required 2023 DB certs (such as Microsoft Option ROM UEFI CA 2023) or OS Boot Manager servicing is still incomplete. |
NON-COMPLIANT-VMWARE-PK-BLOCKED |
1 |
KEK 2023 is missing from NVRAM and PK is NullPK or None; blocked on Broadcom hypervisor PK remediation (SilentPK when vTPM=False, Capsule PK when vTPM=True). |
NON-COMPLIANT-PK-READY-NEEDS-KEK |
1 |
KEK 2023 is missing from NVRAM, but Windows OEM Devices PK (WinOemPK) is present; ready for standard Windows servicing (AvailableUpdates = 0x5944). |
NON-COMPLIANT-VMWARE-PK-UNRECOGNIZED |
1 |
KEK 2023 is missing from NVRAM and PK contains a custom or unrecognized non-null payload instead of Windows OEM Devices PK. |
Run locally or through Intune Remediations
In Intune Remediations, deploy
Detect_VMwareSecureBootUEFICA2023.ps1 as a detection-only package
(leave the remediation script slot empty) with:
- Run this script using the logged-on credentials: No
(runs as
SYSTEMin Intune;Get-SecureBootUEFIrequires elevated Administrator orSYSTEMprivileges) - Enforce script signature check: No (or sign according to your organization's policy)
- Run script in 64-bit PowerShell: Yes
Each run prints a single line under Intune's 2048-character limit with a
human-readable reason on the left of | and space-delimited,
whitespace-free key=value telemetry tokens on the right:
The following sample output uses illustrative device names and model values.
.\Detect_VMwareSecureBootUEFICA2023.ps1
# Physical device in a mixed-fleet assignment (Exit 0):
NOT-APPLICABLE: Device is not a VMware virtual machine (Manufacturer=LENOVO, Model=EXAMPLE-MODEL) | Host=EXAMPLE-CLIENT Plat=LENOVO SB=Enabled vTPM=N/A Status=Updated Err=0 Avl=0x4000 Capable=2 Conf=High_Confidence PK=N/A KEK23=N/A DbWin23=N/A DbOptRom23=N/A Db3P23=N/A DbAll23=N/A Trust=N/A VMTools=N/A CapOS=N/A CapPnP=N/A LastEvt=1808 Task=Ready OSBuild=26200
# ESXi 8.0 U2-U3i (P08) VM with VMW.NULLPK and pre-populated KEK 2023 (Exit 1):
NON-COMPLIANT-OS-SERVICING-NEEDED: KEK 2023 is in NVRAM (PK update not required; missing DB cert(s): MSOptionRomUEFICA2023); complete Windows Secure-Boot-Update servicing (Status=NotStarted, Avl=None) | Host=EXAMPLE-VM-01 Plat=VMware SB=Enabled vTPM=True Status=NotStarted Err=0 Avl=None PK=NullPK KEK23=True DbWin23=True DbOptRom23=False Db3P23=True DbAll23=False Trust=MSAnd3P VMTools=12.4.0 CapOS=SupportedIn1315 CapPnP=Absent LastEvt=None Task=Ready OSBuild=20348
# Pre-8.0 U2 VM with VMW.NULLPK, vTPM=True, missing KEK 2023 (Exit 1):
NON-COMPLIANT-VMWARE-PK-BLOCKED: Missing KEK 2023 blocked by PK=NullPK (Broadcom KB 423893: vTPM=True, VMTools=13.1.5 (>=13.1.5): requires ESX 9.1.1.0+, VM HW v14+ (cold power-on), and July 2026+ CU for Capsule PK update (Supported in VMTools 13.1.5 (install July 2026+ CU prior to upgrading to Tools 13.1.5))) | Host=EXAMPLE-VM-02 Plat=VMware SB=Enabled vTPM=True Status=InProgress Err=0x80070002 Avl=0x4004 PK=NullPK KEK23=False DbWin23=True DbOptRom23=True Db3P23=True DbAll23=True Trust=MSAnd3P VMTools=13.1.5 CapOS=SupportedIn1315 CapPnP=Absent LastEvt=1803 Task=Ready OSBuild=20348
Segmenting the fleet export
The general fleet inventory script
(Get-SecureBootCertInventory.ps1)
now also captures pkSt, vtpm, vmt
(VMware Tools version), pkCap (Capsule PnP error code),
compOk and rebootPend. Its offline companion
(Split-SecureBootPopulation.ps1)
accepts either the JSON inventory export or the summary lines from
Detect_VMwareSecureBootUEFICA2023.ps1, and splits VMware guests
by the actual work required instead of placing every non-updated VM into a
single VirtualVMware bucket:
.\Split-SecureBootPopulation.ps1 `
-Path .\DeviceStatus.csv `
-OutputCsv .\segmented-fleet.csv
VMwareCapsuleReboot— Capsule PK staged in Device Manager (ConfigManagerErrorCode = 14); schedule a guest restart.VMwareCapsuleError— Capsule PnP device present with a non-14 error code; investigate the driver or device state before rebooting.VMwareOsServicing—KEK 2023is already in NVRAM (including ESXi 8.0 U2–U3i P08 VMs withNullPK); assign standard OS-side Secure Boot servicing.VMwarePkReadyNeedsKek—KEK 2023is missing, butWindows OEM Devices PKis already enrolled in NVRAM; assign standard OS-side Secure Boot servicing.VMwarePkBlockedVtpm— missingKEK 2023withNullPKandvTPM = True; route to the Broadcom Capsule PK workflow (or manual PK update with BitLocker suspended).VMwarePkBlockedNoVtpm— missingKEK 2023withNullPKandvTPM = False; route to the Broadcom SilentPK host patch and guest restart workflow.
Keep guest evidence within its boundaries
A guest OS script can observe what is in its own virtual NVRAM, registry,
Device Manager tree and event logs. It cannot see vCenter, the ESXi host build,
the VM Hardware Version (13 vs. 14+) or whether the VM has completed a cold
power-on since the host was patched. Treat the guest detection output as the
guest half of the evidence and pair it with vCenter inventory (or Broadcom's
Virtual Machine UEFI Secure Boot Platform Key is out of date alarm,
which requires patching both vCenter and ESX to 9.1.1.0+) before triggering
hypervisor changes.
Be equally conservative with BitLocker. Even when certificate updates run
through supported OS or capsule mechanisms, non-standard boot orders — such as
PXE network boot ahead of the on-disk Windows Boot Manager, documented in
KB 5085046
— or legacy BitLocker PCR bindings (0,2,4,11 instead of PCR 7) can
still trigger recovery prompts across a servicing reboot. Screen for legacy PCR
bindings first with
BitLockerPcrDetection-Ivanti.ps1,
and pilot the detection and servicing workflow on representative VMware guests
before broad deployment.
The scripts and documentation are in the
SecureBootRemediation
directory of endpoint-toolkit. For the underlying vendor and
OS guidance, see
Broadcom KB 423893,
Microsoft KB 5085046,
Microsoft KB 5080921
and
Microsoft KB 5016061.