
Proof-of-concept für CVE-2018-1000529: gespeichertes XSS im Grails Fields Plugin <=2.2.7. Zeigt die Schwachstelle mit einer ausführbaren Grails-Anwendung und enthält einen Offenlegungszeitplan.
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
Dieses Repository wurde verwendet, um einen Proof of Concept der Schwachstelle für die verantwortungsvolle Offenlegung gegenüber dem Grails-Team zu demonstrieren.
Die XSS-Schwachstelle ist in allen Projekten vorhanden, die Grails v3.3.5 und niedriger verwenden, da sie alle das betroffene Grails Fields Plugin v2.2.7 und niedriger enthalten. Sie wurde im Grails Fields Plugin v2.2.8 behoben, das in Grails v3.3.6 verwendet wird.
Allen Projekten, die Grails v3.3.5 oder niedriger verwenden, wird empfohlen, auf mindestens v3.3.6 zu aktualisieren oder die Version der Grails Fields Plugin-Abhängigkeit in build.gradle auf v2.2.8 oder höher festzulegen.
Da das Grails Fields Plugin häufig in Grails Scaffolding verwendet wird, sind alle mit Grails v3.3.5 und niedriger erstellten Anwendungen potenziell anfällig. Obwohl Grails standardmäßig gute XSS-Gegenmaßnahmen implementiert hat, werden alle Domänenobjekte, die von Tags des Grails Fields Plugins angezeigt werden und HTML- oder JavaScript-Code enthalten, nicht codiert oder validiert und vom Browser ausgeführt.
Klonen Sie dieses Projekt und starten Sie dann die Anwendung lokal mit dem Befehl:
In einer Eingabeaufforderung / PowerShell:
grailsw.bat run-app
In einem Terminal-Fenster:
./grailsw run-app
Wenn die Grails-Anwendung vollständig initialisiert ist, wird Folgendes angezeigt:
Grails application running at http://localhost:8080 in environment: development
myapp.TestControllerXSS geöffnet.Das Domänenobjekt Test1 wird während der Initialisierung erstellt und ist in der Datei grails-app/init/myapp/BootStrap.groovy definiert.
Die Schwachstelle ist nicht nur vorhanden, wenn das Objekt während des BootStrap erstellt wird, sondern auch, wenn es in der generierten GUI durch Benutzereingabe erstellt wird.
Dies kann getestet werden, indem das Test1-Objekt entfernt und ein neues Test-Objekt mit dem Namen Test1<script>alert('XSS');</script> hinzugefügt wird.
Vielen Dank an das Grails-Team für die schnelle Behebung dieser Schwachstelle, einschließlich: