Notice
Recent Posts
Recent Comments
Link
«   2026/05   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
Tags
more
Archives
Today
Total
관리 메뉴

정뾰안 - 정보보안 블로그

Spring4Shell: Spring Framework 원격 코드 실행 취약점 실습 (CVE-2022-22965) 본문

CVE

Spring4Shell: Spring Framework 원격 코드 실행 취약점 실습 (CVE-2022-22965)

정뾰안 2026. 2. 5. 19:20

CVE-2022-22965 요약

취약점 개요 Spring Framework에서 발생하는 원격 코드 실행(RCE) 취약점
취약점 내용 Spring MVC/WebFlux 환경에서 데이터 바인딩 과정 중 ClassLoader 접근이 가능해지면서 공격자가 조작된 HTTP 요청을 통해 서버 내부 객체에 접근하고 임의의 코드를 실행할 수 있음
영향 인증 없이 원격에서 임의 코드 실행, 웹쉘 업로드 및 서버 장악
대응 방안 Spring Framework 최신 보안 패치 적용 또는 취약 설정 비활성화
CVSS 9.8
공개일 2022년 03월 31일

 

1. CVE-2022-22965 취약점 설명

Spring Framework에서 발생하는 원격 코드 실행(Remote Code Execution, RCE) 취약점이다. Spring MVC 및 Spring WebFlux는 HTTP 요청 파라미터를 Java 객체의 필드에 자동으로 매핑하는 데이터 바인딩(Data Binding) 기능을 제공하는데, 이 과정에서 요청 파라미터에 대한 접근 제어가 불완전하게 이루어진다.

이 취약점은 Spring이 요청 파라미터를 객체에 바인딩하는 과정에서 ClassLoader 및 내부 클래스 메타데이터에 대한 접근을 적절히 차단하지 않아 발생한다. 공격자는 조작된 HTTP 요청 파라미터를 통해 class.module.classLoader 등의 내부 객체에 접근할 수 있으며, 이를 이용해 Tomcat의 로그 설정 또는 파일 출력 경로를 조작함으로써 서버에 임의의 파일을 생성하거나 웹쉘을 업로드할 수 있다.

특히 Java 9 이상 환경에서 Tomcat을 사용하여 애플리케이션을 WAR 형태로 배포한 경우, 공격 성공 가능성이 높아진다. 공격이 성공할 경우 인증 절차 없이도 원격에서 시스템 명령 실행이 가능하며, 서버 권한 탈취, 내부 정보 유출, 추가 공격을 위한 거점 확보 등 심각한 보안 위협으로 이어질 수 있다.

 


2. 실습

테스트 환경 및 공격 실습은 깃허브에 공개된 데이터를 사용하여 진행한다. 테스트 환경을 세팅하기 위해서는 Docker가 먼저 설치되어 있어야 한다. Docker 설치는 본 블로그의 'Ubuntu에 Docker 설치하기 (VMware)' 게시물을 확인하기 바라며, 본 게시물에서는 Docker 설치 과정은 생략하겠다.

 

Docker 설치

 

Ubuntu에 Docker 설치하기 (VMware)

개요VMware에 Ubuntu를 설치하고 그 안에 Docker를 설치하려고 한다. 추가로, Docker 사용 편의를 위해 설치 마지막에 Portainer까지 설치해서 접속 해볼 예정이다. 사용한 버전은 다음과 같다.구분버전비

yeongiee.tistory.com

 


◇ 환경 구성

◎ Docker를 실행한다.

 

◎ 깃허브에서 Spring4Shell 테스트 환경 이미지를 확인하고 URL을 복사한다.

(https://github.com/vulhub/vulhub/tree/master/spring/CVE-2022-22965)

 

vulhub/spring/CVE-2022-22965 at master · vulhub/vulhub

Pre-Built Vulnerable Environments Based on Docker-Compose - vulhub/vulhub

github.com

 

 

◎ 위에서 확인한 Docker 테스트 환경을 다운로드 한다.

curl -O https://raw.githubusercontent.com/vulhub/vulhub/master/spring/CVE-2022-22965/docker-compose.yml

 

 

◎ 다운로드 받은 Docker 파일을 실행한다. 나는 두 번째 실행이라 출력되는 내용이 간단한데, 처음 실행하는 경우에는 출력되는 내용이 많다. 이상한게 아니니 그대로 진행하면 된다.

docker-compose up -d

 

 

◎ Portainer에 접속해서 확인해보면 테스트 서버가 잘 실행된 것을 알 수 있다. docker ps 명령을 통해 CLI에서도 확인 가능하다.

 

 

◎ Host PC에서 브라우저를 통해 접속도 이상없음을 확인했다.

 

 

 

◇ 공격 실습

◎ 앞서 확인한 깃허브에서 공격 패킷을 복사한다.

( https://github.com/vulhub/vulhub/tree/master/spring/CVE-2022-22965 )

이 공격 패킷은 Tomcat AccessLog 설정을 조작하고, 로그 파일을 JSP 웹쉘 형태로 생성하려는 요청이다.

 

BurpSuite를 실행한 후 브라우저를 통해 테스트 서버에 접속하여 패킷을 잡는다.

 

 

복사한 공격 패킷을 이용해서 요청 패킷을 변조한 후 전송하면 200 응답을 확인할 수 있다.

 

 

  이제 브라우저를 통해 테스트 서버에 아래 경로로 접근하면 시스템 명령 결과를 확인할 수 있다.

 ( http://[테스트 서버 IP:PORT]/tomcatwar.jsp?pwd=j&cmd=id  )