viernes, noviembre 21, 2014

JQuery Validation: Un bug XSS en la demo de validación

JQuery Validation es un plugin que permite validar el contenido de los formularios. Para que la gente aprenda a utilizarlos, las librerías se distribuyen con un conjunto de pequeñas pruebas de concepto que enseñan a utilizar las diferentes opciones de validación. Pues bien, si no parcheas JQuery Validation o eliminas esas demos, estás poniendo en riesgo la seguridad de tu plataforma, ya que tiene un XSS reflejado en una de ellas, tal y como se puede ver en la este artículo.

Figura 1: Elimina el XSS de la demo de JQuery Validation

Las demos de las librerías se encuentran dentro de una carpeta llamada demo de la ruta de instalación de JQuery Validation. Es fácil localizar sitios en Internet con este componente, ya que la ruta de la web suele ser jquery-validation más la versión concreta de las librerías.

Figura 2: Demos en una instalación de JQuery Validation

Dentro de esas demos, hay unas para validación por AJAX de los valores del captcha que puedes encontrar dentro de la ruta %jquery-validation-path%/demo/captcha/index.php. Al invocar esa URL en un sitio con las demos del componetne activadas aparecerá este pequeño formulario.

Figura 3: Demo de validación de Captcha por AJAX en JQuery Validation

Pues bien, el investigador Sijmen Ruwhof ha publicado que en ese fichero exacto hay un bug de XSS reflejado que hace años que no querían arreglar en el proyecto, pero por suerte, después del ruido generado con su publicación han arreglado. El bug se encuentra en la generación de un enlace que utiliza la ruta que del fichero.

Figura 4: Código vulnerable en la demo

Un atacante puede inyectar algo tan sencillo como cerrar el hipervínculo y abrir una sección de código Script para lanzar cualquier código.

Figura 5: En amarillo la inyección necesaria en el exploit

Cuando se crea el enlace en la respuesta se ejecuta el Script al quedar el código como sigue.

Figura 6: Código resultante con ejecución de script
Al final, el tener los ficheros de demo publicados en una web en producción es el fallo de seguridad en sí, y deberías simplemente quitarlos. Si no lo quitas, puedes actualizar el componente que el desarrollador del plugin JQuery Validation ya lo ha arreglado. Él no fue quién introdujo el bug, sino el creador de la demostración pero si tienes este fichero sin parchear alguien podría hacer un ataque de hijacking para robar las cookies de la sesión de usuario.

Figura 7: Explotación de bug de XSS Reflejado en demo de JQuery Validation

Por supuesto, si las cookies de sesión de tu web están bien definidas con valores HTTP-Only, Secure, con la zona de aplicación restringida a los directorios concretos y no para todo el sitio, si tienes correctamente forzado el uso de filtros Anti-XSS en las variables de X-XSS-Protection y/o has configurado unas Content Security Policies para evitar la inserción en medio del código de comandos Script, entonces el impacto sería menor. En cualquier caso, tengas el framework que tengas, si usas JQuery Validation mi recomendación es que actualices a la última versión y luego quites todas las demos.

Saludos Malignos!

2 comentarios:

  1. Hola,
    Creo que las imágenes están mal colocadas. ¿No sería la "figura 6" la que contiene el error del código, la "figura 5" la URL que hay que introducir, y la "figura 4" el HTML resultante de aplicar esa URL?

    ResponderEliminar
  2. El hardening es fundamental aplicarlo en cada librería, sistema de base y servicio que se incorpora.

    ResponderEliminar