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.
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 |
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:
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?
El hardening es fundamental aplicarlo en cada librería, sistema de base y servicio que se incorpora.
Publicar un comentario