
baton drop (CVE-2022-21894): Vulnerabilidade de Bypass do Recurso de Segurança do Secure Boot
As Aplicações de Inicialização do Windows permitem a configuração truncatememory para remover blocos de memória contendo intervalos "persistentes" de dados serializados do mapa de memória, levando a um bypass do Secure Boot.
truncatememory removerá toda a memória acima de um endereço físico especificado do mapa de memória.bootdebug, testsigning, nointegritychecks), quebrando assim o Secure Boot.Este problema foi corrigido por duas alterações diferentes:
bootmgr, a inicialização da aplicação de inicialização falha.VERSIONINFO contendo um OriginalFilename, se esse nome de arquivo estiver incluído em uma lista de bloqueio (contendo bootmgr.exe e hvloader.exe; no Nickel, hvloader.efi foi adicionado, mas isso não foi backportado), o carregamento falha.
hvloader.exe não está incluído na lista de bloqueio do winload - originalmente estava, o que quebrou o carregamento do Hyper-V!flightedbootmgr para carregar o bootmgr do disco), o OriginalFilename é obrigado a ser bootmgr.exe.O atacante precisa garantir que a Política de Secure Boot serializada seja alocada acima de um endereço físico conhecido.
osdevice da entrada BCD for uma partição criptografada pelo BitLocker onde o VMK foi derivado usando o TPM.
O elemento avoidlowmemory pode ser usado para garantir que todas as alocações de memória física estejam acima de um endereço físico especificado:
bootmgr e especificar um caminho BCD personalizado (usando o elemento bcdfilepath também conhecido como custom:22000023) pode ser usado para contornar isso.bootmgr do Windows 8.x para desabilitar o VBS e depois trocar de volta para o bootloader original.
bootmgr do Windows 8.x falhará ao desbloquear o VMK em um sistema Windows 10+.O hvloader.efi pode ser carregado com o elemento nointegritychecks para carregar um mcupdate.dll autoassinado, cujo ponto de entrada será chamado antes do ExitBootServices.
Alternativamente, em sistemas não AMD64, o winload.efi anterior ao TH2 pode ser usado com o elemento testsigning; isso permite binários autoassinados com o EKU szOID_NT5_CRYPTO no certificado.
Em sistemas ARMv7, carregar um hal.dll autoassinado e modificado com uma importação para mcupdate.dll será necessário para obter execução de código.
Em sistemas x86 e AMD64, o arquivo carregado como mcupdate.dll deve ser nomeado mcupdate_*.dll, onde * é a string do fabricante da CPUID (GenuineIntel, AuthenticAMD, etc).
Em sistemas ARM64, esta técnica não pode ser usada devido ao build de produção assinado mais antigo disponível ser um WinPE do RS2; portanto, atualmente apenas a execução de código atrelada pode ser realizada (usando bootdebug).
Este repositório inclui os seguintes arquivos:
mcupdate.dll é executado em um endereço virtual com paginação ativada, é impossível chamar funções EFI diretamente (a paginação precisa ser desabilitada para chamar funções EFI, retornar a um endereço virtual com paginação desligada não leva a um bom resultado).BlImgLoadPEImageEx ou BlImgLoadPEImageFromSourceBuffer com o bit 0 definido nos flags para carregar um payload adicional em um mapeamento 1:1 de endereço físico para endereço virtual.
BlImgAllocateImageBuffer com o mesmo bit definido para alocar memória em um mapeamento 1:1 de endereço físico para endereço virtual; depois carregar um payload ele mesmo (ou se remapear lá).bootmgfw do Windows 8 RTM e o hvloader do TH1 RTM.
hvloader obtida por offset e depois loop infinito.bootmgr do RS1 e o hvloader do TH1 RTM.Este problema pode ser usado para despejar chaves do BitLocker (onde o Secure Boot é usado para validação de integridade).
A correção para este problema também corrigiu outro problema que não possui CVE.
bootmgr ignora qualquer keytable do BitLocker já na memória e aloca uma nova, sem limpar a antiga.
bootmgr do RS2+ a partir do bootmgr (especificando um osdevice arbitrário onde o Secure Boot é usado para validação de integridade), inicializar no WinPE, carregar um driver vulnerável conhecido e usá-lo para procurar e despejar a keytable existente do BitLocker na memória física.Nenhuma aplicação de inicialização vulnerável conhecida foi revogada ainda.
bootmgr verificar sua própria assinatura.Ocorreu uma revogação incompleta, e outro CVE (CVE-2023-24932). Ainda existem bootmgfws vulneráveis que não foram revogados, além de patches adicionais corrigindo apenas o caso em que o bootmgr carrega o bootmgr. Foi preciso apenas um bootkit colado para a MS agir ;)
Se você for criativo o suficiente, encontrará uma maneira de contornar a revogação de mais de 2000 arquivos bootmgfw ;)
bootmgr versão 19041.1081 e o hvloader do TH1 RTM.