Vulnerabilidad de Inyección SQL en Joomla! 3.7

Share this…

Durante nuestras investigaciones de auditorías regulares para nuestro Firewall Sucuri (WAF), descubrimos una vulnerabilidad de inyección SQL que afecta a Joomla! 3.7 – CVE-2017-8917. Esta vulnerabilidad es fácil de explotar y no requiere privilegios en el sitio web de la víctima.

¿Estás en Riesgo?

La vulnerabilidad es causada por un nuevo componente, com_fields, que fue introducido en la versión 3.7 de Joomla!, si usas esta versión estás afectado y deberías actualizar tan pronto como sea posible. El componente vulnerable es accesible públicamente, lo que quiere decir que este problema puede ser explotado por cualquier individuo malicioso que visite tu sitio.

Por la naturaleza de los ataques de inyección SQL, hay muchas maneras que un atacante pueda causar daño, los ejemplos incluyen filtrando hashes de las contraseñas y robando sesiones de usuarios autenticados en el sitio. El último ejemplo resulta en un sitio web totalmente comprometido si la sesión de un administrador es robada.

Detalles Técnicos

El componente com_fields le presta algunas vistas al componente del lado administrativo del mismo nombre. Y a pesar que esto suena bastante raro, tiene un propósito muy práctico – permite reusar el código genérico que fue escrito para la parte administrativa, en vez de escribirlo nuevamente.

Como puedes ver en el código anterior, se declara la variable $config[‘base_path’] con el valor de la constanteJPATH_COMPONENT_ADMINISTRATOR que representa la ruta local al directorio del componente administrador. Al hacer esto, Joomla! tendrá acceso a las vistas y modelos en este directorio en lugar de las que son públicas. Y ya que esta acción está condicionada a que el parámetro view contenga el valor fields, y que layout contenga el valor modal, sabemos que la URL para acceder a esta vista será algo así:

/index.php?option=com_fields&view=fields&layout=modal

Esta URL conduce a un listado de todos los campos (fields en inglés) personalizados, que pueden ser ordenados basándose en varios parámetros.

La única vista administrativa que puede ser accesada es fields – y esta vista obtendrá sus datos del modelo del lado administrativo (gracias al truco con la variable $config[‘base_path’] que discutimos con anterioridad). En este caso, la vulnerabilidad que descubrimos estaba localizada en el modelo FieldsModelFields, en ./administrator/components/com_fields/models/fields.php.

El responsable puede ser encontrado en el método getListQuery

Para aquellos que no están familiarizados con la forma que Joomla! maneja las consultas SQL, el método $query->order() nada más concatena los datos que se le envían con la sentencia ORDER BY, así que como te puedes imaginar, permitir consultas no desinfectadas allí sería lo último que quisieras. Desafortunadamente, esto es exactamente lo que ocurrió.

El estado list.fullordering se puede llenar con datos de los usuarios porque el modelo FieldsModelFields hereda de la clase JModelList, que contiene la porción de código anterior. Puedes notar que hace algunas verificaciones de contenido y luego declara los estados list.direction y list.ordering respectivamente, ¿pero qué pasa con list.fullordering?

Después de la sentencia switch, esta instrucción se encarga de configurar el estado que estábamos buscando, por un valor que podamos controlar, sin importar que generará un estado válido para list.direction o list.ordering.

Así que para explotar esta vulnerabilidad, todo lo que un atacante tiene que hacer es agregar los parámetros correctos a la URL y podrá inyectar consultas SQL anidadas.

En Conclusión

Si no lo has hecho todavía, ¡actualiza lo antes posible!

Esta es una vulnerabilidad muy seria que puede ser usada de varias maneras para comprometer un sitio web vulnerable. Actualiza ahora. Si piensas que tu sitio web Joomla! ya ha sido hackeado, puedes seguir nuestra guía gratuita sobre cómo limpiar un sitio web Joomla! hackeado.

Fuente:https://blog.sucuri.net/espanol/2017/05/vulnerabilidad-de-inyeccion-sql-en-joomla-3-7.html