← voltar
CVE-2025-24813criticalsob ataqueCWE-44CWE-502

Apache Tomcat: Potential RCE and/or information disclosure and/or information corruption with partial PUT

100Vexday Risk Score

Corrija agora. Ela está sob exploração confirmada pelo CISA e tem exploit funcional público.

ssvc Actcvss 10epss 100%
da publicação à arma0 dias
Publicada no NVD10 de mar.
1ª PoC27 de mai.
metasploit10 de mar.
CISA KEV+22d
probabilidade de exploração
100%top 1% das CVEs
exploração observada
simCISA + VulnCheck
94 exploit(s) público(s)
Ação exigida pela CISAprazo federal: 2025-04-22

Apply mitigations per vendor instructions, follow applicable BOD 22-01 guidance for cloud services, or discontinue use of the product if mitigations are unavailable.

Resumo

Falha de path equivalence (CWE-44) no Default Servlet do Apache Tomcat que, combinada com suporte a PUT parcial, permite escrever, ler ou corromper arquivos fora do diretório de upload pretendido. O CVSS 10.0 reflete o cenário mais grave (RCE via deserialização), mas esse cenário depende de uma cadeia de pré-condições não padrão — na maioria das instalações reais o impacto prático é nulo ou limitado a disclosure/corrupção de arquivos, não execução de código.

Detalhamento técnico

A falha está no tratamento de nomes de arquivo com ponto interno ('file.Name') pelo Default Servlet do Tomcat quando o suporte a escrita (PUT) está habilitado. Um ponto dentro do nome do recurso faz o resolvedor de caminhos internos do Tomcat tratar dois paths como equivalentes quando não deveriam ser — classificado como CWE-44 (Path Equivalence). Isso permite que um PUT direcionado a um caminho 'público' de upload seja resolvido, na prática, para um caminho diferente e sensível, incluindo áreas usadas internamente pelo servidor, como o diretório de persistência de sessões em disco.

O vetor fica mais perigoso porque o suporte a PUT parcial (upload via cabeçalho Content-Range, para retomar uploads grandes) vem habilitado por padrão sempre que o Default Servlet tem escrita ativada. Isso dá ao atacante controle fino sobre o conteúdo final do arquivo escrito, byte a byte, o que é o que possibilita tanto a injeção de conteúdo malicioso em arquivo legítimo quanto a criação de um payload serializado Java completo dentro de um arquivo de sessão.

O caminho para RCE soma CWE-502 (Deserialization of Untrusted Data): se a aplicação usa persistência de sessão baseada em arquivo do Tomcat (FileStore/PersistentManager) com o local de armazenamento padrão, e tem no classpath alguma biblioteca explorável por gadget chain de deserialização (padrão clássico ysoserial, ex. Commons Collections), o atacante escreve um objeto serializado malicioso como se fosse um arquivo de sessão. Quando o Tomcat carrega essa 'sessão' (por exemplo, numa requisição GET normal que force a leitura do ID de sessão), ele desserializa o conteúdo e executa o gadget chain.

O advisory oficial (Mark Thomas, lista oss-security/dev@tomcat) separa explicitamente as duas classes de impacto e suas pré-condições — isso não é uma falha de RCE trivial e direta, é uma cadeia de configurações que precisa estar simultaneamente presente.

Como é explorada

Para o cenário de disclosure/corrupção de arquivos: o Default Servlet precisa ter escrita habilitada (readonly=false — não é o padrão), suporte a PUT parcial (padrão quando escrita está ativa), uma URL de upload 'sensível' que seja subdiretório de uma URL de upload 'pública', e o atacante precisa saber o nome exato dos arquivos sensíveis sendo manipulados. Sem essas condições simultâneas, não há exploração possível — é sem autenticação apenas se o endpoint de PUT já for público, o que por si só já é uma configuração de risco.

