← back
CVE-2025-24813criticalunder attackCWE-44CWE-502

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

100Vexday Risk Score

Patch now. It under exploitation confirmed by CISA and has a working public exploit.

ssvc Actcvss 10epss 100%
from disclosure to weapon0 days
Published on NVDMar 10
1st PoCMay 27
metasploitMar 10
CISA KEV+22d
exploitation probability
100%top 1% of all CVEs
observed exploitation
yesCISA + VulnCheck
94 public exploit(s)
Action required by CISAfederal deadline: 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.

Summary

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.

Technical detail

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.

How it’s exploited

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.

Versions

Affected
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).
Fixed in
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.

How to protect

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.

Researched and written with AI from the vendor advisory and public analysis, with the sources above. Always confirm the fixed version in the official advisory before acting.
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
public PoCs found94
exploitdbwww.exploit-db.com/exploits/52134unverifiedgithubgithub.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.mdunverifiedvulncheckvulncheck.com/xdb/d2328688bc63unverifiedvulncheckvulncheck.com/xdb/438c59eda6a1unverifiedvulncheckvulncheck.com/xdb/8229a5ce661eunverifiedvulncheckvulncheck.com/xdb/f95cb1d5b6afunverifiedvulncheckvulncheck.com/xdb/930571969654unverifiedvulncheckvulncheck.com/xdb/2e3eea69a36dunverifiedvulncheckvulncheck.com/xdb/2e8121be4e6cunverifiedvulncheckvulncheck.com/xdb/66bfb6dc4529unverifiedvulncheckvulncheck.com/xdb/ecda97c5692cunverifiedvulncheckvulncheck.com/xdb/62446f11b151unverifiedvulncheckvulncheck.com/xdb/9e52fea0ddb5unverifiedvulncheckvulncheck.com/xdb/5ff5b290fccdunverifiedvulncheckvulncheck.com/xdb/41039969d4bbunverifiedvulncheckvulncheck.com/xdb/e48dddb86729unverifiedvulncheckvulncheck.com/xdb/c63f2f746a4cunverifiedvulncheckvulncheck.com/xdb/40412144ed11unverifiedvulncheckvulncheck.com/xdb/a23cfd526be6unverifiedvulncheckvulncheck.com/xdb/62ff6f95bed3unverifiedvulncheckvulncheck.com/xdb/2ed807c5c32cunverifiedvulncheckvulncheck.com/xdb/31ac53ba66b2unverifiedvulncheckvulncheck.com/xdb/bec48551a957unverifiedvulncheckvulncheck.com/xdb/02795c240160unverifiedvulncheckvulncheck.com/xdb/3aff79b6f0d4unverifiedvulncheckvulncheck.com/xdb/25d3559a5ca1unverifiedvulncheckvulncheck.com/xdb/ff7c931b911dunverifiedvulncheckvulncheck.com/xdb/1f1e1835349funverifiedvulncheckvulncheck.com/xdb/181640a7c0aeunverifiedvulncheckvulncheck.com/xdb/dbf0b83e164bunverifiedvulncheckvulncheck.com/xdb/ae2ed7271091unverifiedvulncheckvulncheck.com/xdb/165631271f8bunverifiedvulncheckvulncheck.com/xdb/0be326ee4646unverifiedvulncheckvulncheck.com/xdb/6ca8e745ffa0unverifiedvulncheckvulncheck.com/xdb/bbaae546f620unverifiedvulncheckvulncheck.com/xdb/942ba42c027aunverifiedvulncheckvulncheck.com/xdb/d7e6efb852d8unverifiedvulncheckvulncheck.com/xdb/98e4bf40a0f3unverifiedvulncheckvulncheck.com/xdb/afb2366289d2unverified
⚠ Public resources, to assess the exposure of systems you control or are authorized to test. Test only with authorization.