Qualys ha identificado una vulnerabilidad (CVE-2025-6019) en la biblioteca libblockdev que permite obtener privilegios de root manipulando el proceso en segundo plano udisks. Se demostró un prototipo de exploit en Ubuntu, Debian, Fedora y openSUSE Leap 15.
El proceso udisks se utiliza en casi todas las distribuciones. Linux y proporciona una interfaz D-Bus para realizar operaciones de almacenamiento, como el montaje y el formateo. Para realizar estas operaciones, udisks llama a las funciones de la biblioteca libblockdev. Por defecto, el acceso a udisks solo está disponible para los usuarios que se ejecutan en el contexto "allow_active", 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 de forma remota, por ejemplo, mediante SSH, no pertenecen a 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 privilegios "allow_active" consiste en explotar una vulnerabilidad (CVE-2025-6018) en PAM (Módulos de Autenticación Conectables), que los investigadores de Qualys descubrieron durante su análisis de una vulnerabilidad en libblockdev. Esta vulnerabilidad permite a cualquier usuario, incluidos aquellos conectados mediante 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 aparece en estas distribuciones.
El módulo pam_env de openSUSE y SUSE está habilitado por defecto para leer el archivo ~/.pam_environment. Este archivo permite al usuario configurar las variables de entorno XDG_SEAT=seat0 y XDG_VTNR=1, que se interpretarán como prueba de su presencia física, incluso si la conexión se realiza mediante SSH. El módulo pam_env también se ejecuta al conectarse por SSH. Debian 12 y Ubuntu 24.04 (v Debian 13 y Ubuntu 24.10+ está deshabilitado), pero la configuración de variables de entorno en estas distribuciones no se puede utilizar para aumentar el nivel de acceso a "allow_active", ya que pam_env se llama en la etapa final después de cargar el módulo pam_systemd y las variables de entorno configuradas 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 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 parcheado hasta el momento. Puede consultar el estado de una nueva versión del paquete o el proceso de preparación del parche para sus distribuciones en las siguientes páginas (si una página no está disponible, los desarrolladores de la distribución aún no han comenzado a investigar el problema): Debian, Ubuntu, Fedora, SUSE/openSUSE, RHEL, Gentoo y Arch (1, 2). Como solución alternativa para bloquear la vulnerabilidad, puede modificar la regla de acceso para la operación "org.freedesktop.udisks2.modify-device" en polkit cambiando el parámetro "allow_active" de "yes" a "auth_admin" en el archivo /usr/share/polkit-1/actions/org.freedesktop.UDisks2.policy.
Además, hace unas horas se reveló una vulnerabilidad (CVE-2025-6020) en el paquete linux-pam, que permite a un usuario local obtener privilegios de administrador. El módulo pam_namespace no validaba correctamente las rutas de archivo controladas por el usuario, lo que permitía sobrescribir archivos con privilegios en el sistema mediante la manipulación de enlaces simbólicos y condiciones de carrera. La vulnerabilidad se corrigió en linux-pam 1.7.1. Puede consultar el estado de la nueva versión del paquete o el parche que se está preparando para las distribuciones en las siguientes páginas: Debian, Ubuntu, Fedora, SUSE/openSUSE, RHEL, Gentoo y Arch (1, 2).
Fuente: opennet.ru
