
baton drop (CVE-2022-21894): Vulnérabilité de contournement de la fonctionnalité de sécurité Secure Boot
Les applications de démarrage Windows permettent au paramètre truncatememory de supprimer de la carte mémoire les blocs de mémoire contenant des plages « persistantes » de données sérialisées, ce qui conduit à un contournement de Secure Boot.
truncatememory supprime de la carte mémoire toute la mémoire située au-dessus d'une adresse physique spécifiée.bootdebug, testsigning, nointegritychecks), cassant ainsi Secure Boot.Ce problème a été corrigé par deux changements distincts:
bootmgr, l'initialisation de l'application de démarrage échoue.VERSIONINFO contenant un OriginalFilename, et si ce nom de fichier figure dans une liste de blocage (contenant bootmgr.exe et hvloader.exe; dans Nickel, hvloader.efi a été ajouté mais cela n'a pas été rétroporté), le chargement échoue.
hvloader.exe n'est pas inclus dans la liste de blocage de winload - il l'était à l'origine, ce qui cassait le chargement d'Hyper-V!flightedbootmgr pour charger bootmgr depuis le disque), OriginalFilename doit obligatoirement être bootmgr.exe.L'attaquant doit s'assurer que la stratégie Secure Boot sérialisée est allouée au-dessus d'une adresse physique connue.
osdevice de l'entrée BCD est une partition chiffrée BitLocker dont le VMK a été dérivé à l'aide du TPM.
L'élément avoidlowmemory peut être utilisé pour garantir que toutes les allocations de mémoire physique se situent au-dessus d'une adresse physique spécifiée:
bootmgr et la spécification d'un chemin BCD personnalisé (via l'élément bcdfilepath alias custom:22000023) peuvent être utilisés pour contourner cette restriction.bootmgr Windows 8.x pour désactiver VBS, puis de revenir au bootloader d'origine.
bootmgr Windows 8.x ne pourra pas desceller le VMK sur un système Windows 10+.hvloader.efi peut être chargé avec l'élément nointegritychecks pour charger un mcupdate.dll auto-signé, dont le point d'entrée sera appelé avant ExitBootServices.
Alternativement, sur les systèmes non-AMD64, winload.efi antérieur à TH2 peut être utilisé avec l'élément testsigning; cela permet d'exécuter des binaires auto-signés dont le certificat contient l'EKU szOID_NT5_CRYPTO.
Sur les systèmes ARMv7, il sera nécessaire de charger un hal.dll auto-signé modifié avec un import vers mcupdate.dll pour obtenir l'exécution de code.
Sur les systèmes x86 et AMD64, le fichier chargé en tant que mcupdate.dll doit être nommé mcupdate_*.dll, où * est la chaîne de fabricant CPUID (GenuineIntel, AuthenticAMD, etc.).
Sur les systèmes ARM64, cette technique ne peut pas être utilisée car la première build de production signée disponible est un WinPE de RS2; par conséquent, seule une exécution de code filaire peut actuellement être effectuée (via bootdebug).
Ce dépôt contient les fichiers suivants:
mcupdate.dll s'exécute à une adresse virtuelle avec la pagination activée, il est impossible d'appeler directement les fonctions EFI (la pagination doit être désactivée pour appeler les fonctions EFI; revenir à une adresse virtuelle avec la pagination désactivée ne mène à rien de bon).BlImgLoadPEImageEx ou BlImgLoadPEImageFromSourceBuffer avec le bit 0 défini dans les drapeaux afin de charger une charge utile supplémentaire selon un mappage adresse physique-adresse virtuelle 1:1.
BlImgAllocateImageBuffer avec le même bit défini pour allouer de la mémoire selon un mappage adresse physique-adresse virtuelle 1:1; puis charger elle-même une charge utile (ou s'y remapper).bootmgfw de Windows 8 RTM et le hvloader de TH1 RTM.
hvloader obtenue par décalage, puis boucle indéfiniment.bootmgr de RS1 et le de TH1 RTM.Ce problème peut être utilisé pour extraire les clés BitLocker (lorsque Secure Boot est utilisé pour la validation d'intégrité).
Le correctif de ce problème a également corrigé un autre problème qui n'a pas de CVE.
bootmgr ignore toute table de clés BitLocker déjà présente en mémoire et en alloue une nouvelle, sans effacer l'ancienne.
bootmgr RS2+ depuis bootmgr (en spécifiant un osdevice arbitraire où Secure Boot est utilisé pour la validation d'intégrité), démarrer sur WinPE, charger un pilote vulnérable connu, et l'utiliser pour rechercher et extraire la table de clés BitLocker existante en mémoire physique.Aucune application de démarrage vulnérable connue n'a encore été révoquée.
bootmgr vérifie sa propre signature.Une révocation incomplète a eu lieu, et un autre CVE (CVE-2023-24932). Il existe encore des bootmgfw vulnérables qui n'ont pas été révoqués, ainsi que des correctifs supplémentaires qui ne corrigent que le cas où bootmgr charge bootmgr. Il a suffi d'un bootkit copié-collé pour faire réagir Microsoft ;)
Si vous êtes assez créatif, vous trouverez un moyen de contourner la révocation de plus de 2000 fichiers bootmgfw ;)
hvloaderbootmgr version 19041.1081 et le hvloader de TH1 RTM.