Qualys ha identificado una vulnerabilidad (CVE-2025-6019) en la biblioteca libblockdev que permite obtener privilegios de root en el sistema mediante manipulaciones con el proceso en segundo plano udisks. El prototipo del exploit se ha demostrado en Ubuntu, Debian, Fedora y openSUSE Leap 15.
El proceso udisks se utiliza en casi todas las distribuciones de Linux y proporciona una interfaz D-Bus para realizar operaciones de almacenamiento como montaje y formateo. Para realizar acciones en los dispositivos de almacenamiento, udisks invoca las funciones de la biblioteca libblockdev. Por defecto, solo los usuarios que se ejecutan en el contexto "allow_active" pueden acceder a udisks; es decir, aquellos con acceso físico al equipo y conectados mediante una consola local o una sesión gráfica. Los usuarios que se conectan remotamente, por ejemplo, mediante SSH, no entran en este contexto y no pueden explotar directamente la vulnerabilidad.
Para evitar esta limitación, puede usar un truco que permite elevar el nivel de autenticación a "allow_active" manipulando el inicio del servicio de usuario mediante la utilidad systemctl, lo cual polkitd percibirá como una señal de una sesión local. La esencia del método reside en que polkitd determina la presencia de acceso físico y asigna el nivel "allow_active" basándose en señales indirectas que pueden ser influenciadas. La limitación del método radica en que, para engañar a polkitd, es necesario que una sesión de usuario local con acceso físico ya esté activa en el sistema.
El segundo método para obtener permisos "allow_active" consiste en explotar una vulnerabilidad (CVE-2025-6018) en PAM (Módulos de Autenticación Conectables), que los investigadores de Qualys descubrieron al analizar una vulnerabilidad en libblockdev. Esta vulnerabilidad permite a cualquier usuario, incluso conectado por SSH, realizar operaciones en el contexto "allow_active". El problema es específico de la configuración de PAM en openSUSE Leap 15 y SUSE Linux Enterprise 15, y solo se manifiesta en estas distribuciones.
El módulo pam_env en openSUSE y SUSE tiene habilitada por defecto la lectura del archivo ~/.pam_environment. Mediante este archivo, el usuario puede configurar las variables de entorno XDG_SEAT=seat0 y XDG_VTNR=1, lo que se interpretará como una señal de la presencia física del usuario durante el procesamiento posterior, incluso si el inicio de sesión se realizó mediante SSH. El módulo pam_env también se llama al conectarse por SSH en Debian 12 y Ubuntu 24.04 (está deshabilitado en Debian 13 y Ubuntu 24.10+), pero la configuración de variables de entorno en estas distribuciones no permite aumentar el nivel de acceso a "allow_active", ya que pam_env se llama en la etapa final, tras cargar el módulo pam_systemd, y las variables de entorno configuradas no pueden afectar a 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 bucle, colocando un archivo ejecutable con el indicador SUID raíz o un dispositivo especial (/dev/mem) para acceso de bajo nivel a discos o memoria en esta imagen. Para bloquear estos ataques, el sistema monta las imágenes del sistema de archivos con los indicadores nosuid y nodev, pero la vulnerabilidad en libblockdev permite montar una imagen sin estos indicadores. La esencia de la vulnerabilidad radica en que udisks permite a un usuario con el nivel de acceso "allow_active" cambiar el tamaño de sus sistemas de archivos, y libblockdev monta temporalmente el sistema de archivos sin configurar los indicadores nosuid y nodev durante esta operación.
Por lo tanto, el ataque se reduce a crear un dispositivo de bucle basado en una imagen del sistema de archivos XFS que contiene un archivo raíz suid, iniciar una operación para cambiar el tamaño del dispositivo de bucle y monitorear el momento en que se monta en el directorio /tmp/blockdev*: victim> killall -KILL gvfs-udisks2-volume-monitor victim> udisksctl loop-setup —file ./xfs.image —no-user-interaction Mapped file ./xfs.image as /dev/loop0. victim> while true; do /tmp/blockdev*/bash -c 'sleep 10; ls -l /tmp/blockdev*/bash' && break; hecho 2>/dev/null & victim> 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 redimensionar el sistema de archivos en /dev/loop0: Error al desmontar '/dev/loop0' después de redimensionarlo: el destino está ocupado -r-sr-xr-x. 1 raíz raíz 1406608 18 jun 09:42 /tmp/blockdev.RSM429/bash víctima> /tmp/blockdev*/bash -p víctima# id uid=65534(nadie) gid=65534(nadie) euid=0(raíz) grupos=65534(nadie)
La vulnerabilidad en libblockdev solo se ha corregido hasta el momento. Puede consultar el estado de una nueva versión del paquete o la preparación de una corrección en las distribuciones en las siguientes páginas (si la página no está disponible, significa que los desarrolladores de las distribuciones aún no han comenzado a considerar el problema): Debian, Ubuntu, Fedora, SUSE/openSUSE, RHEL, Gentoo y Arch (1, 2). Como solución alternativa para bloquear la vulnerabilidad, puede cambiar la regla de acceso para la operación "org.freedesktop.udisks2.modify-device" en polkit modificando el valor del parámetro "allow_active" de "yes" a "auth_admin" en el archivo /usr/share/polkit-1/actions/org.freedesktop.UDisks2.policy.
Además, una vulnerabilidad (CVE-2025-6020) en el paquete linux-pam, divulgada hace unas horas, permite a un usuario local obtener privilegios de root. El módulo pam_namespace no verificaba correctamente las rutas de archivo controladas por el usuario, lo que permitía sobrescribir archivos privilegiados del sistema mediante la manipulación de enlaces simbólicos, lo que generaba una condición de carrera. La vulnerabilidad se corrigió en la versión linux-pam 1.7.1. Puede consultar el estado de una nueva versión del paquete o la preparación de una corrección en las siguientes distribuciones: Debian, Ubuntu, Fedora, SUSE/openSUSE, RHEL, Gentoo y Arch (1, 2).
Fuente: opennet.ru