Spring4Shell - PoC
CVE - 2022 - 22965
영향을 받는 버전 :
- Spring Framework 버전 5.3.0 ~ 5.3.17, 5.2.0 ~ 5.2.19 및 이전 버전
- Java JDK 9
- Apache Tomcat 버전 10..0.20 미만, 9.0.62 미만, 8.5.78 미만
- 전통적인 WAR로 패키징되어 spring-webmvc 또는 spring-webflux 종속성을 사용하고 독립형 Servlet 컨테이너에 배포된 애플리케이션이 영향을 받습니다.
설명
- 이 문제는 classLoader 조작을 통해 악용될 수 있습니다.
- 요청 파라미터로부터 객체를 채우는 데 사용되는 부적절한 데이터 바인딩(Request Mapping 어노테이션)이 이 취약점을 유발합니다.
- 공격자는 임의의 클래스를 로드하고 애플리케이션에서 실행될 수 있는 임의의 코드를 주입할 수 있습니다.
- 유사한 취약점(CVE-2010-1622)이 이전에 공개되었으며,
class.classLoader 및 class.protectionDomain을 제한하는 패치가 적용되었습니다.
- 그러나 JDK9는
class.module.classLoader를 사용하여 class 객체의 모든 하위 속성에 접근함으로써 해당 제한을 우회하는 새로운 메서드 class.getMethod()를 도입했습니다.
영향
- 이 취약점의 성공적인 악용은 취약한 시스템에서 임의 코드 실행으로 이어질 수 있습니다.
테스트 애플리케이션
docker build . -t spring4shell-poc-app
또는 [gokul2/spring4shell-poc]에서 도커 이미지를 가져옵니다.
docker pull gokul2/spring4shell-poc-app
docker run -p 8080:8080 spring4shell-poc-app