martes, junio 12, 2012

Vulnerabilidad grave en MySQL/MariaDB - CVE-2012-2122

FUENTE: de Security By Default 

Vulnerabilidad grave en MySQL/MariaDB - CVE-2012-2122:

No es el día de los Santos Inocentes, ni de aquí (28 de Diciembre) ni internacional (April's Fool). El sábado 9 de Junio  Sergei Golubchik, coordinador de seguridad de MariaDB publicaba un post en la lista OSS-SEC sobre una grave vulnerabilidad que afectaba a diferentes versiones de MySQL y MariaDB.

Se evidencia la posibilidad de autenticarse como usuario con máximos privilegios (root) únicamente realizando conexiones simultáneas, con CUALQUIER contraseña introducida como parámetro y contra un servidor vulnerable. Al cabo de un número indeterminado de intentos fallidos, el servidor aceptará la conexión y se realizará la autenticación de forma satisfactoria. Sin más. Sin shellcodes raras, sin casuísticas extrañas: únicamente tenemos que tener delante un servidor vulnerable, que cumpla con las siguientes versiones:


  • Son vulnerables todas las versiones de MariaDB y MySQL hasta la 5.1.61, 5.2.11, 5.3.5 y 5.5.22
  • NO SON vulnerables las versiones de MySQL 5.1.63, 5.5.24 y 5.6.6
  • NO SON vulnerables las versiones de MariaDB 5.1.62, 5.2.12, 5.3.6 y 5.5.23
Con la siguiente línea en shell script, teniendo instalada una base de datos vulnerable en el sistema local, y contando con el cliente 'mysql', se podría realizar una autenticación como usuario root sin conocer la contraseña:

for i in `seq 1 1000`; do mysql -u root --password=blablabla -h 127.0.0.1 2>/dev/null; done

Básicamente, se ejecutará la sentencia de autenticación mediante cliente por consola (comando mysql) como usuario root (-u root) y cualquier contraseña (--password=blablabla) contra el servidor vulnerable  presente en el mismo sistema donde se ejecuta este script (-h 127.0.0.1), sin mostrar ningún mensaje de error por pantalla (2>/dev/null).

Vamos a ver el ejemplo real. Las siguientes pruebas se han realizado sobre una Fedora Core 16, con MySQL versión 5.5.21:


En primer lugar, y para este ejemplo, cambiaremos la contraseña original de MySQL para el usuario root, que antes la teníamos establecida a 'password', para que ahora sea 'SuperPassWordDeLaMuerte':


Seguidamente, salimos de la sesión de root, y nos quedamos como usuario sin privilegios, y ejecutamos la secuencia anterior, que realizará conexiones como usuario root y cualquier contraseña, programando un total de 1000 intentos. A continuación se ejecutará la consola de mysql satisfactoriamente:



Comprobamos el usuario con el que estamos autenticados mediante la sentencia select current_user(), obteniendo como resultado 'root@localhost'


Obviamente, este "ataque" ya se encuentra integrado como exploit de Metasploit Framework, permitiendo además el volcado de hashes de todos los usuarios, todo ello con el módulo mysql_authbypass_hashdump:



Enhorabuena desde SecurityByDefault a los descubridores de este bug, verlo para creerlo...De momento, ¡una de las vulnerabilidades descubiertas favoritas para este año 2012!