Vulnerabilidad VFS del kernel de Linux que permite la escalada de privilegios

Se identificó una vulnerabilidad (CVE-2022-0185) en la API de contexto del sistema de archivos proporcionada por el kernel de Linux que podría permitir que un usuario local obtenga privilegios de root en el sistema. El investigador que identificó el problema ha publicado una demostración de un exploit que permite ejecutar el código como root en Ubuntu 20.04 en la configuración predeterminada. Está previsto que el código de explotación se publique en GitHub dentro de una semana, después de que las distribuciones publiquen una actualización que solucione la vulnerabilidad.

La vulnerabilidad existe en la función legacy_parse_param() en VFS y se debe a la falta de una validación adecuada del tamaño máximo de los parámetros proporcionados en los sistemas de archivos que no son compatibles con la API de contexto del sistema de archivos. Si pasa un parámetro demasiado grande, puede provocar un desbordamiento de la variable entera utilizada para calcular el tamaño de los datos que se escriben; el código tiene una comprobación de desbordamiento de búfer "if (len > PAGE_SIZE - 2 - tamaño)", que no no funciona si el valor de tamaño es mayor que 4094 debido al desbordamiento de enteros a través del límite inferior (desbordamiento de enteros, cuando convierte 4096 - 2 - 4095 a int sin firmar, obtiene 2147483648).

Este error permite, al acceder a una imagen FS especialmente diseñada, provocar un desbordamiento del búfer y sobrescribir los datos del kernel que siguen al área de memoria asignada. Para explotar la vulnerabilidad, se requieren derechos CAP_SYS_ADMIN, es decir, autoridad del administrador. El problema es que un usuario sin privilegios puede obtener dichos permisos en un contenedor aislado si el soporte para espacios de nombres de usuario está habilitado en el sistema. Por ejemplo, los espacios de nombres de usuario están habilitados de manera predeterminada en Ubuntu y Fedora, pero no están habilitados en Debian y RHEL (a menos que se usen plataformas de aislamiento de contenedores).

El problema se ha estado manifestando desde el kernel de Linux 5.1 y se solucionó en las actualizaciones de ayer 5.16.2, 5.15.16, 5.10.93, 5.4.173. Ya se han publicado actualizaciones de paquetes de vulnerabilidades para RHEL, Debian, Fedora, Ubuntu. La solución aún no está disponible en Arch Linux, Gentoo, SUSE y openSUSE. Como una solución de seguridad para los sistemas que no utilizan el aislamiento de contenedores, puede establecer el valor de sysctl "user.max_user_namespaces" en 0: echo "user.max_user_namespaces=0" > /etc/sysctl.d/userns.conf # sysctl -p / etc/sysctl.d/userns.conf

Fuente: opennet.ru

Añadir un comentario