16 nov 2020

Me siento privilegiado con mi Ubuntu 20.04

Muy buenas a todos! Hoy queremos hablarles sobre escalada de privilegios, en particular sobre el sistema operativo Ubuntu 20.04, su versión LTS más reciente, lanzada a comienzos de este año. Hace algunos días el investigador de seguridad de GitHub, Kevin Backhouse, ha publicado un artículo en el cual informa que ha descubierto una manera muy sencilla de obtener una cuenta con permisos root a partir de un usuario sin privilegios.

Podríamos pensar que para poder elevar privilegios en un sistema operativo tan moderno necesitaríamos un exploit con varias líneas de código, pero sorprendentemente para llevar a cabo el proceso sólo se hace uso del entorno gráfico, unos pocos comandos, una denegación de servicio y mucho ingenio.

Según explica el investigador, utilizando la terminal desde un usuario sin privilegios se crea un enlace simbólico en su propio home llamado .pam_environment que apunta a /dev/zero

$ ln -s /dev/zero .pam_environment

Posteriormente se debe ingresar a las opciones de Configuración Regional e Idioma para cambiar el lenguaje del sistema.

Seleccionamos una nueva configuración de idioma

En ese momento se generará una Denegación de Servicio en account-daemon y este será el inicio del ataque. Analizando la salida de top podemos corroborar que el servicio comienza a consumir una gran cantidad de recursos del sistema.  

Captura comando top. Notar el elevado uso de CPU

Luego, eliminaremos el enlace simbólico creado anteriormente y detendremos el proceso correspondiente enviando la señal de SIGSTOP (podemos obtener el PID en cuestión desde la salida de top o de pidof ).

$ rm .pam_environment

$ kill -SIGSTOP <PID> 

Ahora es cuando hacemos la fantasía y prepararemos el terreno para luego cerrar la sesión. Lo primero que haremos es indicar una secuencia de comandos dentro de una shell. Entre los comandos debemos definir un timer que al finalizar dará lugar a la ejecución del comando kill con la señal SIGSEGV y luego nuevamente kill pero esta vez con la señal SIGCONT, ambos sobre el proceso en cuestión. Como todo esto queremos que se realice mientras estamos cerrando la sesión, haremos uso del comando nohup. Es importante que el tiempo definido sea suficiente para que nos permita completar el proceso para cerrar la sesión actual.

$ nohup bash -c "sleep 30s; kill -SIGSEGV <PID>; kill -SIGCONT <PID>"

Con esto estaremos mezclando los componentes para generar una especie de comando bomba que debemos plantar para que "explote" mientras cerramos la sesión.

Plantando la bomba

Una vez completado el proceso de cierre de sesión, y si todo sale bien, luego de unos segundos se nos presentará un asistente, con varios cuadros de diálogo, como el que debemos completar luego de instalar el Sistema Operativo y dentro del cual tendremos que crear un usuario.

Creamos un nuevo usuario mediante el asistente

Al completar el asistente se iniciará sesión para este usuario creado, la particularidad que tiene dicho nuevo usuario es que pertenecerá al grupo sudo y por lo tanto tendremos privilegios de administración.

Grupos a los que pertenece el usuario creado

Este método se aprovecha de dos bugs recientemente reportados que involucran al servicio de manejo de cuentas de usuario (accountsservice) y al servicio que maneja la pantalla de login (gdm3). En el primer caso los CVE involucrados son CVE-2020-16126 y CVE-2020-16127, mientras que en el segundo hacemos uso de CVE-2020-16125. Según reconoce el autor en su artículo, descubrió el proceso de forma casi accidental, lo que hace la historia aún más curiosa...

A escalar privilegios y hasta el próximo post!


No hay comentarios:

Publicar un comentario