Para RCE, soma-se: a aplicação usar persistência de sessão em arquivo com localização padrão de armazenamento, e ter no classpath uma biblioteca vulnerável a deserialização. A PoC pública (absholi7ly/GitHub) demonstra exatamente esse fluxo: envia um PUT parcial contendo um payload serializado (gerado com ysoserial) para um caminho que, por path equivalence, cai no diretório de sessões (ex. via .../uploads/../sessions/), depois força uma requisição (ex. GET a um recurso que carregue aquela sessão) para acionar a deserialização. O próprio autor da PoC chama o cenário de 'teórico' porque depende dessa combinação de fatores — não é um clique único contra qualquer Tomcat exposto.

A CVE está no catálogo KEV da CISA (adicionada em 2025-04-01, prazo 2025-04-22), confirmando exploração ativa observada, e existem módulo Metasploit e template Nuclei públicos, o que reduz drasticamente a barreira técnica para quem já tem um alvo com a configuração vulnerável. O EPSS de ~0.999 indica volume alto de tentativas de exploração/varredura na internet — mas isso mede tentativas, não necessariamente sucesso, dado que a maioria dos Tomcats expostos não tem escrita habilitada no Default Servlet por padrão.

Versões

Afetadas
Apache Tomcat 11.0.0-M1 até 11.0.2; 10.1.0-M1 até 10.1.34; 9.0.0.M1 até 9.0.98. Versões EOL 8.5.0 até 8.5.100 são confirmadamente afetadas; outras versões EOL mais antigas podem também estar vulneráveis (não verificado pelo fornecedor).
Corrigidas em
11.0.3, 10.1.35 e 9.0.98, conforme recomendação oficial da Apache (nota: o advisory lista '9.0.98' tanto como limite superior da faixa afetada quanto como versão corrigida — checar o changelog exato da série 9.0.x ao aplicar patch). Debian LTS publicou backport para tomcat9 na versão 9.0.43-2~deb11u12 (Debian 11 bullseye). Não há versão corrigida para o branch EOL 8.5.x.

Como se proteger

A correção do fornecedor é atualizar para Apache Tomcat 11.0.3, 10.1.35 ou 9.0.98 (conforme publicado pela Apache), que corrigem o tratamento de path equivalence e a interação com PUT parcial. As versões EOL da série 8.5.x (8.5.0 até 8.5.100, confirmadamente afetadas) não recebem patch oficial nesse branch — quem ainda roda 8.5.x precisa migrar para uma versão suportada; distribuições com suporte estendido, como o backport feito pela Debian LTS para tomcat9 (9.0.43-2~deb11u12 no Debian 11), publicam correções próprias fora do calendário da Apache.

Se a atualização não for possível de imediato, o controle compensatório real é garantir que o Default Servlet tenha escrita desabilitada (readonly=true, que já é o padrão de fábrica) — isso por si só elimina toda a cadeia de exploração, já que sem PUT habilitado não há superfície de ataque. Onde a escrita for necessária por design da aplicação, evitar que o path de upload sensível seja subdiretório do path de upload público, e evitar persistência de sessão baseada em arquivo com o storage location padrão reduzem a exposição, mas são paliativos parciais — não fecham completamente a falha de path equivalence subjacente, apenas quebram elos específicos da cadeia até RCE.

O que não funciona como mitigação: assumir que 'meu Tomcat está seguro porque não uso upload de arquivos' sem verificar explicitamente a configuração readonly do Default Servlet em web.xml — muitas aplicações legadas habilitam escrita para funcionalidades específicas e esquecem o detalhe. WAF genérico tem eficácia limitada aqui porque o payload de exploração é um PUT com Content-Range legítimo do ponto de vista de protocolo HTTP; regras precisam ser específicas para o padrão de path equivalence com ponto interno.

