Historia de una vulnerabilidad

En este post vamos a hablar acerca de una vulnerabilidad descubierta por el equipo de CSIRT-cv y publicada ayer, como podéis ver en su página de alertas. La aplicación afectada es JasperServer, un servidor para generación de informes, análisis de datos y Business Intelligence ampliamente utilizado, y que tiene una versión de código abierto, que es la que se ha demostrado vulnerable.

Durante un test de seguridad realizado a la versión 3.7.0 CE, se detectó que, además de los parámetros necesarios para ubicar al usuario en la aplicación, había un parámetro llamado _flowExecutionKey que iba cambiando cada cierto tiempo, probablemente para controlar el flujo del usuario dentro de la aplicación. A continuación se puede ver un ejemplo de petición válida en el sistema:

POST /flow.html?_flowExecutionKey=XXXXXXXXXX&_eventId=create HTTP/1.1
Host: 192.168.1.3
User-Agent: Mozilla/5.0 (X11; U; Linux i686; es-ES; rv:1.9.2.12) ...
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: es-es,es;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Proxy-Connection: keep-alive
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Referer: http:// 192.168.1.3/flow.html?_flowId=userListFlow&curlnk=3
Cookie: JSESSIONID=A7747A6C2AB278B5AD442A8755744184; treefoldersTree=1%7Copen%3B
Pragma: no-cache
Cache-Control: no-cache
Content-Length: 167

userDetails={"userName": "user", "fullName": "User User", "email": "user@example.com", "password": "user", "enabled": true, "roles": [{"roleName": "ROLE_ADMINISTRATOR"}]}

Esta petición, con el parámetro _flowExecutionKey correcto, inserta un nuevo usuario administrador en la aplicación. Examinándolo a fondo, comprobamos que este campo era relativamente fácil de predecir, lo que nos hizo pensar en ataques de tipo CSRF. Decidimos entonces hacer varias pruebas para tratar de engañar a la aplicación y generar peticiones de adición de usuarios al sistema, con resultados positivos.

Por aquel entonces (estoy hablando de finales de 2010) se había publicado una nueva versión de esta aplicación, la 3.7.1 CE, así que la instalamos, para comprobar que también podíamos introducir usuarios en el sistema de forma ilegítima si conseguíamos que un usuario autenticado pulsara en un enlace aparentemente inocuo, pero que contenía la prueba de concepto que habíamos generado.

jasper

Usuario ficticio insertado tras la realización de una prueba de concepto de la vulnerabilidad.

¿Y qué hacemos ahora?”, nos dijimos. Como corresponde con nuestro trabajo, decidimos informar sobre la vulnerabilidad a JasperSoft, la empresa desarrolladora del producto. Pudimos hablar con uno de los comerciales de JasperSoft en España, así como con un técnico, también español, que nos confirmó el reconocimiento de la vulnerabilidad por parte de la empresa.

Como suele ocurrir en estos casos, (excepto algunas excepciones), las conversaciones con la empresa tratando de concretar cuando se iba a resolver la vulnerabilidad que habíamos encontrado tuvieron una respuesta pobre y difusa, hasta que, tras contactar con el CERT/CC, que nos sirvió de intermediario y nos ayudó en todo el proceso, JasperSoft concretó la fecha de corrección del fallo en “finales de verano”, tras lo que nos pusimos a planificar la publicación para el 15 de septiembre (curiosidades del destino, el día de mi cumpleaños), casi nueve meses después de que reportaramos la vulnerabilidad a JasperSoft en primera instancia.

A última hora JasperSoft nos pidió todavía más tiempo para solucionar la vulnerabilidad, pero tras reunirnos todo el equipo que trabajamos en CSIRT-cv, decidimos seguir adelante con la publicación de la vulnerabilidad, ya que creemos que nueve meses es tiempo más que suficiente para solucionar un problema que puede comprometer la seguridad de los propios clientes de esta aplicación.

¿El resultado? Tenéis disponible la alerta en la web de CSIRT-cv, la cual aprovecho para recomendaros desde aquí, así como nuestro informe de la vulnerabilidad en inglés. CERT/CC por su parte también ha publicado su informe de vulnerabilidad, que en este momento ya han copiado dos webs. Suponemos que en breve se irán añadiendo más referencias, entre las que se incluye el CVE-2011-1911, que nos han reservado muy amablemente desde CERT/CC. Iremos añadiendo referencias de otros sitios a medida que vayan apareciendo, si el editor nos lo permite ;)

Como conclusión y tras haber vivido en primera persona un proceso de reporte de una vulnerabilidad, extraemos que, a pesar de ser un tema de interés creciente, se suele dar poca importancia a los fallos de seguridad en las aplicaciones software, lo que hace que el tiempo de resolución de estos problemas sea, a nuestro juicio, demasiado alto, dejando a los usuarios expuestos ante ataques que, de haber encontrado una solución más rápida, no se habrían producido.

Para finalizar, dar las gracias al equipo de CSIRT-cv, sin el que nada de esto habría sido posible: Guillermo, Maite, JoseMi, Alberto, Nelo, José Luis, Xavi y Lourdes, ¡gracias a todos!

Comments

  1. Sois unos cracks, ¡felicidades!

  2. Ahora queda ver si una vez publicado los desarrolladores son mas «agiles».

  3. Gracias a ti Jose por la mención :)

Trackbacks

  1. […] Enlace LD_AddCustomAttr("AdOpt", "1"); LD_AddCustomAttr("Origin", "other"); LD_AddCustomAttr("theme_bg", "0a0a0a"); LD_AddCustomAttr("theme_border", "191919"); LD_AddCustomAttr("theme_text", "cccccc"); LD_AddCustomAttr("theme_link", "666666"); LD_AddCustomAttr("theme_url", "de7c00"); LD_AddCustomAttr("LangId", "19"); LD_AddCustomAttr("Tag", "vulnerabilidades"); LD_AddCustomAttr("Tag", "vulnerabilidades"); LD_AddSlot("LD_ROS_300-WEB"); LD_GetBids(); Compartir con:Correo electrónicoFacebookTwitterLike this:LikeBe the first to like this post. […]