
CVE-2025-6019: Escalada de Privilegios TOCTOU en Redimensionamiento de XFS de udisks2
CVE-2025-6019: Escalada de Privilegios TOCTOU en udisks2 por Redimensionamiento de XFS Este repositorio contiene una Prueba de Concepto (PoC) para CVE-2025-6019, una vulnerabilidad de Condición de Carrera en udisks2 que permite la escalada local de privilegios mediante el redimensionamiento del sistema de archivos XFS.
Este exploit está diseñado para ser universal en cualquier sistema Linux que cumpla los siguientes criterios:
Servicio Vulnerable: udisks2 (con acceso D-Bus habilitado).
Herramienta de sistema de archivos: xfsprogs instalado (específicamente mkfs.xfs).
Arquitectura: Agnóstica (Funciona en x86, x64, ARM, etc.).
El exploit se ha verificado en la siguiente configuración:
weapon.py maneja automáticamente la configuración de la variable de entorno PATH para localizar mkfs.xfs, que normalmente está restringido a sbin.La explotación requiere una imagen XFS especialmente diseñada creada con un Protofile. Esto permite definir una estructura de sistema de archivos que incluye un binario SUID root (pwnbash) sin necesidad de privilegios de root durante la fase de creación de la imagen. La bandera mkfs.xfs -p utiliza esta plantilla para incorporar el bit SUID directamente en los metadatos de la imagen.
Los usuarios estándar en sesiones remotas (SSH, Docker) tienen restringido el uso de udisks2. Ejecuta este script para suplantar una sesión local (seat0):
python3 bypass.py
Genera la imagen SUID usando weapon.py. Este script utiliza el protofile XFS para incrustar un shell con permisos 4755. python3 weapon.py
Ejecuta trigger.sh para comenzar a inundar udisks2 con solicitudes de redimensionamiento D-Bus. Esto fuerza al demonio a crear puntos de montaje temporales en /tmp/blockdev.XXXXXX. chmod +x trigger.sh ./trigger.sh
Dado que los scripts automatizados pueden ser inestables en entornos con recursos limitados, se recomienda el método manual: Monitorear /tmp en busca de puntos de montaje temporales: watch -n 0.1 "ls -la /tmp" Identificar el Objetivo: Busca un directorio con permisos de lectura mundial (por ejemplo, drwxr-xr-x) en lugar del valor predeterminado endurecido drwx------.
Ejecutar el Payload: Una vez identificado, navega al directorio y ejecuta el shell:
cd /tmp/blockdev.Q797J3 # Nombre de directorio de ejemplo ./pwnbash -p Resultado: Si la ejecución ocurre dentro de la ventana de carrera (antes de que se aplique la bandera nosuid), se te otorgará un shell de root.
bypass.py: Script de configuración para suplantar una sesión local (seat0) y eludir las restricciones de Polkit mediante ~/.pam_environment.
weapon.py: Generador de imágenes SUID usando la plantilla del Protofile XFS.
trigger.sh: Disparador de condición de carrera D-Bus para el redimensionamiento del sistema de archivos udisks2.
Para un desglose detallado: 👉 NetaCoding - https://netacoding.com/posts/udisks2-cve_lpe/
Este proyecto es solo para fines educativos y de pruebas de seguridad autorizadas. El acceso no autorizado a sistemas informáticos es ilegal.