martes, noviembre 08, 2016

Cómo explotar los 2 bugs críticos de MySQL para ser root en el servidor GNU/Linux de tu WordPress (u otro CMS)

A finales de la semana pasada se publicó una vulnerabilidad de las denominadas como críticas y que además venía en formato doble. El producto afectado, en esta ocasión, era MySQL, uno de los motores de base de datos más utilizados en Internet. No hace mucho, teníamos una grave vulnerabilidad que afectaba al kernel de GNU/Linux y que provocaba la escalada de privilegios en un sistema, como fue DirtyCOW. En esta ocasión, el problema radica en el motor de base de datos MySQL.

Figura 1: Cómo explotar los 2 bugs críticos de MySQL para ser root en
el servidor GNU/Linux de tu WordPress (u otro CMS)

Hace más o menos un mes, el investigador Dawid Golunski, reportó dos vulnerabilidades críticas sobre el popular motor de base de datos MySQL. La primera vulnerabilidad era la CVE-2016-6663 y la segunda la CVE-2016-6664. El investigador documentó una prueba de concepto, en el que se puede ver como se aprovecha de la segunda vulnerabilidad para lograr la escalada de privilegios.

La primera vulnerabilidad es un fallo de condición de carrera que provoca la escalada de privilegios, por lo que un atacante con acceso a la máquina podría ejecutar código arbitrario en un contexto superior al suyo. El investigador polaco indicó que esta vulnerabilidad puede permitir que un usuario local con acceso a la base de datos afectada pueda elevar su privilegio en el contexto de la base de datos, pudiendo ejecutar comandos como usuario mysql. La explotación permitiría a un atacante acceder a todas las bases de datos que se encontrasen creadas o almacenadas en la plataforma. Aquí el vídeo de la demostración.

El investigador Golunski descubrió que un potencial atacante podría llegar a comprometer la seguridad global del servidor con la otra vulnerabilidad, la CVE-2016-6664. La segunda vulnerabilidad permite la escalada de privilegios a root. El fallo reside en que los usuarios que tienen acceso al usuario mysql dentro del sistema, éste se consigue con la vulnerabilidad tratada anteriormente, pueden lograr el máximo privilegio en el sistema gracias a la forma en la que se administran los registros de errores, ya que estos realizan operaciones de forma insegura, pudiéndose añadir un archivo con código arbitrario.

PoC: Jugando con ambos y logrando mysql user & root user

El paso inicial de llegar al equipo, a través por ejemplo de una vulnerabilidad web que permita ejecutar código en una máquina, nos lo saltamos. Incluso, puede que la vulnerabilidad fuera explotada por un auditor con acceso físico a dicha máquina. Sea como sea, comenzamos con una shell en el equipo. Un ejemplo perfecto de creación de exploits en Linux.

El primer paso es comprobar, mediante la ejecución del comando mysql –version, la versión del sistema instalado. Para MySQL son las siguientes:
• Menor que 5.5.51
• Menor que 5.6.32
• Menor que 5.7.14
Compilando el exploit, que se puede encontrar en exploit-db, de la primera vulnerabilidad, tenemos que tener en cuenta que el sistema tenga instalado libmysqlclient-dev. Una vez compilado obtenemos el binario.

Figura 2: Compilación del binario

En este punto necesitaremos disponer de información de un usuario de la base de datos, contraseña, su cadena de conexión. Cuando el usuario se encuentra dentro del sistema puede buscar dicha información, a través, por ejemplo, de la aplicación web vulnerada, si ésta tuviera una base de datos detrás, por ejemplo, Wordpress.

Figura 3: Explotando el motor MySQL de un Wordpress

Al final obtenemos un mensaje en el que nos indica que todo ha ido bien, que tenemos el rol de mysql user y que desde aquí podemos llevar a cabo la escalada total y final de privilegios, a través de la explotación de la vulnerabilidad CVE-2016-6664.

Figura 4: El exploit da acceso con el rol mysql user

Una vez nos encontramos en este punto, vamos a lograr la shell de root. Ahora, aprovechándonos del exploit desarrollado por Dawid Golunski, vamos a aprovecharnos de la mala gestión de los ficheros de error que hace el sistema. Ahora, desde la consola conseguida anteriormente, debemos ejecutar el fichero bash script que se puede obtener desde exploit-db.

Figura 5: Ahora con la segunda vulnerabilidad se consigue sheel de root

Dicha ejecución nos proporciona una consola como root, teniendo acceso global al sistema gracias a encadenar dichas vulnerabilidades. A día de hoy, estas dos vulnerabilidades son críticas, pero existe solución para ellas, por lo que se recomienda a los equipos de IT que actualicen lo antes posible sus sistemas de producción.

Autor: Pablo González Pérez (@pablogonzalezpe)
Escritor de los libros "Metasploit para Pentesters", "Ethical Hacking", "Got Root" y “Pentesting con Powershell

No hay comentarios:

Publicar un comentario