상세 컨텐츠

본문 제목

Spring Java 프레임워크 원격코드실행 취약점(CVE-2022-22965) 주의!

국내외 보안동향

by 알약4 2022. 3. 31. 08:11

본문

 

 

Spring Core Java 프레임워크에서 원격코드실행이 가능한 제로데이 취약점(CVE-2022-22965)이 발견되었습니다. 해당 취약점은 Spring4Shell 취약점이라고도 불립니다.

 

Spring 프레임워크의 JDK9버전(및 그 상위버전)중, 특정 조건을 만족하는 상황에서 원격공격자가 프레임워크의 매개변수 바인딩 기능을 통하여 AccessLogValve객체 및 악성필드값들을 획득할 수 있으며, 이를 통하여 pipeline매커니즘을 트리거하여 임의경로하위에 파일쓰기가 가능하게 됩니다. 


현재까지 확인된 해당 취약점을 유발하기 위한 조건은 다음과 같습니다. 

 

- JDK 버전 9 이상
- 애플리케이션 제공을 위한 Apache Tomcat
- Spring Framework 5.3.0 ~ 5.3.17 및 5.2.0 ~ 5.2.19 이하 버전
- WAR 파일로 빌드된 애플리케이션

 

 

 

영향받는 버전


JDK9 이상 버전을 사용하고, Spring Frameword 혹은 파생된 프레임워크가 존재하는 경우

Spring Framework 5.3.0 ~ 5.3.17 이하버전

Spring Framework 5.2.0 ~ 5.2.19 이하버전

* 버전확인방법
"java-version”명령을 통해 확인 가능

 

패치방법

 

Spring Framework 5.3.18 버전으로 업데이트

Spring Framework 5.2.20 버전으로 업데이트

 

 

임시조치방법

 

1) WAF와 같은 네트워크 보호 장치에서 배포된 서비스의 실제 트래픽 상황에 따라 "class.*", "Class.*", "*.class.*", "*.Class.*"와 같은 문자열에 대한 규칙을 설정합니다. 필터링 규칙을 배포한 후 비즈니스 허용 조건을 테스트 하여 추가 영향을 방지합니다. 

2) 응용 시스템의 프로젝트 패키지 아래에 다음 전역 클래스를 생성하고 이 클래스가 Spring에 의해 로드되었는지 확인합니다.(Controller가 위치한 패키지에 추가하는 것이 좋습니다.) 클래스 추가 후애는 재 컴파일, 패키징 및 기능테스트를 진행해야 합니다. 그 후 프로젝트 재배포가 필요합니다. 

import org.springframework.web.bind.annotation.InitBinder;
@ControllerAdvice
@Order(10000)
public class a{
@InitBinder
public void setAllowedFields(WebDataBinder dataBinder) {
String[] abd = new String[]{"class.*", "Class.*", "*.class.*", "*.Class.*"};
dataBinder.setDisallowedFields(abd);
}
}

 

 

 

 

 

참고 :

https://www.springcloud.io/post/2022-03/spring-0day-vulnerability/#gsc.tab=0
http://cn-sec.com/archives/853339.html
https://securelist.com/spring4shell-cve-2022-22965/106239/

관련글 더보기

댓글 영역