Auditoria de seguridad en Liferay Portal

4

Visto 3458 veces | Publicado el 13/06/2012 | www pentest hacking vulnerabilidades


En múltiples ocasiones ya hemos hablado en Hacktimes.com de CMSs (Content Management Systems) y la verdad es que hasta ahora no habíamos tenido la oportunidad de trabajar con Liferay, un conocido CMS de código abierto, creado en el año 2000 y basado en Java que nada tiene que ver con Drupal, Wordpress, Joomla o cualquier otro gestor de contenidos. Liferay Portal, con más de 4 millones de descargas y alrededor de 500.000 instalaciones en todo el mundo, es uno de los principales CMSs que existen actualmente.

Recientemente en hacktimes.com hemos tenido que auditar un portal desarrollado con Liferay y se han encontrado diversas vulnerabilidades y múltiples curiosidades relativas a su funcionamiento y rendimiento. Por ejemplo, para obtener la versión exacta de Liferay que se está utilizando basta con hacer una petición Web a la sección "/documents/" de la página de la siguiente forma:

http://www.hacktimes.com/documents/

Esta forma de detectar Liferay funciona tanto con versiones antiguas como también con la última que se ha creado, la versión 6.1.10 EE GA1.

Una vez identificada la versión empleada en la página analizada, es preciso, en el formulario de autenticación probar los usuarios por defecto existentes en cualquier instalación de Liferay. El formulario de autenticación se localiza, por ejemplo, mediante una petición similar a la siguiente:

http://www.hacktimes.com/web/test y la opción "Sign in"

Los usuarios por defecto de Liferay son: test@liferay.com con la contraseña test o default@liferay.com y contraseña password.

Si no ha habido suerte con los usuarios por defecto, se pueden enumerar otros usuarios existentes en la plataforma. Para ello, se puede proceder de dos formas diferentes:

1) Mediante el diferente mensaje de error que se obtiene al intentar recuperar la contraseña de un usuario tal y como se observa en la siguiente captura de pantalla:


Fig. 1 - Mensajes de error distintos obtenidos si el usuario existe o no al intentar recuperar su contraseña

Si el usuario existe, Liferay nos muestra un captcha para rellenar y tramitar la petición de recuperar nuestro password olvidado. Si, por el contrario, el usuario no existe, nos indica que no tiene esa dirección de correo en su base de datos y da otro mensaje de error diferente. En nuestro caso se probó con el usuario test@liferay.com que, como se veía anteriormente, es un usuario válido por defecto y con el usuario pepe@gmail.com que obviamente no existía.

2) Otra forma de conseguir nombres de usuario válidos en la aplicación es aprovechando la sección anteriormente comentada de "/documents/". Es posible enumerar usuarios añadiendo a la ruta el nombre de usuario que se quiere comprobar si existe. Si es un usuario válido el mensaje de error obtenido es de que no se dispone de permisos para ver sus documentos o un "not found" si el username no existe tal y como se puede observar en la siguiente captura de pantalla:

http://www.hacktimes.com/documents/pepe el usuario no existe y se obtiene un mensaje de error de "not found"

http://www.hacktimes.com/documents/guest este usuario si existe y el mensaje de error es de que no se dispone de permisos

Lógicamente, se puede automatizar este proceso y viendo la respuesta del servidor conseguir un listado de usuarios válidos más o menos amplio.

Una vez que se dispone de la versión de Liferay y de diversos nombres de usuario del sistema, se puede obtener la versión del Servidor de Aplicaciones utilizado en la plataforma. Normalmente suele ser JBoss pero puede ser Apache Tomcat o cualquier otro sistema con soporte para Java. Más información sobre las diferentes plataformas soportadas directamente en la página Web de Liferay: http://www.liferay.com/products/liferay-portal/tech-specs

Obtener dicha versión se consigue forzando un error del tipo 500 de forma muy sencilla, basta hacer una petición Web a la siguiente dirección:

http://hacktimes/delegate/
Con este error se consigue la versión exacta del Servidor de Aplicaciones utilizado. En los ejemplos se muestra el resultado para una plataforma con apache Tomcat 6.0.29 y para un servidor JBoss 2.1.3.GA:


Fig. 2 - Mensaje de error forzado para identificar el Servidor de Aplicaciones JBoss


Fig. 3 - Mensaje de error forzado para identificar el Servidor de Aplicaciones Tomcat

Otra opción curiosa es la posibilidad de obtener el listado de portlets presentes en la página con tan sólo realizar la siguiente petición HTTP:

http://hacktimes/c/search/open_search

Además, sabiendo la versión de Liferay siempre se pueden buscar vulnerabilidades conocidas que, posiblemente, aún estén sin parchear y sin actualizar. Por ejemplo, mediante Secunia aparecen las siguientes vulnerabilidades clasificadas según el riesgo y el estado (corregidas o no por el fabricante) para la versión 6.x de Liferay:

http://secunia.com/advisories/product/34896/?task=advisories

Todas estas vulnerabilidades se han reportado a la gente que desarrolla Liferay mediante diferentes tíquets a través de su soporte pero, a día de hoy, aún no se ha obtenido respuesta alguna. Una posible solución para minimizar el impacto de estos errores a pesar de que no exista aún un parche o actualización, consiste en personalizar los mensajes de error del Servidor Web para que no se muestre información sensible del sistema. De esta manera, no funcionará el método para obtener la versión de Liferay mediante "/documents/" o la forma de conseguir la versión del Servidor de Aplicaciones utilizando "/delegate".


junio 26 11:29 a.m.
Jaime dijo:

Estoy de acuerdo con pablo en que es un muy buen artículo. Si estáis interesados (como yo) en todo lo que se refiere a seguridad informática y sois unos viciados del software os recomiendo visitar la pagina de facebook de “Zitralia” o en twitter: @zitralia Estoy enganchadiisimo

junio 13 12:34 p.m.
Hacktimes dijo:

Jorge, gracias por tus comentarios. Sabiendo que ya se está trabajando en corregirlo nos quedamos más tranquilos. El reporte se hizo vía JIRA, aquí te dejo alguno de los tiquets abiertos: LPS-27867, LPS-27857, etc.

junio 13 12:22 p.m.
Jorge dijo:

Hola VaxMAN, Soy Jorge Ferrer, VP de Ingeniería de Liferay. Antes de nada gracias por el análisis de Liferay. Varios de los puntos que mencionas están ya corregidos y estarán disponibles en la versión GA2 que se liberará en unos días. Con respecto a las notificaciones a través de issues.liferay.com, ¿Podéis confirmar que se han seguido las recomendaciones de http://www.liferay.com/community/wiki/-/wiki/Main/JIRA#section-JIRA-Security+Level? De esa forma conseguiréis para este tipo de ticket la prioridad que las notificaciones relativas a seguridad merecen.

junio 13 11:25 a.m.
Pablo dijo:

Muy buen artículo la verdad, hace tiempo que trabajo con Liferay y es muy potente pero en cuanto a seguridad deja mucho que desear y este artículo es un claro ejemplo. Seguir así!!!!


Añadir comentario











Búsqueda

Síguenos


El staff de Hacktimes ruega a cualquier persona interesada en la distribución y/o publicación de estos artículos que lo haga sin alterar su contenido y cite a su autor y/o la fuente original. Muchas gracias.

Todos los artículos publicados se encuentran bajo la licencia Creative Commons