
Laboratório de reprodução local para Apache Tomcat CVE-2025-24813, documentando condições de exploração e verificação assistida por IA da vulnerabilidade.
Apenas para experimentos locais autorizados, compreensão de patches e validação de defesa. Não envie requisições para alvos não autorizados.
Este projeto registra o processo de reprodução do CVE-2025-24813 em uma instância local do Apache Tomcat 9.0.98: usando partial PUT para gravar um arquivo temporário, sob uma configuração com persistência de Session baseada em arquivo habilitada e condições de filtragem de desserialização permissivas, validando o carregamento do arquivo de Session e a cadeia de execução do Payload.
.inject.session no diretório de trabalho, depois confirma que o acesso dispara o carregamento da Session e a execução do Payload; não se pode julgar o sucesso apenas pelo código de status HTTP.409 ou 500, mas a gravação do arquivo e o disparo subsequente ainda precisam ser avaliados por etapas, combinando o conteúdo do arquivo, os logs do servidor e os efeitos colaterais controlados.O comunicado oficial de segurança da Apache lista os pré-requisitos de acionamento, o escopo de impacto (Tomcat 9.0.0-M1 a 9.0.98) e as informações de correção da versão 9.0.99 para a CVE-2025-24813: https://tomcat.apache.org/security-9
java -version)requests127.0.0.1:8080 localscripts/reproduce_local.py # Script de validação local, alvo padrão localhost:8080
evidence/ # Capturas de tela do experimento (renomeadas por etapa)
python3 -m venv .venv
. .venv/bin/activate
python -m pip install requests
python scripts/reproduce_local.py
O alvo no script é fixado no endereço do experimento local, sem lógica de varredura remota. Antes de executar, deve-se confirmar na instância local do Tomcat:
work/Catalina/localhost/ROOT são observáveis.PUT /inject/session com Content-Range, observar se o arquivo temporário é gerado;work/Catalina/localhost/ROOT/.inject.session;JSESSIONID=.inject, observar o carregamento do arquivo de Session;409/500 diretamente como falha ou sucesso da reprodução da vulnerabilidade.Os cabeçalhos HTTP devem usar CRLF verdadeiro (bytes 0d 0a), não envie 0x0d0x0a como texto visível. Em Python, deve-se usar b"\\r\\n" ou deixar o requests construir os cabeçalhos da requisição.
Priorize a atualização para uma versão do Tomcat que inclua a correção e verifique novamente as permissões de escrita do Default Servlet, os cenários de uso de partial PUT e a configuração do filtro de persistência de Session. Após a correção, repita o mesmo conjunto de etapas de validação local, esperando que a cadeia de escrita de arquivos temporários ou a cadeia de carregamento de Session não se concretize mais.
Este repositório não fornece funcionalidades de varredura, persistência ou exploração em massa voltadas a alvos na internet. Todo o conteúdo é restrito ao ambiente de experimento local sob meu controle e a ambientes de teste explicitamente autorizados.