Exploit en MySQL aprovecha vulnerabilidad para obtener acceso de administrador Root

Estándar

Fuente: http://www.muycomputerpro.com/2012/06/11/una-vulnerabilidad-en-mysql-permite-ganar-acceso-root/

Varios exploits para un fallo de autenticación en MySQL se están extendiendo en diversos canales en Internet, en parte porque este error es especialmente sencillo de aprovechar para ganar acceso root a la base de datos.

El único factor que disminuye su peligrosidad es el hecho de que depende de la librería C con la que se implementó MySQL. Este “bypass” del sistema de contraseñas tiene ya asignada un código de vulnerabilidad, la CVE-2012-2122, y permite que un atacante logre acceso root a la base de datos repitiendo varias veces el intento de acceder a dicha cuenta con una contraseña incorrecta.

La vulnerabilidad ha sido detallada por el coordinador de seguridad de MariaDB -un fork de MySQL, y se debe a un error en el llamado error de casting al comparar la contraseña esperada con la contraseña introducida.

Oracle ya corrigió el problema de este bug -que codificó como 64884– tanto en MySQL 5.1.63como en MySQL 5.5.24, ambos lanzados hace un mes. La corrección consiste en un simple cambio en una línea, y un parche similar se puede aplicar al código fuente de MariaDB.

Distribuciones como Ubuntu (10.04, 10.10, 11.04, 11.10 y 12.04), openSUSE 12.1 64 bits, Fedora 16 64 bits y Arch Linux tienen esta vulnerabilidad, mientras uqe Debian, RHEL, CentOS y Gentoo parecen estar a salvo. Lo ideal es actualizar los paquetes en los sistemas afectados cuanto antes.

Fuente 2: http://www.hackplayers.com/2012/06/evasion-de-autenticacion-en.html

Sergei Golubchik, el coordinador de seguridad de MariaDB (un derivado de MySQL con licencia GPL), ha encontrado un serio bug en MySQL y MariaDB que podría permitir a un atacante evadir la autenticación de la base de datos.

La vulnerabilidad identificada como CVE-2012-2122puede afectar a todas las versiones 5.1.61, 5.2.11, 5.3.5, 5.5.22 y anteriores de ambos motores de base datos, siempre que hayan sido compiladas con librerías que permiten que la rutina memcmp() pueda llegar a devolver enteros fuera del rango de -128 a 127 (Linux glibc
sse-optimized
).

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“.

Contramedidas:

La primera regla para securizar MySQL es no exponer la base de datos en la red. La mayoría de las distribuciones de Linux configuran el acceso al demonio de MySQL sólo para localhost. En caso de que sea necesario habilitar el acceso remoto al servicio, MySQL también proporciona controles de acceso basados en host.

Lo más fácil es modificar el archivo my.cnf con el fin de restringir el acceso al sistema local. Busca la sección [mysqld] y cambia (o añade una nueva línea para configurar) el parámetro “bind-address” a “127.0.0.1”. Reinicia el servicio de MySQL para aplicar esta configuración.

La siguiente recomendación claramente es actualizar o parchear la base de datos. Oracle ya corrigió el error en MySQL, bug id 64884, con las versiones MySQL 5.1.63 y 5.5.24, ambas publicadas hace un mes. La corrección aplicada es un único cambio en una línea; también hay un parche similar disponible para MariaDB. En breve, se espera que las distintas distribuciones de Linux vaya publicando parches para sus correspondientes versiones de MySQL.

Referencias:
 
CVE-2012-2122 : Serious Mysql Authentication Bypass Vulnerability
CVE-2012-2122 : Mysql Authentication Bypass Exploit
Simple authentication bypass for MySQL root revealed 
CVE-2012-2122: A Tragically Comedic Security Flaw in MySQL (comprobación de sistemas afectados)

Sistemas vulnerables:

  • Ubuntu Linux 64-bit ( 10.04, 10.10, 11.04, 11.10, 12.04 ) ( via many including@michealc )
  • OpenSuSE 12.1 64-bit MySQL 5.5.23-log ( via @michealc )
  • Fedora 16 64-bit ( via hexed )
  • Arch Linux (unspecified version)

Sistemas NO vulnerables:

  • Official builds from MySQL and MariaDB (including Windows)
  • Red Hat Enterprise Linux, CentOS (32-bit and 64-bit) [ not conclusive ]
  • Ubuntu Linux 32-bit (10.04, 11.10, 12.04, likely all)
  • Debian Linux 6.0.3 64-bit (Version 14.14 Distrib 5.5.18)
  • Debian Linux lenny 32-bit 5.0.51a-24+lenny5 ( via @matthewbloch )
  • Debian Linux lenny 64-bit 5.0.51a-24+lenny5 ( via @matthewbloch )
  • Debian Linux lenny 64-bit 5.1.51-1-log ( via @matthewbloch )
  • Debian Linux squeeze 64-bit 5.1.49-3-log ( via @matthewbloch )
  • Debian Linux squeeze 32-bit 5.1.61-0+squeeze1 ( via @matthewbloch )
  • Debian Linux squeeze 64-bit 5.1.61-0+squeeze1 ( via @matthewbloch )
  • Gentoo 64-bit 5.1.62-r1 ( via @twit4c )
  • SuSE 9.3 i586 MySQL 4.1.10a ( via @twit4c )

mysql1 Una vulnerabilidad en MySQL permite ganar acceso root

Script automático para crear Form y sentencias SQL en PHP desde tabla Mysql

Estándar
A continuación tenéis disponible un script para generar de forma automática un Update, Insert y Formulario desde una tabla en MYSQL.
Es muy util ya que nos ahorra mucho tiempo al programar en este lenguaje y despues de mucho buscar nunca encontrabamos nada parecido.
Solo debemos crear previamente la conexion y pasarle como parametro a la consulta el nombre de la tabla que hayamos creado devolviendo un limit 1.
¿Te ha resultado útil?. Déjanos un comentario con tu experiencia.
<?
//sacamos los textos
$sql=”SELECT * FROM “.$_GET[table_code].” limit 1 “;
$result=mysql_query($sql,$link) or die(mysql_error());
$printed_headers = false;
if ($result){