Se ha identificado una vulnerabilidad en el paquete Cryptsetup, utilizado para cifrar particiones de disco en Linux (CVE-2021-4122), que permite desactivar el cifrado en particiones del formato LUKS2 (Linux Unified Key Setup) mediante la modificación de metadatos. Para explotar esta vulnerabilidad, un atacante debe tener acceso físico al dispositivo cifrado, es decir, este método es principalmente relevante para ataques a dispositivos externos cifrados, como las unidades Flash, a las cuales el atacante tiene acceso pero no conoce la contraseña para descifrar los datos.
El ataque es aplicable solo al formato LUKS2 y se relaciona con la manipulación de metadatos responsables de activar la extensión 'reencriptación en línea', que permite iniciar el proceso de re-cifrado de datos sobre la marcha sin interrumpir el acceso a la partición al cambiar la clave de acceso. Dado que el proceso de descifrado y cifrado con una nueva clave lleva mucho tiempo, 'reencriptación en línea' ofrece la capacidad de no interrumpir el trabajo en la partición y realizar el re-cifrado en segundo plano, cambiando gradualmente los datos de una clave a otra. También existe la opción de seleccionar una clave de destino vacía, lo que permite convertir la partición a un estado descifrado.
Un atacante puede realizar cambios en los metadatos de LUKS2 que simulan una interrupción inesperada de la operación de descifrado debido a un fallo, logrando descifrar parte de la partición después de que el propietario active y utilice el dispositivo modificado. En este caso, el usuario que conecta el dispositivo modificado y lo desbloquea con la contraseña correcta no recibe ninguna advertencia sobre el proceso de recuperación de la operación de re-cifrado interrumpida y solo puede conocer el progreso de esta operación mediante el comando 'luks Dump'. La cantidad de datos que el atacante puede descifrar depende del tamaño del encabezado LUKS2, pero con el tamaño predeterminado (16 MiB) puede exceder los 3 GB.
El problema se debe a que, aunque la re-encriptación requiere el cálculo y verificación de los hashes de las claves nueva y antigua, no se requiere un hash para comenzar la desencriptación si el nuevo estado implica la ausencia de una clave de cifrado (texto plano). Además, los metadatos de LUKS2, que especifican el algoritmo de cifrado, no están protegidos contra modificaciones en caso de caer en manos de un atacante. Para bloquear esta vulnerabilidad, los desarrolladores agregaron protección adicional a los metadatos de LUKS2, que ahora verifica un hash adicional calculado en base a claves conocidas y el contenido de los metadatos, es decir, un atacante ya no puede alterar los metadatos sin conocer la contraseña de desencriptación.
El escenario de ataque típico requiere que el atacante tenga la oportunidad de obtener el dispositivo varias veces. Inicialmente, el atacante, que no conoce la contraseña de acceso, realiza modificaciones en el área de metadatos que inician la desencriptación de parte de los datos en la próxima activación del dispositivo. Luego, el dispositivo se devuelve a su lugar y el atacante espera a que el usuario lo conecte introduciendo la contraseña. Durante la activación del dispositivo por parte del usuario, se inicia un proceso en segundo plano de re-encriptación, durante el cual parte de los datos encriptados se reemplazan por datos desencriptados. Luego, si el atacante puede obtener el dispositivo nuevamente, parte de los datos en el dispositivo estará en forma desencriptada.
El problema fue identificado por el mantenedor del proyecto cryptsetup y solucionado en las actualizaciones de cryptsetup 2.4.3 y 2.3.7. El estado de la formación de actualizaciones con la solución del problema en las distribuciones se puede rastrear en las siguientes páginas: Debian, RHEL, SUSE, Fedora, Ubuntu, Arch. La vulnerabilidad se manifiesta solo a partir de la versión 2.2.0 de cryptsetup, que introdujo soporte para la operación de "re-encriptación en línea". Como solución alternativa, se puede usar el inicio con la opción "--disable-luks2-reencryption".
Fuente: opennet.ru
