
CVE-2018-1000529에 대한 개념 증명: Grails Fields 플러그인 <=2.2.7의 저장된 XSS. 실행 가능한 Grails 애플리케이션으로 취약점을 시연하고 공개 타임라인을 포함합니다.
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 팀에 책임 있는 공개를 하기 위해 해당 취약점의 개념 증명(PoC)을 시연하는 데 사용되었습니다.
XSS 취약점은 영향을 받는 Grails Fields 플러그인 v2.2.7 이하를 모두 포함하고 있기 때문에 Grails v3.3.5 이하를 사용하는 모든 프로젝트에 존재합니다. 이 취약점은 Grails v3.3.6에서 사용되는 Grails Fields 플러그인 v2.2.8에서 수정되었습니다.
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.TestController 링크를 클릭하세요.XSS 텍스트가 포함된 JavaScript 경고 대화상자가 열립니다.도메인 객체 Test1은 초기화 중에 생성되며 grails-app/init/myapp/BootStrap.groovy 파일에 정의되어 있습니다.
이 취약점은 객체가 BootStrap 중에 생성될 때뿐만 아니라 스캐폴딩된 GUI에서 사용자 입력으로 생성될 때도 존재합니다.
Test1 객체를 제거하고 Test1<script>alert('XSS');</script>라는 이름을 가진 새 Test 객체를 추가하면 이를 테스트할 수 있습니다.
이 취약점을 신속하게 해결해 주신 Grails 팀에게 크게 감사드립니다. 포함된 분들은 다음과 같습니다: