CVE-2015-1328 Prueba de Concepto
Un exploit de Prueba de Concepto (PoC) para CVE-2015-1328, una vulnerabilidad de escalada de privilegios que afecta la implementación de overlayfs del kernel de Linux. Esta vulnerabilidad permite a usuarios locales sin privilegios obtener acceso root explotando comprobaciones de permisos incorrectas en operaciones de montaje de overlayfs dentro de espacios de nombres de usuario.
Resumen
CVE-2015-1328 es una vulnerabilidad de seguridad crítica que afecta a kernels de Linux con soporte de overlayfs y espacios de nombres de usuario habilitados. La vulnerabilidad permite a un usuario local sin privilegios:
- Crear un espacio de nombres de usuario usando
unshare(CLONE_NEWUSER)
- Montar sistemas de archivos overlayfs dentro del espacio de nombres
- Explotar fallas en la comprobación de permisos para escribir en
/etc/ld.so.preload
- Ejecutar una biblioteca compartida maliciosa para obtener privilegios de root
Este PoC demuestra la vulnerabilidad mediante:
- Uso de aislamiento de espacios de nombres para eludir restricciones de montaje
- Montaje de overlayfs para manipular archivos del sistema
- Inyección de una biblioteca compartida personalizada a través de
/etc/ld.so.preload
- Secuestro de
getuid() para ejecutar un shell root
Sistemas Afectados
- Ubuntu 14.04 LTS con versiones de kernel anteriores a 3.19.0-21.21
- Sistemas con:
- Espacios de nombres de usuario habilitados (
kernel.unprivileged_userns_clone=1)
- Soporte del sistema de archivos overlayfs
- Versiones de kernel sin parche
Requisitos
- Compilador GCC con soporte de 32 bits
- Kernel de Linux con soporte de espacios de nombres de usuario y overlayfs
- Bibliotecas del sistema apropiadas (soporte de bandera
-m32)
Compilación
El proyecto incluye un Makefile para facilitar la compilación:
make
Esto compilará:
ofs - El binario principal del exploit (estático de 32 bits)
ofs-lib.so - La biblioteca compartida para el hook de LD_PRELOAD (32 bits)
Compilación Manual
Si prefieres compilar manualmente:
# Compilar exploit principal
gcc -o ofs ofs.c -m32 -static
# Compilar biblioteca compartida
gcc -m32 -fPIC -shared -o ofs-lib.so ofs-lib.c -ldl -static-libgcc
Uso
⚠️ ADVERTENCIA: Este exploit modificará archivos del sistema e intentará obtener privilegios de root. Úselo solo en entornos controlados con la autorización adecuada.
-
Compila el exploit:
make
-
Ejecuta el exploit:
./ofs
-
Si tiene éxito, el exploit:
- Creará las estructuras de espacio de nombres necesarias
- Montará sistemas de archivos overlayfs
- Escribirá en
/etc/ld.so.preload
- Ejecutará
/bin/su, lo que activa la biblioteca maliciosa
- Generará un shell root
Cómo Funciona
Flujo del Exploit
- Creación del Espacio de Nombres: El exploit crea un nuevo espacio de nombres de usuario usando
unshare(CLONE_NEWUSER)
- Espacio de Nombres de Montaje: Crea un espacio de nombres de montaje usando
clone() con CLONE_NEWNS
- Montaje Overlayfs: Monta sistemas de archivos overlayfs para manipular directorios del sistema
- Manipulación de Archivos: Usa overlayfs para renombrar archivos y escribir en
/etc/ld.so.preload
- Inyección de Biblioteca: Escribe una biblioteca compartida maliciosa en
/tmp/ofs-lib.so
- Escalada de Privilegios: Ejecuta
/bin/su, lo que activa la biblioteca precargada
- Shell Root: La biblioteca secuestra
getuid() y genera un shell root
Detalles Técnicos
- El exploit usa
clone() con una pila personalizada para crear espacios de nombres de montaje aislados
- Los montajes overlayfs permiten la manipulación de archivos dentro del espacio de nombres que afecta al host
- La biblioteca compartida (
ofs-lib.so) engancha getuid() a través de LD_PRELOAD
- Cuando
/bin/su llama a getuid(), la función maliciosa se ejecuta en su lugar
Estructura del Código
.
├── ofs.c # Código principal del exploit
├── ofs-lib.c # Biblioteca compartida para escalada de privilegios
├── lib_so.h # Datos de biblioteca binaria incrustada
├── Makefile # Configuración de compilación
└── README.md # Este archivo
Archivos Clave
- ofs.c: Contiene la lógica principal del exploit, creación de espacios de nombres y operaciones de montaje
- ofs-lib.c: Implementa el hook de
getuid() que genera un shell root
- lib_so.h: Contiene la biblioteca compartida compilada como un arreglo binario (para incrustación)
Mitigación
Para protegerse contra esta vulnerabilidad:
- Actualice el kernel a una versión parcheada (3.19.0-21.21 o posterior para Ubuntu 14.04)
- Deshabilite los espacios de nombres de usuario si no son necesarios:
echo 0 > /proc/sys/kernel/unprivileged_userns_clone
- Use AppArmor/SELinux para restringir las capacidades de creación de espacios de nombres
- Monitoree los registros del sistema en busca de operaciones de montaje sospechosas
Aviso Legal y Ético
Este código se proporciona solo con fines educativos y de investigación de seguridad.
- El uso no autorizado de este exploit contra sistemas sin permiso explícito es ilegal
- Este PoC está destinado a:
- Investigadores de seguridad que estudian vulnerabilidades del kernel
- Administradores de sistemas que prueban la resiliencia de sus sistemas
- Fines educativos en entornos controlados
- Los autores no son responsables por el mal uso de este código
- Asegúrese siempre de tener la autorización adecuada antes de probar en cualquier sistema
Referencias
Licencia
Este proyecto se proporciona tal cual para fines educativos. Úselo de manera responsable y de acuerdo con todas las leyes y regulaciones aplicables.