
Évaluation et maintenance autonomes pour la rotation des certificats Secure Boot de 2011 à 2023 (CVE-2023-24932 / KB5025885). Évaluation seule par défaut ; aucune dépendance, aucun accès réseau, aucune télémétrie.
Un script PowerShell autonome qui évalue la posture des certificats Secure Boot d'une machine Windows pour le passage de 2011 à 2023 (CVE-2023-24932 / KB5025885) et, uniquement lorsque vous le lui demandez explicitement, opte pour cette machine au pipeline de maintenance Microsoft.
Publié par Exchange Technology Services pour les clients et partenaires qui gèrent leurs propres endpoints.
Les certificats Secure Boot émis par Microsoft en 2011 expirent et sont remplacés par des versions 2023.
| 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 |
Aucune machine ne cesse de démarrer à l'une de ces dates. Selon Microsoft, un appareil qui atteint l'expiration sans les nouveaux certificats « continuera de démarrer et de fonctionner normalement. »
Ce qui est perdu, c'est la capacité de recevoir les mises à jour de sécurité au démarrage — nouvelles révocations Secure Boot, atténuations de contournement BitLocker, correctifs du gestionnaire de démarrage. Il s'agit d'une exposition qui s'accumule, et non d'une panne.
Après le 19 oct. 2026, une machine dont le firmware n'a jamais reçu Windows UEFI CA 2023 cesse également de valider les supports de démarrage Windows nouvellement signés, ce qui peut affecter les supports de récupération, d'installation et PXE.
Le KEK est la clé de voûte. Sans Microsoft Corporation KEK 2K CA 2023 dans le firmware, Windows Update ne peut pas du tout livrer la mise à jour DB. Une machine à qui il manque ne peut pas être corrigée tant que le KEK n'arrive pas via Windows Update ou une mise à jour BIOS du fabricant. C'est le blocage le plus courant en pratique, et le script le signale explicitement plutôt que d'écrire une valeur qui ne ferait rien.
Windows PowerShell 5.1, en tant qu'administrateur — la lecture des variables UEFI nécessite des privilèges élevés.
1. Débloquez le fichier (Windows bloque les scripts téléchargés) :
Unblock-File .\Invoke-SecureBootCertServicing.ps1
2. Évaluez — sûr, ne fait aucune modification :
powershell.exe -ExecutionPolicy Bypass -File .\Invoke-SecureBootCertServicing.ps1
3. Appliquez, uniquement si l'évaluation indique que la machine est prête :
.\Invoke-SecureBootCertServicing.ps1 -Apply -SuspendBitLocker
Le rapport est écrit avec Write-Host, il s'affiche donc sur la console et est enregistré par Start-Transcript. Une redirection > simple ne le capturera pas, pas plus qu'un pipe vers une autre commande.
Start-Transcript C:\Temp\secureboot.log
.\Invoke-SecureBootCertServicing.ps1
Stop-Transcript
Pour une copie lisible par machine, utile lors de la collecte de résultats sur un parc :
.\Invoke-SecureBootCertServicing.ps1 -JsonPath C:\Temp\secureboot.json
Le rapport affiche l'état de maintenance et l'état de migration séparément.
Ces deux états divergent réellement sur le terrain. Une machine peut indiquer UEFICA2023Status = Updated alors que les deux binaires du gestionnaire de démarrage sur disque sont toujours signés 2011 — cela se produit lorsque le firmware est livré avec l'AC 2023 pré-enregistrée, si bien que le volet certificat est terminé tandis que le volet gestionnaire de démarrage n'a jamais été exécuté. Fusionner les deux en un seul champ marque cette machine comme terminée alors qu'elle est à moitié migrée.
Pour la même raison, le script ne déduit pas l'état de WindowsUEFICA2023Capable. La documentation Microsoft dit de cette valeur, textuellement : « Pour référence uniquement — n'utilisez pas cette clé pour obtenir l'état des mises à jour Secure Boot. » Elle n'est capturée qu'à titre de diagnostic.
Les étapes de maintenance modifient l'état du firmware, ce qui peut déplacer les PCR TPM auxquels un protecteur BitLocker est scellé, et donc provoquer une demande de clé de récupération au prochain démarrage.
-Apply à grande échelle.-SuspendBitLocker suspend la protection pendant le prochain redémarrage afin que la modification soit rescellée sans demande. BitLocker reprend automatiquement ensuite.L'état BitLocker est lu de trois manières indépendantes (Get-BitLockerVolume, manage-bde et Win32_EncryptableVolume) puis reconcilié. Si les lecteurs divergent, ou si aucun ne peut lire le volume, le script refuse de modifier le firmware plutôt que de deviner.
Les machines virtuelles sont exclues par défaut : l'AC 2023 atteint la ligne de base du firmware via une mise à jour BIOS, et le firmware d'une VM provient de son hyperviseur — une machine invitée sur un hôte non mis à jour ne peut pas terminer seule la migration.
Testé de bout en bout sur Windows 11 (build 26200, PowerShell 5.1, exécuté en tant que SYSTEM), UEFI avec Secure Boot activé, BitLocker entièrement chiffré avec protecteurs TPM + RecoveryPassword sur un profil PCR 7,11 :
Windows UEFI CA 2023 tandis que bootmgfw.efi était toujours signé par Microsoft Windows Production PCA 2011 — et ne l'a pas marquée comme terminée, malgré le fait que cette machine indiquait simultanément UEFICA2023Status = Updated et WindowsUEFICA2023Capable = 2.0x80 (code de sortie 1).-Apply a écrit 0x5944, confirmé par une lecture indépendante du registre.-SuspendBitLocker suivi d'un redémarrage : la machine est revenue sans demande de clé de récupération et BitLocker a repris automatiquement.Start-Transcript a capturé le rapport complet ; la sortie JSON ne contenait aucune matière de clé de récupération.Pas encore observé : une machine terminant la migration complète vers FullyMigrated. La dernière étape est contrôlée par le déploiement progressif par appareil de Microsoft, qui échappe à tout contrôle. Le script affiche la raison indiquée par ce contrôle plutôt que de laisser un no-op inexpliqué.
MIT — voir LICENSE. Fourni tel quel, sans garantie. Examinez-le avant de l'exécuter dans votre environnement ; c'est un fichier unique et lisible précisément pour cette raison.
| 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 | désactivé | Effectue l'écriture. Sans lui, lecture seule. |
-SuspendBitLocker | désactivé | Suspend BitLocker pendant le redémarrage de maintenance. |
-RebootCount | 1 | Sur combien de redémarrages suspendre (1–15). |
-JsonPath | aucun | Écrit aussi l'évaluation en JSON. |
-MountPoint | lecteur système | Volume à évaluer. |
-ApplyValue | 0x5944 | Le DWORD AvailableUpdates. |
-AllowRevocation | désactivé | Requis pour toute valeur portant le bit DBX 0x80 irréversible. Ne le passez pas. |
-AllowVirtualMachine | désactivé | Permet d'armer une VM. |
-AllowServer | désactivé | Permet d'armer une édition Server. |