
Prueba de concepto para CVE-2018-1000529: XSS almacenado en el complemento Grails Fields <=2.2.7. Demuestra la vulnerabilidad con una aplicación Grails ejecutable e incluye cronología de divulgación.
NVD CVE-2018-1000529: https://nvd.nist.gov/vuln/detail/CVE-2018-1000529
MITRE CVE-2018-1000529: https://cve.mitre.org/cgi-bin/cvename.cgi?name=2018-1000529
Este repositorio se utilizó para demostrar una prueba de concepto de la vulnerabilidad para la divulgación responsable al equipo de Grails.
La vulnerabilidad XSS está presente en todos los proyectos que utilizan Grails v3.3.5 o inferior, ya que todos incluyen el plugin Grails Fields afectado v2.2.7 o inferior. Se corrigió en el plugin Grails Fields v2.2.8, que se utiliza en Grails v3.3.6.
Se recomienda que todos los proyectos que utilicen Grails v3.3.5 o inferior actualicen al menos a v3.3.6 o definan la versión de la dependencia del plugin Grails Fields en build.gradle como v2.2.8 o superior.
Dado que el plugin Grails Fields se usa ampliamente en Grails Scaffolding, todas las aplicaciones generadas con scaffolding que utilicen Grails v3.3.5 o inferior son potencialmente vulnerables. Aunque Grails tiene buenas contramedidas XSS activadas por defecto, cualquier objeto de dominio que sea mostrado por las etiquetas del plugin Grails Fields y que contenga código HTML o JavaScript no se codifica ni valida y es ejecutado por el navegador.
Clona este proyecto y luego inicia la aplicación localmente ejecutando:
En un símbolo del sistema / PowerShell:
grailsw.bat run-app
En una ventana de terminal:
./grailsw run-app
Cuando la aplicación Grails esté completamente inicializada, mostrará:
Grails application running at http://localhost:8080 in environment: development
myapp.TestControllerXSS.El objeto de dominio Test1 se crea durante la inicialización y está definido en el archivo grails-app/init/myapp/BootStrap.groovy.
La vulnerabilidad no solo está presente cuando el objeto se crea durante BootStrap, sino también cuando se crea en la GUI generada por scaffolding mediante la entrada del usuario.
Esto se puede probar eliminando el objeto Test1 y añadiendo un nuevo objeto Test que contenga el nombre: Test1<script>alert('XSS');</script>
Muchas gracias al equipo de Grails por resolver rápidamente esta vulnerabilidad, incluyendo: