Se dio a conocer información sobre una vulnerabilidad detectada en el kernel de Linux en la implementación del sistema de archivos OverlayFS (catalogada bajo CVE-2023-0386).
El fallo se puede usar para obtener acceso de root en sistemas que tienen instalado el subsistema FUSE y permiten el montaje de particiones OverlayFS por parte de un usuario sin privilegios (comenzando con el kernel de Linux 5.11 con la inclusión de un espacio de nombres de usuario sin privilegios).
El ataque se realiza copiando archivos con banderas setgid/setuid desde una partición montada en modo nosuid a una partición OverlayFS que tiene una capa asociada con la partición que permite la ejecución de archivos suid.
Se encontró una falla en el kernel de Linux, donde se encontró acceso no autorizado a la ejecución del archivo setuid con capacidades en el subsistema OverlayFS del kernel de Linux en la forma en que un usuario copia un archivo capaz de un montaje nosuid a otro montaje. Este error de asignación de uid permite que un usuario local aumente sus privilegios en el sistema.
La vulnerabilidad es similar al problema CVE-2021-3847 identificado en 2021, pero difiere en requisitos de explotación más bajos: el problema anterior requería la manipulación de xattrs, que se limita al uso de espacios de nombres de usuario (espacio de nombres de usuario), y el nuevo problema usa bits setgid /setuid que no se manejan específicamente en el espacio de nombres de usuario.
Un atacante con un usuario con privilegios bajos en una máquina Linux con un montaje superpuesto que tiene una capacidad de archivo en una de sus capas puede escalar sus privilegios hasta la raíz al copiar un archivo compatible de un montaje nosuid a otro montaje. Esta vulnerabilidad es similar a CVE-2021-3847 , pero requiere menos permisos para ejecutarse, por lo que tiene mayor prioridad.
Algoritmo de ataque:
- Con la ayuda del subsistema FUSE, se monta un sistema de archivos, en el que hay un archivo ejecutable propiedad del usuario raíz con los indicadores setuid / setgid, disponible para que todos los usuarios lo escriban. Al montar, FUSE establece el modo en «nosuid».
- Dejar de compartir espacios de nombres de usuario y puntos de montaje (espacio de nombres de usuario/montaje).
- OverlayFS se monta con el FS creado previamente en FUSE como la capa inferior y la capa superior en función del directorio de escritura. El directorio de la capa superior debe estar ubicado en un sistema de archivos que no use el indicador «nosuid» cuando se monte.
- Para un archivo suid en la partición FUSE, la utilidad táctil cambia el tiempo de modificación, lo que lleva a su copia a la capa superior de OverlayFS.
- Al copiar, el kernel no elimina los indicadores de setgid/setuid, lo que hace que el archivo aparezca en una partición que puede ser procesada por setgid/setuid.
- Para obtener derechos de root, basta con ejecutar el archivo con las banderas setgid/setuid desde el directorio adjunto a la capa superior de OverlayFS.
Sobre la solución de la vulnerabilidad, cabe mencionar que esta se solucionó en la rama del kernel 6.2. Si quieres conocer más al respecto sobre la publicación de actualizaciones de paquetes en distribuciones, se puede ver en las páginas: Debian, Ubuntu, Gentoo, RHEL, SUSE, Fedora, Arch .
Además, podemos señalar la divulgación de información por parte de los investigadores del equipo de Google Project Zero sobre tres vulnerabilidades que se repararon en la rama principal del kernel de Linux 5.15, pero que no se transfirieron a los paquetes del kernel de RHEL 8.x/9.x y Corriente de CentOS 9.
- CVE-2023-1252: Acceso a un área de memoria ya liberada en la estructura ovl_aio_req mientras se realizan varias operaciones al mismo tiempo en OverlayFS implementado sobre el sistema de archivos Ext4. Potencialmente, la vulnerabilidad le permite aumentar sus privilegios en el sistema.
- CVE-2023-0590: Hace referencia a un área de memoria ya liberada en la función qdisc_graft(). Se supone que la operación está limitada a abortar.
- CVE-2023-1249: acceso al área de memoria ya liberada en el código de entrada de volcado debido a una llamada mmap_lock perdida en file_files_note. Se supone que la operación está limitada a abortar.
Fuente: desdelinux