
Proof-of-concept per CVE-2018-1000529: XSS memorizzato nel plugin Grails Fields <=2.2.7. Dimostra la vulnerabilità con un'applicazione Grails eseguibile e include la timeline di divulgazione.
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
Questo repository è stato utilizzato per dimostrare una proof of concept della vulnerabilità per la divulgazione responsabile al team di Grails.
La vulnerabilità XSS è presente in tutti i progetti che utilizzano Grails v3.3.5 e versioni precedenti, poiché tutti includono il plugin Grails Fields v2.2.7 e versioni precedenti affetto dal problema. È stata corretta nel plugin Grails Fields v2.2.8, che viene utilizzato in Grails v3.3.6.
Si consiglia a tutti i progetti che utilizzano Grails v3.3.5 o versioni precedenti di aggiornare almeno alla v3.3.6 o di impostare la versione della dipendenza del plugin Grails Fields in build.gradle a v2.2.8 o superiore.
Poiché il plugin Grails Fields è ampiamente utilizzato nello Scaffolding di Grails, tutte le applicazioni generate con scaffolding che utilizzano Grails v3.3.5 e versioni precedenti sono potenzialmente vulnerabili. Anche se Grails fornisce buone contromisure XSS per impostazione predefinita, qualsiasi oggetto di dominio visualizzato dai tag del plugin Grails Fields contenente codice HTML o JavaScript non viene codificato o validato e viene eseguito dal browser.
Clona questo progetto e poi avvia l'applicazione localmente eseguendo:
In un prompt dei comandi / PowerShell:
grailsw.bat run-app
In una finestra di terminale:
./grailsw run-app
Quando l'applicazione Grails è completamente inizializzata, verrà visualizzato:
Grails application running at http://localhost:8080 in environment: development
myapp.TestControllerXSS.L'oggetto di dominio Test1 viene creato durante l'inizializzazione ed è definito nel file grails-app/init/myapp/BootStrap.groovy.
La vulnerabilità non è presente solo quando l'oggetto viene creato durante il BootStrap, ma anche quando viene creato nella GUI generata tramite input dell'utente.
Questo può essere testato rimuovendo l'oggetto Test1 e aggiungendo un nuovo oggetto Test con il nome: Test1<script>alert('XSS');</script>
Un ringraziamento particolare al team di Grails per aver risolto rapidamente questa vulnerabilità, tra cui: