Recientemente se ha descubierto un bug muy importante en MySQL y también en MariaDB que afecta a las versiones 5.1.61, 5.2.11, 5.3.5, 5.5.22 y anteriores del motor de base de datos. Dicho bug permitiría acceder a la base de datos sin autenticación, lo que lo convierte en un tremendo fallo de seguridad.
La vulnerabilidad, etiquetada como CVE-2012-2122 afecta a aquellas versiones de MySQL que fueran compiladas con las librerías que permitan a la rutina memcmp() devolver valores enteros fuera del rango -128 -- 127. En GNU/Linux, glibc con sse-optimized.
Según el informe del bug, publicado por Sergei Golubchik nos dice:
Cuando un usuario se conecta a MariaDB/MySQL, se calcula un token (un hash SHA a partir de su contraseña y una cadena al azar) y se compara con el valor esperado. Debido a una serie de pruebas incorrectas, puede ocurrir que el token y el valor esperado se consideren iguales, incluso si la función memcmp() devuelve un valor distinto de cero. En este caso, MySQL/MariaDB puede pensar que la contraseña es correcta, aunque no lo sea. Debido a que el protocolo utiliza cadenas aleatorias, la probabilidad de provocar este error es de aproximadamente de 1 sobre 256.
Esto significa que, si se conoce un nombre de usuario para conectarse (y el root casi siempre existe), podremos conectarnos con "cualquier" contraseña con repetidos intentos de conexión. Unos 300 intentos sólo nos llevaran una fracción de segundo, así que básicamente la protección con contraseña de la cuenta es como si no existiera. Además cualquier cliente puedo hacerlo, no hay necesidad de una biblioteca libmysqlclient especial.
Existen ya múltiples formas de explotar el bug y una de las más simples es un bucle en bash que permite el acceso a las credenciales.
for i in `seq 1 1000` do mysql -u root --password=bad -h 127.0.0.1 2>/dev/null; done
Y también existe ya un módulo de Metasploit que permite explotar dicha vulnerabilidad, que lo veremos en funcionamiento en otro post.
Actualización: A fecha de ahora no hay un parche que solucione el problema si tu servidor está afectado. La única solución que se recomienda es editar el fichero de configuración e impedir que nadie se conecte a la base de datos de forma remota. Se supone que los usuarios locales son confiables.
Actualización: A fecha de ahora no hay un parche que solucione el problema si tu servidor está afectado. La única solución que se recomienda es editar el fichero de configuración e impedir que nadie se conecte a la base de datos de forma remota. Se supone que los usuarios locales son confiables.
bind-address = 127.0.0.1
No hay comentarios :
Publicar un comentario