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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
도구/GitHubGitHub/danielegiovanardi2408/cve-2024-36401-geoserver-rce
Vulnerability AnalysisExploitationWeb Application ExploitationCTFPenetration TestingLearning & Education
GitHubdanielegiovanardi2408/cve-2024-36401-geoserver-rce

cve-2024-36401-geoserver-rce

# CVE-2024-36401 재현 연구: GeoServer의 JXPath eval 주입을 통한 인증 없는 RCE JXPath eval 주입을 통한 GeoServer의 인증 없는 RCE(CVE-2024-36401)에 대한 재현 가능한 연구입니다. 기술 보고서, 동작하는 익스플로잇/검증 도구, 그리고 취약한 인스턴스와 패치된 인스턴스에서 해당 결함을 시연하는 Docker 환경이 포함되어 있습니다.

저장소 보기
103개월 전아직 검토되지 않음

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2024-36401 — GeoServer의 인증되지 않은 RCE

CVE CVSS CISA KEV Type License

CVE-2024-36401에 대한 완전하고 재현 가능한 연구 자료입니다. 이 취약점은 지리공간 데이터를 위한 가장 널리 배포된 오픈소스 서버인 GeoServer의 인증되지 않은 원격 코드 실행 결함입니다. 이 버그는 eval 인젝션입니다. OGC 표준의 파라미터를 통해 GeoServer는 공격자가 제어하는 *속성 이름(property name)*을 GeoTools에 전달하며, GeoTools에서는 Apache Commons JXPath가 이를 XPath 표현식으로 평가하여 설계상 리플렉션을 통해 임의의 Java 메서드를 호출할 수 있습니다. 따라서 exec(java.lang.Runtime.getRuntime(),'id')와 같은 인증되지 않은 요청이 호스트에서 명령을 실행하게 됩니다.

이 저장소는 기술 보고서, 동작하는 익스플로잇/검증기, 그리고 취약한 인스턴스에서 RCE를 시연하고 패치된 인스턴스에서는 동일한 익스플로잇이 실패하는 모습을 보여주는 원커맨드 Docker 환경을 포함합니다.

교육용 프로젝트. 대학 강의(Data Privacy and Security, LUISS DASMA)를 위해 제작되었습니다. 모든 것은 로컬의 격리된 컨테이너에서만 실행됩니다 — 책임 있는 사용을 참조하세요.

한눈에 보기

필드값
CVE (GeoServer)CVE-2024-36401
근본 원인 (GeoTools)CVE-2024-36404
유형인증되지 않은 원격 코드 실행
CWECWE-95, Eval Injection
CVSS v3.19.8 Critical (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H)
영향받는 버전GeoServer < 2.25.2 / GeoTools < 31.2 (및 이전 브랜치)
CISA KEV예 (2024년 7월 15일)
연구 대상 버전취약한 2.25.1, 패치된 2.25.2

저장소 구조

root@kitploit:~
.
├── report/
│   ├── report.pdf            # the full technical report (read this first)
│   ├── report.md             # report source (Pandoc/XeLaTeX)
│   └── images/               # figures and screenshots
├── docker/
│   ├── vulnerable/Dockerfile # GeoServer 2.25.1 (vulnerable)
│   └── patched/Dockerfile    # GeoServer 2.25.2 (fixed)
├── docker-compose.yml        # vuln on :8080, patched on :8081
├── exploit/
│   ├── exploit.py            # exploit + vuln/patched verifier (stdlib only)
│   ├── exploit.sh            # curl-based PoC (GET + POST variants)
│   ├── payloads.md           # payload catalogue per OGC endpoint
│   └── output/               # captured proof logs and transcripts
└── run-reproduction.sh       # one command: build + exploit both + collect proofs

빠른 시작

요구 사항: Docker Desktop이 실행 중이고, python3와 curl이 필요합니다.

root@kitploit:~
# Build both containers, run the exploit against each, and collect the proofs
chmod +x run-reproduction.sh
./run-reproduction.sh

또는 단계별로:

root@kitploit:~
docker compose up -d --build       # vuln on :8080, patched on :8081

# Vulnerable (expected: VULNERABLE, ~8s delay)
python3 exploit/exploit.py -t http://localhost:8080/geoserver --label vuln -o exploit/output

# Patched (expected: PATCHED, immediate rejection)
python3 exploit/exploit.py -t http://localhost:8081/geoserver --label patched -o exploit/output

docker compose down                # when finished

익스플로잇 동작 방식

두 개의 독립적인 탐지 방식을 통해 결과를 명확하게 확인할 수 있습니다:

  • 블라인드(시간 기반): java.lang.Thread.sleep(8000)이 XPath를 평가하는 스레드를 차단하여 HTTP 응답이 약 8초 지연됩니다 — 컨테이너 접근 없이 클라이언트에서 측정할 수 있습니다. 이는 공식 수정 테스트에서 사용하는 것과 동일한 카나리아입니다.
  • 파일(명령 실행): exec(java.lang.Runtime.getRuntime(),'touch /tmp/<marker>')가 컨테이너 내부에 파일을 생성하며, docker exec로 확인할 수 있습니다.

취약한 인스턴스에 페이로드를 직접 보내면 ProcessImpl에서 ClassCastException이 반환됩니다 — JVM이 Runtime.exec를 실행한 후 결과 Process 객체를 속성으로 사용하지 못한 것입니다. 이 예외가 바로 실행 증거입니다:

취약한 인스턴스에서 exec 페이로드가 ClassCastException을 반환하는 WFS GetPropertyValue

수정 사항

GeoTools 커밋 e53e5170 (GeoServer 2.25.2, 2.24.4, 2.23.6, 2.22.6에 포함)은 버그의 양쪽 측면에 *심층 방어(defence in depth)*를 적용합니다:

  • 싱크(Sink): JXPathUtils.newSafeContext(...) 헬퍼가 빈 FunctionLibrary를 설치하므로 JXPath는 더 이상 exec/Thread.sleep을 함수로 해석할 수 없습니다 — 문자열은 단순한 속성 이름으로 유지됩니다.
  • 범위(Scope): FeaturePropertyAccessorFactory가 이제 SimpleFeatureType도 확인하므로 단순 피처(simple feature)는 더 이상 취약한 접근자에 도달하지 않습니다.

패치된 인스턴스에서는 동일한 페이로드가 No such attribute: ...를 반환하며 아무것도 실행되지 않습니다.

전체 세부 사항 — 파일/라인 참조가 포함된 영향받는 코드, 익스플로잇, 완화 패치 diff, 그리고 나란히 비교한 재현 결과 — 은 **report/report.pdf**에 있습니다.

책임 있는 사용

이 CVE는 공개되어 있으며, 18개월 이상 전에 패치되었고, CISA KEV(공개적으로 악용된 취약점) 목록에 포함되어 있으며, 공개 PoC(Vulhub, Nuclei, Metasploit)가 존재합니다. 여기의 코드는 **오직 localhost**와 이 저장소의 격리된 연구용 컨테이너만을 대상으로 합니다. 소유하지 않았거나 명시적으로 테스트 권한을 받지 않은 시스템에는 사용하지 마십시오.

라이선스

MIT © 2026 Daniele Giovanardi

작성자

Daniele Giovanardi — LUISS Guido Carli, Data Science and Management(DASMA) 전공. Data Privacy and Security 강의 과제.

도구 다운로드