
baton drop (CVE-2022-21894): Vulnerabilidad de omisión de la función de seguridad de Arranque Seguro
Las aplicaciones de arranque de Windows permiten que la configuración truncatememory elimine bloques de memoria que contienen rangos "persistentes" de datos serializados del mapa de memoria, lo que provoca una omisión de Secure Boot.
truncatememory eliminará toda la memoria por encima de una dirección física especificada del mapa de memoria.bootdebug, testsigning, nointegritychecks), rompiendo así Secure Boot.Este problema se solucionó con dos cambios diferentes:
bootmgr, la inicialización de la aplicación de arranque falla.VERSIONINFO que contiene un OriginalFilename, si ese nombre de archivo está incluido en una lista de bloqueo (que contiene bootmgr.exe y hvloader.exe; en Nickel, se agregó hvloader.efi pero esto no se retroportó), la carga falla.
hvloader.exe no está incluido en la lista de bloqueo de winload; originalmente lo estaba, ¡lo que rompió la carga de Hyper-V!flightedbootmgr para cargar bootmgr desde el disco), el OriginalFilename debe ser bootmgr.exe.El atacante necesita asegurarse de que la Política de Secure Boot serializada esté asignada por encima de una dirección física conocida.
osdevice de la entrada BCD es una partición cifrada con BitLocker donde el VMK se derivó usando el TPM.
El elemento avoidlowmemory se puede usar para garantizar que todas las asignaciones de memoria física estén por encima de una dirección física especificada:
bootmgr y especificar una ruta BCD personalizada (usando el elemento bcdfilepath aka custom:22000023) se puede usar para evitar esto.bootmgr de Windows 8.x para deshabilitar VBS y luego volver al cargador de arranque original.
bootmgr de Windows 8.x no podrá desellar el VMK en un sistema Windows 10+.hvloader.efi se puede cargar con el elemento nointegritychecks para cargar un mcupdate.dll auto-firmado, cuyo punto de entrada se llamará antes de ExitBootServices.
Alternativamente, en sistemas que no son AMD64, winload.efi anterior a TH2 se puede usar con el elemento testsigning; esto permite binarios auto-firmados con el EKU szOID_NT5_CRYPTO en el certificado.
En sistemas ARMv7, cargar un hal.dll auto-firmado parcheado con una importación a mcupdate.dll será necesario para obtener ejecución de código.
En sistemas x86 y AMD64, el archivo cargado como mcupdate.dll debe llamarse mcupdate_*.dll, donde * es la cadena del fabricante de CPUID (GenuineIntel, AuthenticAMD, etc.).
En sistemas ARM64, esta técnica no se puede usar debido a que la compilación de producción firmada más antigua disponible es un WinPE de RS2; por lo tanto, actualmente solo se puede realizar ejecución de código con cable (usando bootdebug).
Este repositorio incluye los siguientes archivos:
mcupdate.dll se ejecuta en una dirección virtual con paginación habilitada, es imposible llamar a funciones EFI directamente (es necesario deshabilitar la paginación para llamar a funciones EFI, regresar a una dirección virtual con paginación desactivada no lleva a un buen lugar).BlImgLoadPEImageEx o BlImgLoadPEImageFromSourceBuffer con el bit 0 establecido en las banderas para cargar un payload adicional en una asignación 1:1 de dirección física-dirección virtual.
BlImgAllocateImageBuffer con el mismo bit establecido para asignar memoria en una asignación 1:1 de dirección física-dirección virtual; luego cargar un payload por sí mismo (o reasignarse allí).bootmgfw de Windows 8 RTM y el hvloader de TH1 RTM.
hvloader obtenida por desplazamiento y luego bucle infinito.bootmgr de RS1 y el hvloader de TH1 RTM.Este problema se puede usar para volcar claves de BitLocker (donde se usa Secure Boot para la validación de integridad).
La corrección de este problema también solucionó otro problema que no tiene CVE.
bootmgr ignora cualquier tabla de claves de BitLocker ya presente en la memoria y asigna una nueva, sin borrar la antigua.
bootmgr de RS2+ desde bootmgr (especificando un osdevice arbitrario donde se usa Secure Boot para la validación de integridad), arrancar a WinPE, cargar un controlador vulnerable conocido y usarlo para buscar y volcar la tabla de claves de BitLocker existente en la memoria física.Ninguna aplicación de arranque vulnerable conocida ha sido revocada todavía.
bootmgr verifica su propia firma.Ocurrió una revocación incompleta, y otro CVE (CVE-2023-24932). Todavía hay bootmgfws vulnerables que no fueron revocados, así como parches adicionales que solo solucionan el caso donde bootmgr carga bootmgr. Solo se necesitó un bootkit pegado para que MS actuara ;)
Si eres lo suficientemente creativo, encontrarás una forma de sortear la revocación de más de 2000 archivos bootmgfw ;)
bootmgr versión 19041.1081 y el hvloader de TH1 RTM.