Una vulnerabilidad en cryptsetup que permite desactivar el cifrado en particiones LUKS2

Se ha identificado una vulnerabilidad (CVE-2021-4122) en el paquete Cryptsetup, utilizado para cifrar particiones de disco en Linux, que permite desactivar el cifrado en particiones en formato LUKS2 (Linux Unified Key Setup) modificando los metadatos. Para explotar la vulnerabilidad, el atacante debe tener acceso físico a los medios cifrados, es decir. El método tiene sentido principalmente para atacar dispositivos de almacenamiento externos cifrados, como unidades flash, a los que el atacante tiene acceso pero no conoce la contraseña para descifrar los datos.

El ataque es aplicable únicamente al formato LUKS2 y está asociado a la manipulación de metadatos responsables de activar la extensión “online reencryption”, que permite, si es necesario cambiar la clave de acceso, iniciar el proceso de reencriptación de datos sobre la marcha. sin dejar de trabajar con la partición. Dado que el proceso de descifrado y cifrado con una nueva clave lleva mucho tiempo, el "nuevo cifrado en línea" permite no interrumpir el trabajo con la partición y realizar el nuevo cifrado en segundo plano, volviendo a cifrar gradualmente los datos de una clave a otra. . También es posible seleccionar una clave de destino vacía, lo que le permite convertir la sección a un formato descifrado.

Un atacante puede realizar cambios en los metadatos de LUKS2 que simulen una interrupción de la operación de descifrado como resultado de una falla y lograr el descifrado de parte de la partición después de la activación y el uso de la unidad modificada por parte del propietario. En este caso, el usuario que ha conectado la unidad modificada y la ha desbloqueado con la contraseña correcta no recibe ninguna advertencia sobre el proceso de restauración de la operación de reencriptación interrumpida y sólo puede conocer el progreso de esta operación utilizando el "luks Dump". dominio. La cantidad de datos que un atacante puede descifrar depende del tamaño del encabezado LUKS2, pero con el tamaño predeterminado (16 MiB) puede superar los 3 GB.

El problema se debe al hecho de que, aunque el nuevo cifrado requiere calcular y verificar los hashes de las claves nuevas y antiguas, no se requiere un hash para comenzar el descifrado si el nuevo estado implica la ausencia de una clave de texto sin formato para el cifrado. Además, los metadatos LUKS2, que especifican el algoritmo de cifrado, no están protegidos contra modificaciones si caen en manos de un atacante. Para bloquear la vulnerabilidad, los desarrolladores agregaron protección adicional para los metadatos a LUKS2, para lo cual ahora se verifica un hash adicional, calculado en base a claves conocidas y contenidos de metadatos, es decir. un atacante ya no puede cambiar subrepticiamente los metadatos sin conocer la contraseña de descifrado.

Un escenario de ataque típico requiere que el atacante pueda acceder al disco varias veces. En primer lugar, un atacante que no conoce la contraseña de acceso realiza cambios en el área de metadatos, lo que provoca el descifrado de parte de los datos la próxima vez que se activa la unidad. Luego, la unidad regresa a su lugar y el atacante espera hasta que el usuario la conecta ingresando una contraseña. Cuando el usuario activa el dispositivo, se inicia un proceso de nuevo cifrado en segundo plano, durante el cual parte de los datos cifrados se reemplazan con datos descifrados. Además, si el atacante logra volver a tener en sus manos el dispositivo, algunos de los datos del disco estarán descifrados.

El problema fue identificado por el mantenedor del proyecto cryptsetup y solucionado en las actualizaciones cryptsetup 2.4.3 y 2.3.7. El estado de las actualizaciones que se generan para solucionar el problema en las distribuciones se puede rastrear en estas páginas: Debian, RHEL, SUSE, Fedora, Ubuntu, Arch. La vulnerabilidad sólo aparece desde el lanzamiento de cryptsetup 2.2.0, que introdujo soporte para la operación de “nuevo cifrado en línea”. Como solución alternativa para la protección, se puede utilizar el inicio con la opción “--disable-luks2-reencryption”.

Fuente: opennet.ru

Añadir un comentario