
Exploit armado de escalada de privilegios local para CVE-2026-7867 en udisks2. Demuestra la suplantación de montaje como usuario para eludir PolicyKit y obtener una shell de root mediante inyección de carga útil SUID.
as-user → Omisión de Autorización → Montaje en contexto root → LPECVE-2026-7867 es una vulnerabilidad de escalación de privilegios local en udisks2 que involucra el método D-Bus Filesystem.Mount, la opción as-user, los flujos de montaje gestionados por fstab y un manejo de autorización defectuoso.
Este repositorio privado contiene las notas técnicas de investigación y los scripts PoC utilizados para validar el problema en un entorno de laboratorio controlado.
La vulnerabilidad fue descubierta y reportada por:
| Azizcan Daştan | azqzazq1 |
| Özlem Ozan | oz7oz7 |
Se le asignó el siguiente identificador:
CVE-2026-7867
La vulnerabilidad es causada por una relación de confianza defectuosa entre el UID real del llamante de D-Bus y el UID calculado/efectivo producido por la opción de montaje as-user.
En flujos vulnerables, un usuario local sin privilegios puede influir en la ruta de ejecución del montaje de manera que un montaje de sistema de archivos se realice en un contexto privilegiado/root sin el comportamiento de autorización esperado de PolicyKit.
El error central no es simplemente "opciones de montaje controladas por el usuario".
El verdadero problema es:
udisks2no logra distinguir de manera consistente la identidad del llamante original de la identidad calculada deas-userdurante la autorización y ejecución del montaje en fstab.
La lógica vulnerable está asociada con la ruta de manejo de montaje en fstab dentro de udisks2, especialmente cuando la solicitud de montaje involucra:
Filesystem.Mount
as-user
x-udisks-auth
user
users
Las áreas sensibles a la seguridad relevantes son:
identidad del llamante de D-Bus
↓
manejo de la opción as-user
↓
lógica de autorización de fstab
↓
flujo de decisión de PolicyKit
↓
ejecución de montaje en contexto root
┌─────────────────────────────┐
│ Usuario Local sin Privilegios │
└──────────────┬──────────────┘
│
│ Filesystem.Mount
│ con influencia de as-user
▼
┌─────────────────────────────┐
│ udisks2 / udisksd │
│ demonio del sistema privilegiado│
└──────────────┬──────────────┘
│
│ la lógica de fstab evalúa
│ opciones de usuario/auth
▼
┌─────────────────────────────┐
│ Brecha de Autorización │
│ mount_other_user no │
│ se aplica en ruta omitida │
└──────────────┬──────────────┘
│
│ se alcanza la rama de contexto root
▼
┌─────────────────────────────┐
│ Sistema de Archivos Montado │
│ sin el flujo de autorización │
│ esperado │
└──────────────┬──────────────┘
│
│ el impacto depende de los flags de montaje
▼
┌─────────────────────────────┐
│ Escalación de Privilegios │
│ Local │
│ validación en laboratorio │
│ controlado │
└─────────────────────────────┘
El comportamiento vulnerable proviene de un error de confusión de identidad.
El sistema tiene múltiples conceptos de identidad:
UID real del llamante de D-Bus
UID calculado de as-user
UID efectivo de montaje
contexto de privilegio del demonio udisksd
El flujo vulnerable no logra aplicar estas identidades de manera consistente.
En particular:
mount_other_user puede volverse verdadero porque se usa as-userx-udisks-auth, user o users pueden afectar la ruta de autorizaciónmount_other_user no se aplica de manera confiable fuera de ese bloqueEl resultado es un bypass del límite de privilegios local.
x-udisks-authSe supone que la opción x-udisks-auth fuerza un flujo de autorización administrativa de PolicyKit.
Comportamiento esperado:
solicitud de montaje
↓
intento de montaje como llamante
↓
fallo de permiso/auth
↓
verificación de PolicyKit filesystem-fstab
↓
aprobación de admin
↓
montaje como acción privilegiada autorizada
Comportamiento vulnerable:
solicitud de montaje con influencia de as-user
↓
la identidad calculada afecta la ejecución
↓
el montaje tiene éxito demasiado pronto
↓
la ruta de autenticación de PolicyKit no se alcanza como se esperaba
↓
se logra un estado de montaje privilegiado
Esto hace que el modelo de seguridad alrededor de x-udisks-auth no sea confiable en la ruta vulnerable.
Modelo esperado:
Usuario sin privilegios
↓
solicitud de montaje D-Bus
↓
autorización PolicyKit / fstab
↓
comportamiento de montaje restringido
Modelo roto:
Usuario sin privilegios
↓
solicitud de montaje D-Bus con suplantación de as-user
↓
desajuste en la lógica de autorización
↓
ejecución de montaje en contexto root
El error es especialmente grave porque el servicio afectado se ejecuta con privilegios elevados.
Una explotación exitosa puede permitir que un usuario local sin privilegios monte un sistema de archivos a través de udisks2 en una ruta de ejecución de contexto root sin la solicitud de autorización esperada.
Dependiendo del sistema de archivos y los flags de montaje, el impacto puede incluir:
Esta es una vulnerabilidad local.
Las condiciones relevantes incluyen:
.
├── README.md
├── disk2root.sh ← exploit principal (LPE autocontenido)
└── poc/
├── setup_lpe_env.sh ← configuración del entorno de laboratorio
├── f2_mount_as_user_bypass.sh
├── f2_check_nosuid.sh
├── f2_suid_test.sh
├── f2_final.sh
└── cleanup_lpe_env.sh
disk2root.shExploit autocontenido y armado. Construye su propio payload SUID de root, crea una imagen de disco preparada, la monta mediante el bypass de polkit as-user=root y entrega una shell de root.
Opción 1 — Ejecutar como root (funciona en todas partes, incluido SSH):
./disk2root.sh
El script automáticamente:
uid=0 mode=4755 mediante debugfsx-udisks-authsuFilesystem.Mount con as-user=root (bypass de polkit)Para especificar desde qué usuario escalar:
./disk2root.sh testuser
Si no se especifica usuario, el script elige el primer usuario regular en el sistema o crea uno temporal.
Opción 2 — Ejecutar como usuario sin privilegios (escritorio / sesión activa):
./disk2root.sh
En sistemas con una sesión activa de polkit (inicio de sesión en escritorio, GNOME/KDE), el script es completamente autocontenido — crea su propio dispositivo loop mediante udisksctl o D-Bus LoopSetup, monta con as-user=root y escala sin necesidad de configuración previa.
Opción 3 — Ejecutar como usuario sin privilegios (SSH, después de la configuración):
Si el entorno ya fue preparado (por ejemplo, ejecutando poc/setup_lpe_env.sh como root, o por una ejecución previa de ./disk2root.sh como root), cualquier usuario sin privilegios puede re-explotar:
./disk2root.sh
El script detecta automáticamente las entradas vulnerables de fstab y las utiliza.
./disk2root.sh --cleanup
Elimina todos los artefactos: entrada de fstab, dispositivo loop, punto de montaje, usuario temporal.
Cuando se ejecuta como no privilegiado, el script prueba múltiples rutas en orden:
[A] Autocontenido
construir payload → crear imagen ext4 → debugfs inyectar binario SUID
→ loop-setup (python3 GIO / udisksctl) → montar as-user=root
✓ funciona en sesiones de escritorio
[B] Fallback de fstab
escanear /etc/fstab en busca de entradas x-udisks-auth / user / users
→ montar as-user=root → encontrar binario SUID en el fs montado
✓ funciona en SSH cuando el entorno está preparado
╔═════════════════════════════════════════════════════╗
║ CVE-2026-7867 — disk2root ║
║ udisks2 as-user polkit bypass → shell root LPE ║
╚═════════════════════════════════════════════════════════╝
[*] uid=1002 (testuser) — explotando...
fstab: /dev/loop5 → /mnt/disk2root (x-udisks-auth)
montado: /mnt/disk2root
nosuid: no establecido
suid: pwn (4755 root:root)
╔═════════════════════════════════════════════════════╗
║ ingresando a shell de root — escribe 'exit' para ║
║ regresar ║
╚═════════════════════════════════════════════════════════╝
[+] shell de root — uid=0 euid=0
root@target:/tmp#
poc/)Scripts de validación individuales utilizados durante la investigación. Estos son los componentes básicos que llevaron a disk2root.sh.
1. Ejecutar poc/setup_lpe_env.sh como root
2. su - testuser
3. Ejecutar poc/f2_mount_as_user_bypass.sh
4. Ejecutar poc/f2_final.sh para validación completa
5. Ejecutar poc/cleanup_lpe_env.sh como root
O simplemente usar disk2root.sh que combina todo lo anterior.
La primitiva demostrada por esta investigación es:
suplantación de la opción as-user dentro de la orquestación de montaje privilegiado
La transición crítica es:
llamante de D-Bus sin privilegios
↓
identidad de montaje suplantada/calculada
↓
confusión en la ruta de autorización
↓
ejecución de montaje en contexto root
Por eso el problema califica como una vulnerabilidad de escalación de privilegios local.
udisks2 es comúnmente confiado como un demonio privilegiado de gestión de almacenamiento.
Un error en esta capa es de alto impacto porque se sitúa entre:
usuarios de escritorio/sesión
llamadas a métodos D-Bus
autorización de PolicyKit
operaciones de montaje de sistemas de archivos
privilegios del demonio root
Una falla en el manejo de identidad aquí puede afectar directamente los límites de privilegios locales.
Los defensores pueden monitorear actividad sospechosa de montaje de udisks2 que involucre as-user.
Fuentes de telemetría útiles:
registros de udisksd
llamadas a métodos D-Bus
registros de PolicyKit
cambios en la tabla de montaje
/proc/mounts
/etc/fstab
journalctl
Comandos útiles:
findmnt
mount
cat /proc/mounts
journalctl -u udisks2
journalctl | grep -i udisks
journalctl | grep -i polkit
Patrones sospechosos:
usuario no root activando Filesystem.Mount
uso de as-user=root
montaje inesperado sin solicitud de PolicyKit
montajes sin nosuid/noexec/nodev
ejecución de setuid desde sistemas de archivos recién montados
montajes inesperados de dispositivos loop
udisks2Aplicar la corrección proporcionada por el vendedor una vez disponible.
Lanzamiento de corrección planificado:
udisks 2.11.2
Auditar entradas que utilicen:
x-udisks-auth
user
users
Especialmente revisar sistemas de archivos que puedan contener contenido ejecutable o setuid.
Dado que es una vulnerabilidad local, reducir el acceso local no confiable disminuye la exposición.
Monitorear operaciones de montaje inesperadas a través de:
udisksd
especialmente cuando son activadas por usuarios no root.
Cuando sea aplicable, usar:
nosuid
noexec
nodev
Estos flags pueden reducir el impacto posterior al montaje.
Revisar las reglas de PolicyKit relacionadas con las acciones de montaje de udisks.
Asegurar que los usuarios sin privilegios no puedan activar rutas de montaje sensibles sin autorización explícita.
Una corrección robusta debería asegurar que:
as-user no reemplace la identidad del llamante para la autorizaciónmount_other_user siempre active las comprobaciones adecuadas de PolicyKitx-udisks-auth aplique consistentemente la autenticaciónDespués de que se levante el embargo, este repositorio puede convertirse en un repositorio público de investigación con:
docs/
├── technical-analysis.md
├── root-cause.md
├── lab-setup.md
├── exploit-flow.md
├── detection.md
└── mitigation.md
Adiciones públicas recomendadas:
Este repositorio es solo para investigación de seguridad autorizada, coordinación con el vendedor y validación defensiva.
Los scripts PoC están destinados a entornos de prueba aislados.
No ejecute estos scripts en sistemas que no posea o para los que no tenga permiso explícito de prueba.
Los autores no son responsables del mal uso de esta investigación.
CVE-2026-7867
udisks2 Investigación de Escalación de Privilegios Local
| Campo | Valor |
|---|
| CVE | CVE-2026-7867 |
| Producto | udisks2 |
| Componente | Filesystem.Mount |
| Tipo de Ataque | Escalación de Privilegios Local |
| Primitiva | Suplantación de as-user |
| Límite de Seguridad | Identidad del llamante de D-Bus → ejecución de montaje privilegiado |
| Capa de Autorización | PolicyKit / autorización de montaje en fstab |
| Vendedor | Red Hat / upstream de udisks |
| Estado | Parche en progreso / divulgación coordinada |
| Lanzamiento de Corrección Planificado | udisks 2.11.2 |
| Condición | Requerido |
|---|
| Acceso de usuario local | Sí |
Versión vulnerable de udisks2 | Sí |
Funcionalidad as-user presente | Sí |
| Objetivo de montaje gestionado por fstab adecuado | Sí |
| Ruta de autorización vulnerable | Sí |
| Acceso remoto | No |
| Herramienta | Propósito | Requerido |
|---|
busctl | Llamada de montaje D-Bus | Sí |
gcc | Compilar payload SUID | Sí (alternativa: copia de bash) |
mke2fs | Crear imagen ext4 | Sí (modo autocontenido) |
debugfs | Inyectar binario con uid=0 | Sí (modo autocontenido) |
python3-gi | LoopSetup D-Bus con paso de fd | Opcional (modo escritorio) |
udisksctl | Configuración de dispositivo loop | Opcional (modo escritorio) |
| Script | Propósito |
|---|
setup_lpe_env.sh | Preparar entorno de laboratorio (dispositivo loop, fstab, usuario de prueba) |
f2_mount_as_user_bypass.sh | Validar bypass de Filesystem.Mount con as-user=root |
f2_check_nosuid.sh | Verificar los flags nosuid/noexec/nodev en el montaje con bypass |
f2_suid_test.sh | Probar ejecución de binario SUID en el sistema de archivos montado |
f2_final.sh | PoC integral: configuración → bypass → verificar euid=0 |
cleanup_lpe_env.sh | Restaurar entorno de prueba |
| Fecha | Evento |
|---|
2026-04-21 | Informe enviado al equipo de seguridad de productos de Red Hat |
2026-04-21 | Red Hat confirmó la recepción |
2026-04-28 | El vendedor confirmó la lógica defectuosa |
2026-04-28 | El vendedor solicitó los scripts PoC |
2026-04-30 | El vendedor solicitó la asignación de CVE |
2026-04-30 | Scripts PoC enviados al vendedor |
2026-05-03 | Parche inicial del vendedor compartido |
2026-05-05 | Parche actualizado del vendedor compartido |
2026-05-05 | CVE-2026-7867 reservado |
2026-05-05 | Ticket marcado como resuelto |
2026-05-07 | El vendedor indicó que la corrección está planificada para udisks 2.11.2 |
| Investigador | GitHub | Rol |
|---|---|---|
| Azizcan Daştan | azqzazq1 | Descubrimiento, análisis, desarrollo de PoC, coordinación con el vendedor |
| Özlem Ozan | oz7oz7 | Colaboración en investigación y crédito de divulgación |