Pesquisado e redigido com IA a partir do advisory do fornecedor e de análises públicas, com as fontes acima. Confira sempre a versão corrigida no advisory oficial antes de agir.
Path Equivalence: 'file.Name' (Internal Dot) leading to Remote Code Execution and/or Information disclosure and/or malicious content added to uploaded files via write enabled Default Servlet in Apache Tomcat. This issue affects Apache Tomcat: from 11.0.0-M1 through 11.0.2, from 10.1.0-M1 through 10.1.34, from 9.0.0.M1 through 9.0.98. The following versions were EOL at the time the CVE was created but are known to be affected: 8.5.0 though 8.5.100. Other, older, EOL versions may also be affected. If all of the following were true, a malicious user was able to view security sensitive files and/or inject content into those files: - writes enabled for the default servlet (disabled by default) - support for partial PUT (enabled by default) - a target URL for security sensitive uploads that was a sub-directory of a target URL for public uploads - attacker knowledge of the names of security sensitive files being uploaded - the security sensitive files also being uploaded via partial PUT If all of the following were true, a malicious user was able to perform remote code execution: - writes enabled for the default servlet (disabled by default) - support for partial PUT (enabled by default) - application was using Tomcat's file based session persistence with the default storage location - application included a library that may be leveraged in a deserialization attack Users are recommended to upgrade to version 11.0.3, 10.1.35 or 9.0.99, which fixes the issue.
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H
PoCs públicas encontradas94
exploitdbwww.exploit-db.com/exploits/52134não verificadogithubgithub.com/absholi7ly/POC-CVE-2025-24813195githubgithub.com/iSee857/CVE-2025-24813-PoC98githubgithub.com/drcrypterdotru/Apache-GOExploiter20githubgithub.com/mbanyamer/Apache-Tomcat---Remote-Code-Execution-via-Session-Deserialization-CVE-2025-24813-18githubgithub.com/charis3306/CVE-2025-2481316githubgithub.com/qzy0x/cve-2025-24813_poc11githubgithub.com/Franconyu/Poc_for_CVE-2025-248139githubgithub.com/x00byte/PutScanner7githubgithub.com/u238/Tomcat-CVE_2025_248137githubgithub.com/msadeghkarimi/CVE-2025-24813-Exploit6githubgithub.com/Mattb709/CVE-2025-24813-Scanner5githubgithub.com/Erosion2020/CVE-2025-24813-vulhub5githubgithub.com/Shivshantp/CVE-2025-248135githubgithub.com/Alaatk/CVE-2025-24813-POC4githubgithub.com/cchopin/CVE-Arsenal-Lab4githubgithub.com/beyond-devsecops/CVE-2025-248134githubgithub.com/AsaL1n/CVE-2025-248134githubgithub.com/imbas007/CVE-2025-24813-apache-tomcat3githubgithub.com/N0c1or/CVE-2025-24813_POC3githubgithub.com/Mattb709/CVE-2025-24813-PoC-Apache-Tomcat-RCE3githubgithub.com/AlperenY-cs/CVE-2025-248133githubgithub.com/pirenga/CVE-2025-248132githubgithub.com/La3B0z/CVE-2025-24813-POC2githubgithub.com/yuzuki-ayanami/CVE-2025-248131githubgithub.com/fatkz/CVE-2025-248131githubgithub.com/f8l124/CVE-2025-24813-POC1githubgithub.com/MuhammadWaseem29/CVE-2025-248131githubgithub.com/manjula-aw/CVE-2025-248131githubgithub.com/tonyarris/CVE-2025-24813-PoC1githubgithub.com/EQSTLab/CVE-2025-248131githubgithub.com/seahcy/CVE-2025-248131githubgithub.com/cyglegit/CVE-2025-248131githubgithub.com/gregk4sec/CVE-2025-248131githubgithub.com/GadaLuBau1337/CVE-2025-248131githubgithub.com/ftz7/PoC-CVE-2025-248131githubgithub.com/Makavellik/POC-CVE-2025-24813-Apache-Tomcat-Remote-Code-Execution0githubgithub.com/michael-david-fry/Apache-Tomcat-Vulnerability-POC-CVE-2025-248130githubgithub.com/ps-interactive/lab-cve-2025-248130githubgithub.com/n0n-zer0/Spring-Boot-Tomcat-CVE-2025-248130githubgithub.com/B1gN0Se/Tomcat-CVE-2025-248130githubgithub.com/Heimd411/CVE-2025-24813-noPoC0githubgithub.com/horsehacks/CVE-2025-24813-checker0githubgithub.com/hakankarabacak/CVE-2025-248130githubgithub.com/ThHardvester/CVE-2025-248130githubgithub.com/x1ongsec/CVE-2025-248130githubgithub.com/yaleman/cve-2025-24813-poc0githubgithub.com/GongWook/CVE-2025-248130githubgithub.com/sentilaso1/CVE-2025-24813-Apache-Tomcat-RCE-PoC0githubgithub.com/CEAlbez/CVE-2025-24813-PoC0githubgithub.com/Arthurabriel/POC-CVE-2025-248130githubgithub.com/gunyakit/CVE-2025-24813-PoC-exploit0githubgithub.com/suil12/CVE-2025-24813_presentation0githubgithub.com/JTMH37/Apache-Tomcat-CVE-2025-24813-Lab0githubgithub.com/Dhananjayasj/CVE-2025-24813-Apache-Tomcat-Partial-PUT-Deserialization-RCE-0githubgithub.com/Loufa0/CVE-2025-248130cve_referencegithub.com/absholi7ly/POC-CVE-2025-24813/blob/main/README.mdnão verificadovulncheckvulncheck.com/xdb/d2328688bc63não verificadovulncheckvulncheck.com/xdb/438c59eda6a1não verificadovulncheckvulncheck.com/xdb/8229a5ce661enão verificadovulncheckvulncheck.com/xdb/f95cb1d5b6afnão verificadovulncheckvulncheck.com/xdb/930571969654não verificadovulncheckvulncheck.com/xdb/2e3eea69a36dnão verificadovulncheckvulncheck.com/xdb/2e8121be4e6cnão verificadovulncheckvulncheck.com/xdb/66bfb6dc4529não verificadovulncheckvulncheck.com/xdb/ecda97c5692cnão verificadovulncheckvulncheck.com/xdb/62446f11b151não verificadovulncheckvulncheck.com/xdb/9e52fea0ddb5não verificadovulncheckvulncheck.com/xdb/5ff5b290fccdnão verificadovulncheckvulncheck.com/xdb/41039969d4bbnão verificadovulncheckvulncheck.com/xdb/e48dddb86729não verificadovulncheckvulncheck.com/xdb/c63f2f746a4cnão verificadovulncheckvulncheck.com/xdb/40412144ed11não verificadovulncheckvulncheck.com/xdb/a23cfd526be6não verificadovulncheckvulncheck.com/xdb/62ff6f95bed3não verificadovulncheckvulncheck.com/xdb/2ed807c5c32cnão verificadovulncheckvulncheck.com/xdb/31ac53ba66b2não verificadovulncheckvulncheck.com/xdb/bec48551a957não verificadovulncheckvulncheck.com/xdb/02795c240160não verificadovulncheckvulncheck.com/xdb/3aff79b6f0d4não verificadovulncheckvulncheck.com/xdb/25d3559a5ca1não verificadovulncheckvulncheck.com/xdb/ff7c931b911dnão verificadovulncheckvulncheck.com/xdb/1f1e1835349fnão verificadovulncheckvulncheck.com/xdb/181640a7c0aenão verificadovulncheckvulncheck.com/xdb/dbf0b83e164bnão verificadovulncheckvulncheck.com/xdb/ae2ed7271091não verificadovulncheckvulncheck.com/xdb/165631271f8bnão verificadovulncheckvulncheck.com/xdb/0be326ee4646não verificadovulncheckvulncheck.com/xdb/6ca8e745ffa0não verificadovulncheckvulncheck.com/xdb/bbaae546f620não verificadovulncheckvulncheck.com/xdb/942ba42c027anão verificadovulncheckvulncheck.com/xdb/d7e6efb852d8não verificadovulncheckvulncheck.com/xdb/98e4bf40a0f3não verificadovulncheckvulncheck.com/xdb/afb2366289d2não verificado
⚠ Recursos públicos, para você avaliar a exposição de sistemas que controla ou está autorizado a testar. Teste apenas com autorização.