Se eliminó una vulnerabilidad remota en la capa Shim que permitía eludir el arranque seguro UEFI

Se ha encontrado una vulnerabilidad (CVE-2023-40547) en la capa Shim, utilizada en la mayoría de las distribuciones de Linux para la carga verificada en modo UEFI Secure Boot, que puede llevar a la ejecución remota de código y a eludir el mecanismo de carga verificada UEFI Secure Boot. Un atacante que controle el servidor HTTP al que accede Shim puede devolver una respuesta especialmente diseñada, lo que podría resultar en una escritura controlada fuera del límite del búfer para ejecutar código en una etapa temprana de la carga.

La vulnerabilidad es causada por un error en el código de carga de archivos por HTTP, que se manifiesta al procesar respuestas incorrectas devueltas por el servidor HTTP al que accede Shim. El modo HTTPBoot en Shim se ha soportado desde 2016 y permite organizar la carga por red, utilizando el protocolo HTTP para extraer un archivo con el cargador que se invocará en la siguiente etapa. Al cargar archivos a través de HTTP, Shim asigna un búfer para los datos recibidos, considerando no el tamaño real de los datos, sino el tamaño indicado en el encabezado HTTP 'Content-Length'. Por lo tanto, al devolver un valor menor en el encabezado Content-Length, se puede provocar una escritura de la cola de la solicitud en la memoria fuera del búfer.

Shim está firmado digitalmente por Microsoft y verifica GRUB2 con su propio certificado, lo que permite a los desarrolladores de distribuciones no tener que firmar cada actualización del núcleo y de GRUB en Microsoft. La vulnerabilidad en Shim permite interferir en la cadena de confianza durante el modo Secure Boot activo y obtener un control total sobre el proceso de carga posterior, por ejemplo, para cargar otro sistema operativo, modificar componentes del sistema operativo y eludir la protección Lockdown.

La vulnerabilidad se ha corregido en la versión de Shim 15.8, pero para bloquear completamente el ataque a través de Shim es necesario certificar la nueva versión en Microsoft e implementar esta en las distribuciones. El estado de la corrección de la vulnerabilidad en las distribuciones se puede evaluar en las siguientes páginas: Debian, Ubuntu, SUSE, RHEL, Fedora. El problema es que sin la revocación de la firma de la versión antigua, la corrección es inútil, ya que un atacante podría utilizar un medio de arranque con la versión vulnerable de Shim para comprometer UEFI Secure Boot. Pero la revocación de la firma provocará la imposibilidad de cargar las distribuciones de manera verificada que sigan utilizando la versión antigua de Shim.

Para bloquear la vulnerabilidad sin revocar la firma digital, las distribuciones pueden utilizar el mecanismo SBAT (UEFI Secure Boot Advanced Targeting), cuyo soporte se ha implementado para GRUB2, shim y fwupd en la mayoría de las distribuciones populares de Linux. SBAT ha sido desarrollado en conjunto con Microsoft e implica la adición de metadatos adicionales a los archivos ejecutables de componentes UEFI, que incluyen información sobre el fabricante, el producto, el componente y la versión. Estos metadatos están firmados digitalmente y pueden incluirse por separado en listas de componentes permitidos o prohibidos para UEFI Secure Boot.

SBAT permite bloquear el uso de firmas digitales para números de versión individuales de componentes sin necesidad de revocar claves para Secure Boot. El bloqueo de vulnerabilidades a través de SBAT no requiere utilizar la lista de certificados revocados de UEFI (dbx), y se lleva a cabo a nivel de reemplazo de la clave interna para la generación de firmas y la actualización de GRUB2, shim y otros artefactos de arranque proporcionados por las distribuciones.

Además de la vulnerabilidad discutida, en Shim 15.8 se han corregido varios problemas menos graves explotados localmente:

  • CVE-2023-40548 — desbordamiento de enteros en la función verify_sbat_section, lo que conduce a un desbordamiento de búfer en sistemas de 32 bits.
  • CVE-2023-40546 — lectura de un área de memoria fuera del búfer al mostrar mensajes de error a través de la función LogError().
  • CVE-2023-40549 — lectura de un área de memoria fuera del búfer al procesar un archivo en formato PE diseñado específicamente en la función verify_buffer_authenticode().
  • CVE-2023-40550 — lectura de un área de memoria fuera del búfer en la función verify_buffer_sbat().
  • CVE-2023-40551 — lectura de un área de memoria fuera del búfer al analizar archivos en formato MZ.

Fuente: opennet.ru

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster