
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
此仓库用于展示该漏洞的概念验证,以便向 Grails 团队进行负责任披露。
该 XSS 漏洞存在于所有使用 Grails v3.3.5 及更低版本的项目中,因为这些项目都包含了受影响的 Grails Fields 插件 v2.2.7 及更低版本。 该漏洞已在 Grails Fields 插件 v2.2.8 中修复,该插件用于 Grails v3.3.6。
建议所有使用 Grails v3.3.5 或更低版本的项目升级到至少 v3.3.6,或在 build.gradle 中将 Grails Fields 插件依赖的版本定义为 v2.2.8 或更高版本。
由于 Grails Fields 插件广泛用于 Grails Scaffolding,所有使用 Grails v3.3.5 及更低版本的脚手架应用程序都可能存在漏洞。 尽管 Grails 默认提供了良好的 XSS 防护措施,但任何通过 Grails Fields 插件标签显示且包含 HTML 或 JavaScript 代码的域对象,都不会被编码或验证,从而会被浏览器执行。
克隆本项目,然后通过以下命令在本地启动应用程序:
在命令提示符 / PowerShell 中:
grailsw.bat run-app
在终端窗口中:
./grailsw run-app
当 Grails 应用程序完全初始化后,会显示:
Grails application running at http://localhost:8080 in environment: development
myapp.TestControllerXSS 的 JavaScript 警告对话框。域对象 Test1 在初始化期间创建,并在 grails-app/init/myapp/BootStrap.groovy 文件中定义。
该漏洞不仅存在于 BootStrap 创建对象时,也存在于通过脚手架 GUI 的用户输入创建对象时。
可以通过删除 Test1 对象并添加一个名为 Test1<script>alert('XSS');</script> 的新 Test 对象来进行测试。
非常感谢 Grails 团队迅速修复此漏洞,包括: