
CVE-2025-55752 CVE-2025-55754 CVE-2025-48988 CVE-2025-52520 CVE-2025-53506 CVE-2025-61795 CVE-2025-66614:Tomcat 8.5 está EOL, versão final 8.5.100. A Apache declarou, item por item, que "8.5 também é afetado" em 14 CVEs de 2025, das quais 10 não são encontradas no NVD ao consultar 8.5.100. Jar único offline, lê conf/ para determinar exatamente quais delas afetam você.
Ainda está rodando Tomcat 8.5? Esta ferramenta mostra quais CVEs de 2025 realmente afetam você — porque essa pergunta não tem resposta completa na página oficial, no NVD ou nos scanners.
Jar único sem dependências, roda offline, sem internet, sem enviar nada.
O Tomcat 8.5 atingiu EOL em 2024-03-31, com a versão final 8.5.100 (lançada em 2024-03-19). Depois disso, a Apache continuou declarando nos registros de CVE, item por item, que "8.5 também é afetado", e o lugar onde isso é dito é o que menos gente consulta.
A página oficial de segurança 9.x da Apache lista 17 CVE-2025-*, dos quais 14 dizem literalmente:
The following versions were EOL at the time the CVE was created but are known to be affected: 8.5.x though 8.5.100
(texto original — em 8 das 14,
throughestá escrito comothough; o limite inferior na maioria é8.5.0, mas também há8.5.6/8.5.44/ / )
8.5.608.5.90Essas 14, o que você vê em cada um dos três lugares é:
| Onde você vai consultar | O que você vê |
|---|---|
Página oficial de segurança 8.5 da Apache (security-8.html) | Zero entradas de 2025 — a página para em 2024-02-19 Fixed in Apache Tomcat 8.5.99 |
| NVD | Consultando 8.5.100 pelo cpe, dessas 14 só retorna 4; nas outras 10, a configuração cpe nem inclui o 8.5 |
| GitHub advisory | As 14 estão lá, mas do lado do 8.5 o first_patched_version é null em todas |
O único lugar que documenta isso por completo é o registro original que a Apache submeteu como CNA no CVE.org — ou seja, a camada que menos gente vai fuçar. O que esta ferramenta faz é confrontar a informação dessa camada com a versão realmente instalada na sua máquina.
🔴 Esta ferramenta expõe diferenças entre fontes de dados, não o comportamento de um produto. "Seu scanner vai reportar essas 10 ou não" depende de qual base ele lê e como ele mescla — isso não foi testado na prática, então não está escrito aqui.
Reportar só pelo número da versão faz com que 12 itens que "só valem com configuração específica" também pareçam "você está afetado" — isso é mandar você fazer algo desnecessário.
Por isso, quando um diretório de instalação é informado, a ferramenta lê todos os XMLs em conf/ (incluindo conf/Catalina/<host>/),
remove os blocos de comentário e então procura os marcadores das condições de disparo. Remover comentários não é opcional:
no server.xml oficial, a busca por texto de UpgradeProtocol encontra 1 ocorrência; sem comentários, são 0 — o trecho inteiro está comentado.
Rodando numa instalação limpa do 8.5.100 oficial, o resultado é:
2 afetados por padrão · 0 confirmados por configuração · 11 exigem confirmação manual · 1 não aplicável
10 deles não têm entrada para 8.5 na configuração cpe do NVD
Ativando HTTP/2, RewriteValve e CGIServlet na mesma configuração, "confirmados por configuração" passa para 5.
java -jar tomcat85-check.jar <diretório de instalação | jar | war> ...
--all lista também os itens cuja "versão está fora do intervalo"
--utf8 use se houver caracteres chineses ilegíveis no console do Windows
# Tomcat descompactado — passe o nível que contém conf/, reduz bastante o trabalho manual
java -jar tomcat85-check.jar /opt/tomcat
# Dá para escanear com apenas um jar / war
java -jar tomcat85-check.jar /opt/app/lib/catalina.jar
Os jars em lib/ não têm nenhum número de versão no nome do arquivo (é catalina.jar, não catalina-8.5.100.jar).
Ferramentas que extraem a versão só pelo nome do arquivo não reconhecem nada nesse tipo de implantação —
e "não escaneou nada" parece exatamente igual a "você está seguro".
Esta ferramenta obtém a versão nesta ordem:
server.number em catalina.jar!/org/apache/catalina/util/ServerInfo.properties
— é o que o próprio version.sh do Tomcat reportaImplementation-Version no META-INF/MANIFEST.MFQuando as duas fontes divergem (ServerInfo.properties pode ser sobrescrito, algo comum para esconder a versão),
as duas são reportadas, sem escolher por você.
Um: dá para confirmar que está ativo, não dá para confirmar que está inativo.
Quando o relatório diz "não encontrado", significa "não encontrado nos arquivos que examinei", não "você não ativou".
A configuração pode estar em lugares que a ferramenta não enxerga: WEB-INF/web.xml dentro do war, CATALINA_BASE externo, argumentos de inicialização.
Por isso não existe a categoria "não afetado" — tudo o que não é encontrado cai em exige confirmação manual.
Dois: encontrar o marcador também não significa que é exatamente aquilo.
Por exemplo, no server.xml padrão oficial o AprLifecycleListener já vem ativado,
mas ele apenas tenta carregar a biblioteca nativa — se a biblioteca não existe, o conector APR não é ativado.
Então é um "marcador fraco": quando há correspondência, reporta-se apenas "possível", não "confirmado".
Três: não existe versão 8.5 para a qual atualizar.
O first_patched_version das 14 é null do lado do 8.5.
Não é "ainda não corrigido", é "não será corrigido para o 8.5". A única saída é mudar de linha (9.0 / 10.1 / 11.0).
Esta ferramenta responde "do que você está afetado", sem fingir que pode responder "para qual 8.5 atualizar".
Tomando o CVE-2025-55754 como exemplo, os quatro números são todos verdadeiros:
| Quem atribuiu | Valor |
|---|---|
| Apache (escala de quatro níveis da ASF) | low |
| GitHub advisory | low |
| CVSS v3.1 (é o que o NVD adota) | 9.6 critical |
| CVSS v4.0 | 2.1 |
Se você olhar só o NVD, vai achar que é o mais grave de todos; só a Apache, vai achar que pode ignorar. Nenhum dos dois está errado — a Apache avalia a explorabilidade real na configuração padrão; o CVSS é um cálculo mecânico a partir do vetor, sem considerar se você ativou ou não o recurso.
Por isso esta ferramenta imprime os quatro números e, quando as duas avaliações divergem, diz isso explicitamente.
A Apache usa low / moderate / important / critical; o GitHub usa low / medium / high / critical.
A base do alinhamento vem do texto oficial em security-impact.html do Tomcat:
Important / High — A vulnerability rated as Important (or High) impact is one which could result in the compromise of data or availability of the server.
→ Important e High são dois nomes para o mesmo nível, e isso está escrito junto pela própria Apache.
🔴 Já a Apache não diz que moderate e medium são alinháveis, e esta ferramenta também não alinha por conta própria —
o Moderate da ASF define condições de explorabilidade como "tem fatores de mitigação significativos / não afeta configurações comuns / exige autenticação",
enquanto o medium do GitHub é uma faixa de pontuação CVSS; não são a mesma coisa. Nesse caso, reporta-se "a Apache não diz que esses dois níveis são iguais" e os dois são apresentados.
Sob esse critério, das 14, 5 têm avaliações substancialmente diferentes entre os dois lados (o caso mais extremo é o CVE-2025-52520: Apache low / GitHub high),
2 não são alinháveis e 7 são iguais.
A tabela de decisão CveTable.java é gerada, sem nenhuma linha copiada à mão:
python -u tools/fetch_sources.py # busca as três fontes primárias → tools/sources.json
python -u tools/gen_table.py # gera CveTable.java (5 asserções; se alguma falhar, o arquivo não é gravado)
| Fonte | Usada para responder |
|---|---|
| CVE.org (registro original da Apache como CNA) | A própria Apache declarou "afeta o 8.5"? Qual é o intervalo? |
| NVD | A configuração cpe tem entrada para o 8.5? |
| GitHub advisory | severity, coordenadas Maven afetadas, existe versão corrigida do lado do 8.5? |
Antes de publicar/divulgar, ainda é feita uma verificação com critério independente — ela não lê o sources.json acima,
mas analisa o CveTable.java gerado e consulta o NVD novamente pelo cpe:
python -u tools/recheck_before_publish.py
Esse passo não é formalidade: na primeira execução, ele pegou um erro real. O script gerador, ao julgar se "o NVD tem o 8.5", só reconhecia "intervalo cujo limite inferior começa com
8.5", mas oCVE-2025-24813está escrito comoversionStartIncluding=None .. versionEndExcluding=9.0.99— limite inferior aberto, ou seja, ele cobre o 8.5. A diferença ficou com uma entrada a mais. ConsultarcveIdpor item nunca teria revelado isso; só o critério na perspectiva do usuário — "consultar 8.5.100 pelo cpe" — foi que esbarrou no problema.
mvn package # → target/tomcat85-check.jar
mvn test # 59 testes
Requer JDK 17+. Zero dependências em tempo de execução; JUnit apenas nos testes.
MIT — veja LICENSE