La empresa Qualys ha descubierto una vulnerabilidad (CVE-2025-6019) en la biblioteca libblockdev, que permite obtener derechos de root en el sistema a través de manipulaciones con el proceso en segundo plano udisks. Un prototipo de exploit ha sido demostrado en Ubuntu, Debian, Fedora y openSUSE Leap 15.
El proceso udisks se utiliza prácticamente en todas las distribuciones de Linux y proporciona una interfaz D-Bus para realizar operaciones con dispositivos de almacenamiento, como montar y formatear. Para realizar acciones con dispositivos de almacenamiento, udisks llama a las funciones de la biblioteca libblockdev. El acceso a udisks por defecto solo está abierto para usuarios que operan en el contexto de 'allow_active', es decir, que tienen acceso físico a la computadora y que se han conectado a través de la consola local o han iniciado una sesión gráfica. Los usuarios que se conectan de forma remota, por ejemplo, a través de ssh, no entran en este contexto y no pueden explotar la vulnerabilidad directamente.
Para eludir esta restricción, se puede utilizar un truco que eleva el nivel de autenticación a 'allow_active' a través de manipulaciones con el inicio de un servicio de usuario utilizando la herramienta systemctl, que polkitd interpretará como un signo de sesión local. La clave del método es que polkitd determina la existencia de acceso físico y asigna el nivel 'allow_active' en función de signos indirectos que pueden ser manipulados. La limitación del método es que para engañar a polkitd, ya debe existir en el sistema una sesión activa de un usuario local con acceso físico.
El segundo método para obtener derechos de 'allow_active' es la explotación de una vulnerabilidad (CVE-2025-6018) en PAM (Módulos de Autenticación Enchufables), que los investigadores de Qualys descubrieron durante el análisis de la vulnerabilidad en libblockdev. La vulnerabilidad permite a cualquier usuario, incluso a aquellos que se conectan por SSH, realizar operaciones en el contexto de 'allow_active'. Este problema es específico de la configuración de PAM en openSUSE Leap 15 y SUSE Linux Enterprise 15, y se manifiesta únicamente en estas distribuciones.
En el módulo pam_env de openSUSE y SUSE, la lectura del archivo ~/.pam_environment está habilitada de forma predeterminada. A través de este archivo, el usuario puede establecer las variables de entorno XDG_SEAT=seat0 y XDG_VTNR=1, las cuales serán interpretadas en el procesamiento subsiguiente como un signo de presencia física del usuario, incluso si el acceso se ha realizado a través de SSH. El módulo pam_env también se activa al conectarse por ssh en Debian 12 y Ubuntu 24.04 (en Debian 13 y Ubuntu 24.10+ está desactivado), pero establecer variables de entorno en estas distribuciones no puede utilizarse para elevar el acceso a 'allow_active', ya que pam_env se invoca en la etapa final después de cargar el módulo pam_systemd y las variables de entorno establecidas no pueden afectar los parámetros de la sesión.
En cuanto a la vulnerabilidad en libblockdev, un atacante puede montar una imagen de un sistema de archivos arbitrario en modo loop, colocando en esta imagen un archivo ejecutable con el flag SUID root o un dispositivo especial (/dev/mem) para acceso de bajo nivel a discos o memoria. Para bloquear tales ataques, las imágenes de FS son montadas por el sistema con los flags nosuid y nodev, pero la vulnerabilidad en libblockdev permite montar la imagen sin los flags nosuid y nodev. La esencia de la vulnerabilidad es que udisks permite a un usuario con nivel de acceso 'allow_active' cambiar el tamaño de sus sistemas de archivos y libblockdev temporalmente monta el FS sin establecer los flags nosuid y nodev durante esta operación.
Así, el ataque se reduce a la creación de un dispositivo loop basado en la imagen de FS XFS, en la cual se coloca un archivo suid root, iniciar la operación de cambio de tamaño del dispositivo loop y rastrear el momento en que se monta en el directorio /tmp/blockdev*: víctima> killall -KILL gvfs-udisks2-volume-monitor víctima> udisksctl loop-setup —file ./xfs.image —no-user-interaction Archivo mapeado ./xfs.image como /dev/loop0. víctima> mientras true; hacer /tmp/blockdev*/bash -c ‘sleep 10; ls -l /tmp/blockdev*/bash’ && romper; hecho 2>/dev/null & víctima> gdbus call —system —dest org.freedesktop.UDisks2 —object-path /org/freedesktop/UDisks2/block_devices/loop0 —method org.freedesktop.UDisks2.Filesystem.Resize 0 ‘{}’ Error: GDBus.Error:org.freedesktop.UDisks2.Error.Failed: Error al cambiar el tamaño del sistema de archivos en /dev/loop0: No se pudo desmontar ‘/dev/loop0’ después de cambiar su tamaño: el objetivo está ocupado -r-sr-xr-x. 1 root root 1406608 Jun 18 09:42 /tmp/blockdev.RSM429/bash víctima> /tmp/blockdev*/bash -p víctima# id uid=65534(nobody) gid=65534(nobody) euid=0(root) groups=65534(nobody)
La vulnerabilidad en libblockdev se ha solucionado hasta ahora solo en forma de parches. Para verificar el estado de la nueva versión del paquete o la preparación de una corrección en las distribuciones, se puede consultar las siguientes páginas (si la página no está disponible, significa que los desarrolladores de la distribución aún no han comenzado a abordar el problema): Debian, Ubuntu, Fedora, SUSE/openSUSE, RHEL, Gentoo y Arch (1, 2). Como solución alternativa para bloquear la vulnerabilidad, se puede cambiar la regla de acceso a la operación «org.freedesktop.udisks2.modify-device» en polkit, modificando en el archivo /usr/share/polkit-1/actions/org.freedesktop.UDisks2.policy el valor del parámetro «allow_active» de «yes» a «auth_admin».
Adicionalmente, se ha revelado hace unas horas una vulnerabilidad (CVE-2025-6020) en el paquete linux-pam, que permite a un usuario local obtener privilegios de root. El módulo pam_namespace no verificaba adecuadamente las rutas de archivos controladas por el usuario, lo que permitía, mediante manipulaciones con enlaces simbólicos y alcanzando un estado de carrera, sobrescribir archivos privilegiados en el sistema. La vulnerabilidad ha sido corregida en la versión linux-pam 1.7.1. Para verificar el estado de la nueva versión del paquete o la preparación de una corrección en las distribuciones, se puede consultar las siguientes páginas: Debian, Ubuntu, Fedora, SUSE/openSUSE, RHEL, Gentoo y Arch (1, 2).
Fuente: opennet.ru
