
Standalone assessment and servicing for the Secure Boot 2011 to 2023 certificate rollover (CVE-2023-24932 / KB5025885). Assess-only by default; no dependencies, no network, no telemetry.
A single, self-contained PowerShell script that assesses a Windows machine's Secure Boot certificate posture for the 2011 → 2023 rollover (CVE-2023-24932 / KB5025885) and, only when you explicitly ask it to, opts that machine in to the Microsoft servicing pipeline.
Published by Exchange Technology Services for customers and partners who manage their own endpoints.
The Secure Boot certificates Microsoft issued in 2011 are expiring and being replaced by 2023 versions.
| Certificate | Date | Store | Role |
|---|---|---|---|
| Microsoft Corporation KEK CA 2011 | expired 24 Jun 2026 | KEK | Authorises updates to DB and DBX |
| Microsoft UEFI CA 2011 | expired 27 Jun 2026 | DB | Signs third-party loaders / option ROMs |
| Windows Production PCA 2011 | 19 Oct 2026 | DB | Signs the Windows boot loader |
No machine stops booting on any of these dates. Microsoft's guidance is that a device reaching expiry without the new certificates "will still start and operate normally."
What is lost is the ability to receive early-boot security updates — new Secure Boot revocations, BitLocker bypass mitigations, boot-manager fixes. That is accumulating exposure rather than an outage.
After 19 Oct 2026, a machine whose firmware never took Windows UEFI CA 2023 also
stops validating newly-signed Windows boot media, which can affect recovery, install and
PXE media.
The KEK is the gate. Without Microsoft Corporation KEK 2K CA 2023 in firmware,
Windows Update cannot deliver the DB update at all. A machine missing it cannot be
remediated until the KEK arrives via Windows Update or an OEM BIOS update. This is the
most common blocker in practice, and the script reports it explicitly rather than writing
a value that would do nothing.
Windows PowerShell 5.1, as Administrator — reading the UEFI variables requires elevation.
1. Unblock the file (Windows blocks downloaded scripts):
Unblock-File .\Invoke-SecureBootCertServicing.ps1
2. Assess — safe, makes no changes:
powershell.exe -ExecutionPolicy Bypass -File .\Invoke-SecureBootCertServicing.ps1
3. Apply, only if the assessment says the machine is ready:
.\Invoke-SecureBootCertServicing.ps1 -Apply -SuspendBitLocker
The report is written with Write-Host, so it renders on the console and is recorded by
Start-Transcript. A plain > redirect will not capture it, and neither will piping
to another command.
Start-Transcript C:\Temp\secureboot.log
.\Invoke-SecureBootCertServicing.ps1
Stop-Transcript
For a machine-readable copy, useful when collecting results across a fleet:
.\Invoke-SecureBootCertServicing.ps1 -JsonPath C:\Temp\secureboot.json
The report shows servicing state and migration state separately.
These genuinely disagree in the field. A machine can report UEFICA2023Status = Updated
while both boot-manager binaries on disk are still 2011-signed — that happens when the
firmware shipped the 2023 CA pre-enrolled, so the certificate side completed while the
boot-manager side never ran. Folding the two into one field reports that machine as
finished when it is half-migrated.
For the same reason the script does not derive status from WindowsUEFICA2023Capable.
Microsoft's documentation says of that value, verbatim: "For reference only - do not use
this key when getting status on Secure Boot updates." It is captured as a diagnostic only.
The servicing steps change firmware state, which can move the TPM PCRs a BitLocker protector is sealed to, which can produce a recovery-key prompt at the next boot.
-Apply at scale.-SuspendBitLocker suspends protection across the next reboot so the change re-seals
without prompting. BitLocker resumes automatically afterwards.BitLocker state is read three independent ways (Get-BitLockerVolume, manage-bde, and
Win32_EncryptableVolume) and reconciled. If the readers disagree, or if none can read the
volume, the script refuses to change firmware rather than guess.
Virtual machines are excluded by default: the 2023 CA reaches the firmware baseline via a BIOS update, and a VM's firmware comes from its hypervisor — a guest on an un-updated host cannot complete the migration on its own.
Tested end to end on Windows 11 (build 26200, PowerShell 5.1, running as SYSTEM), UEFI with Secure Boot enabled, BitLocker fully encrypted with TPM + RecoveryPassword protectors on a PCR 7,11 profile:
Windows UEFI CA 2023
while bootmgfw.efi was still signed by Microsoft Windows Production PCA 2011 — and did
not report it as finished, despite that machine simultaneously reporting
UEFICA2023Status = Updated and WindowsUEFICA2023Capable = 2.0x80 revocation bit (exit 1).-Apply wrote 0x5944, confirmed by an independent registry read.-SuspendBitLocker followed by a reboot: the machine returned with no recovery prompt
and BitLocker auto-resumed.Start-Transcript captured the full report; the JSON output contained no recovery-key
material.Not yet observed: a machine completing the full migration to FullyMigrated. The final
step is gated by Microsoft's staged per-device rollout, which is outside anyone's control.
The script surfaces that gate's stated reason rather than leaving it as an unexplained no-op.
MIT — see LICENSE. Provided as-is, with no warranty. Review it before running it in your environment; it is a single readable file for exactly that reason.
| Property | Detail |
|---|
| Default behaviour | Assessment only. Zero writes without -Apply. |
| Dependencies | None. No modules, no installer. Windows PowerShell 5.1. |
| Network access | None. It never contacts any host. |
| Telemetry / reporting | None. Everything it finds, it prints to your console. Nothing leaves the machine. |
| BitLocker recovery keys | Never read, printed, or transmitted. It only checks whether a recovery-password protector exists. |
What -Apply writes | Exactly one registry value: AvailableUpdates = 0x5944 under HKLM\SYSTEM\CurrentControlSet\Control\Secureboot. The documented KB5025885 opt-in. Additive — it adds the 2023 certificate without removing the 2011 one. |
| Irreversible actions | Hard-refused. The 0x80 DBX revocation bit is permanent while Secure Boot stays enabled; the script refuses any value carrying it unless -AllowRevocation is passed explicitly. Do not pass it. |
| Reboots | It never reboots the machine and never prompts the user. |
| Verdict | Meaning | Exit |
|---|
ReadyToArm | KEK 2023 present, DB not yet migrated, not opted in. -Apply is the next step. | 0 |
HalfMigrated | Firmware trusts the 2023 CA but the machine still boots a 2011-signed loader. Fine today; would fail to boot if 2011 were ever revoked. Still needs the boot-manager update. | 0 |
HalfMigrated-Armed | As above, and already opted in. Restart the machine — do not run -Apply again. | 0 |
AlreadyQueued | Opted in, waiting on Microsoft's staged rollout. | 0 |
InProgress / RebootPending | Servicing underway. Reboot and re-run to watch progress. | 0 |
FullyMigrated | Done. Boot manager is 2023-signed. | 2 |
BlockedNoKek2023 | KEK 2023 missing. Install pending Windows Updates and/or the OEM BIOS update first. | 3 |
BlockedFirmwareKek | Firmware has no KEK signed by this machine's Platform Key. Needs an OEM BIOS update (or, on a VM, a host update). | 3 |
NotApplicable-* | Legacy BIOS, or Secure Boot disabled. | 2 |
Error | Servicing reported a fault; the error code is printed. | 0 |
| Parameter | Default | Purpose |
|---|
-Apply | off | Perform the write. Without it, read-only. |
-SuspendBitLocker | off | Suspend BitLocker across the servicing reboot. |
-RebootCount | 1 | How many reboots to suspend across (1–15). |
-JsonPath | none | Also write the assessment as JSON. |
-MountPoint | system drive | Volume to evaluate. |
-ApplyValue | 0x5944 | The AvailableUpdates DWORD. |
-AllowRevocation | off | Required for any value carrying the irreversible 0x80 DBX bit. Do not pass this. |
-AllowVirtualMachine | off | Permit arming a VM. |
-AllowServer | off | Permit arming a Server SKU. |