lunes, 10 de septiembre de 2012

Tres vulnerabilidades en MariaDB permiten denegación de servicio


Se han publicado tres vulnerabilidades en MariaDB que podrían permitir a un atacante con acceso a una base de datos en el servidor, causar una denegación de servicio.

MariaDB es un sistema gestor de bases de datos basado en MySQL. MySQL pertenecía a Sun Microsystems (también dueño de Java) y estaba publicado con una licencia libre. Al adquirir Oracle a Sun, la licencia de MySQL también cambió a una de tipo privativo, por lo que la comunidad de desarrolladores hizo un "fork" o copia de la versión libre de MySQL y siguieron desarrollándola bajo el nombre de MariaDB y con licencia libre.

Las tres vulnerabilidades encontradas en MariaDB pueden ser aprovechadas para causar una denegación de servicio del gestor de bases de datos (un cuelgue).

El primer error (https://mariadb.atlassian.net/browse/MDEV-405) se puede producir al usar un puntero que apunta a NULL. Esto se da dentro de la función 'test_if_skip_sort_order()' al ejecutar subconsultas (un SELECT dentro de otro SELECT), además de tener que usar 'GROUP BY' y 'HAVING' en dicha subconsulta.

La segunda vulnerabilidad (https://mariadb.atlassian.net/browse/MDEV-430) reside en la función 'select_describe()' al realizar subconsultas con ciertas características. En la prueba de concepto expuesta se utilizan dos subconsultas con funciones agregadas (MAX) y un semijoin. Además de todo esto, se aplica el comando EXPLAIN, que es una herramienta orientada a desarrolladores que proporciona MySQL y MariaDB para obtener un breve resumen de la operación que está realizando internamente el motor de bases de datos, y así, poder optimizar la sentencia. Con esta vulnerabilidad, aunque más complicada de explotar, también se realiza una denegación de servicio, provocando un "cuelgue" en el gestor de base de datos.

La tercera vulnerabilidad (https://bugs.launchpad.net/maria/+bug/1039277) reside en la ejecución en paralelo de consultas que están en la memoria caché de servidor. En la prueba de concepto presentada, se realiza una consulta con subconsultas 3 veces. La primera de ellas es para obtener los datos y que el servidor la tenga en memoria caché. Posteriormente se realizan las otras dos consultas para activar el paralelismo y provocar la denegación de servicio.

Estas tres vulnerabilidades pertenecen a la versión 5.5.25, aunque no se descarta que existan en otras versiones. Los tres errores, sin CVE asignado, están solucionados en la versión 5.5.27 de MariaDB.

Más información:

MariaDB 5.5.27 - Changelog:

MariaDB - MDEV-405:

MariaDB - MDEV-430:

MariaDB - Crash in sql_cache.cc:


Antonio Sánchez

No hay comentarios:

Publicar un comentario en la entrada