Nueva vulnerabilidad descubierta en Linux



Hace pocos días se dio a conocer la noticia de que fue detectada una vulnerabilidad (ya catalogada bajo CVE-2023-4273) en el controlador para el sistema de archivos exFAT suministrado en el kernel de Linux.


El problema radica en que el controlador permite al montar una partición especialmente diseñada, (por ejemplo, al conectar un USB Flash malicioso), lograr un desbordamiento de pila y ejecute su código con derechos del kernel.


Sobre la vulnerabilidad se menciona que, esta es aprovechada debido a un fallo en la verificación del tamaño al copiar un nombre de archivo a un búfer asignado en la pila da como resultado un desbordamiento de la pila del kernel si se proporciona un nombre de archivo muy largo que excede el límite del sistema de archivos de 255 caracteres.

 


La vulnerabilidad está presente en una función que realiza la reconstrucción de nombres largos leyendo cíclicamente registros con partes del nombre del archivo del índice del directorio y fusionando las partes resultantes del nombre en el nombre largo final.

La verificación de tamaño en el código dicha funcion se realizó en relación con cada entrada con una parte del nombre, pero no cubrió el nombre final (por ejemplo, el nombre se puede dividir en 100 partes y alcanzar 1500 caracteres en lugar de 258 caracteres en el buffer).

El investigador que descubrió la vulnerabilidad pudo preparar un prototipo de exploit que permite aumentar sus privilegios en el sistema. Cuando se prueba en una máquina virtual VirtualBox, el exploit funciona el 100% del tiempo, pero cuando se ejecuta en un entorno normal que se ejecuta sobre el hardware, la posibilidad de que se active se reduce a aproximadamente el 50%


Tambien se menciona que la vulnerabilidad podría usarse para comprometer los núcleos arrancados en modo UEFI Secure Boot, ya que se menciona que una imagen que contiene un kernel vulnerable, con un script de inicio correspondiente (y el exploit, por supuesto), que se inicia antes que un sistema operativo real, se coloca en una unidad de arranque. Cuando se inicia, esta imagen carga un módulo de kernel malicioso (y sin firmar), que establece su control sobre el modo de kernel y luego cambia al sistema operativo real (por ejemplo, usando la llamada kexec).

Finalmente cabe mencionar que el problema se solucionó en las versiones de Linux que aún tienen soporte. Al momento de la divulgación de la vulnerabilidad la versión del Kernel de Linux más actual era la versión de Linux 6.4.10, pero la nueva versión 6.5 ya cuenta con la corrección.

Para los interesados en realizar un seguimiento de la solución en las diferentes distribuciones, pueden hacerlo desde los siguientes enlaces DebianUbuntuRHELSUSE Fedora.

Comentarios