
Preuve de concept pour CVE-2018-1000529 : XSS stockée dans le plugin Grails Fields <=2.2.7. Démontre la vulnérabilité avec une application Grails exécutable et inclut un calendrier de divulgation.
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
Ce dépôt a été utilisé pour démontrer une preuve de concept de la vulnérabilité dans le cadre de la divulgation responsable à l'équipe Grails.
La vulnérabilité XSS est présente dans tous les projets utilisant Grails v3.3.5 et inférieur, car ils incluent tous le plugin Grails Fields affecté v2.2.7 et inférieur. Elle a été corrigée dans le plugin Grails Fields v2.2.8, qui est utilisé dans Grails v3.3.6.
Il est recommandé à tous les projets utilisant Grails v3.3.5 ou inférieur de mettre à niveau vers au moins v3.3.6 ou de définir la version de la dépendance du plugin Grails Fields dans build.gradle comme étant v2.2.8 ou supérieure.
Étant donné que le plugin Grails Fields est largement utilisé dans Grails Scaffolding, toutes les applications scaffoldées utilisant Grails v3.3.5 et inférieur sont potentiellement vulnérables. Même si Grails dispose de bonnes contre-mesures XSS activées par défaut, tout objet domaine affiché par les balises du plugin Grails Fields contenant du code HTML ou JavaScript n'est pas encodé ou validé et est exécuté par le navigateur.
Clonez ce projet puis démarrez l'application localement en exécutant :
Dans une invite de commande / PowerShell :
grailsw.bat run-app
Dans une fenêtre de terminal :
./grailsw run-app
Lorsque l'application Grails est complètement initialisée, elle affichera :
Grails application running at http://localhost:8080 in environment: development
myapp.TestControllerXSS s'ouvrira.L'objet domaine Test1 est créé lors de l'initialisation et est défini dans le fichier grails-app/init/myapp/BootStrap.groovy.
La vulnérabilité n'est pas seulement présente lorsque l'objet est créé pendant BootStrap, mais aussi lorsqu'il est créé dans l'interface utilisateur scaffoldée par une saisie utilisateur.
Cela peut être testé en supprimant l'objet Test1 et en ajoutant un nouvel objet Test contenant le nom : Test1<script>alert('XSS');</script>
Un grand merci à l'équipe Grails pour avoir résolu rapidement cette vulnérabilité, notamment :