
Descubra a versão real do Tomcat embutido no Spring Boot (não está no pom) e, para cada CVE de 2026, forneça ao mesmo tempo a classificação oficial da ASF e a classificação do GitHub, as condições de acionamento e se este item gerará alerta no Dependabot CVE-2026-41293
Descubra a versão real do Tomcat que você tem instalada e, para cada CVE de 2026, forneça simultaneamente duas classificações e as condições de acionamento.
Um único jar sem dependências, executado offline, sem conexão de rede e sem enviar nada.
1. A versão do Tomcat embutido em projetos Spring Boot não está no seu pom.
Ela é controlada pela propriedade tomcat.version do spring-boot-starter-parent; no pom você só vê o
spring-boot-starter-web. Por isso, a ferramenta escaneia os artefatos de build (jar / fat jar / diretórios de instalação), e não lê o pom.
2. Alguns itens não entram nos alertas do Dependabot.
Em 2026, o Tomcat divulgou 29 CVEs, e parte delas não aparece nos alertas de projetos Spring Boot por dois mecanismos:
| Mecanismo | Explicação |
|---|---|
advisory é unreviewed | O GitHub só usa advisories reviewed para alertas do Dependabot. unreviewed é o estado normal do fluxo em que a NVD importa automaticamente e os pacotes afetados ainda não foram confirmados manualmente |
| Coordenadas não batem | O advisory fica em coordenadas como org.apache.tomcat:tomcat-coyote, mas a árvore de dependências do Spring Boot só tem tomcat-embed-core / -el / -websocket |
Efeito prático: um aplicativo Spring Boot com Tomcat embutido 9.0.118 tem o painel do Dependabot totalmente verde, e esta ferramenta reporta 4 correspondências, sendo que uma delas é exposta já na configuração padrão.
3. Os dois sistemas de classificação têm critérios diferentes, e você só vê um deles.
| ASF / Tomcat oficial | GitHub / NVD | |
|---|---|---|
| Níveis | Low / Moderate / Important / Critical | Valor CVSS |
| Base |
Das 29, 17 têm diferença de 2 níveis ou mais entre as duas classificações; o caso mais extremo é o CVE-2026-41293: oficial Low, GitHub critical CVSS 9.8.
Isto não é erro de ninguém. Os dois sistemas medem coisas diferentes por natureza. Mas para decidir "devo atualizar agora?", você precisa ver os dois ao mesmo tempo — e saber se ativou esse recurso.
java -jar tomcat-check.jar <jar 或目录> ...
--all 连「不适用」的条目也列出来
--utf8 Windows 控制台中文乱码时加这个
# Spring Boot fat jar
java -jar tomcat-check.jar target/my-app.jar
# 独立安装的 Tomcat
java -jar tomcat-check.jar /opt/tomcat
# 整个依赖目录
java -jar tomcat-check.jar target/lib
Requer Java 17+.
Cada correspondência fornece: as duas classificações, condições de acionamento, o texto original da descrição oficial e se ela aparecerá ou não nos alertas do seu Dependabot. Ao final, é fornecido um alvo de upgrade que cobre todas as correspondências.
unreviewed é um estado normal do fluxo.tools/gen_rules.py gera CveTable.java a partir de duas fontes primárias, sem copiar uma única linha manualmente:
https://tomcat.apache.org/security-{9,10,11}.html — classificação oficial, título, texto original da descrição, intervalos afetadostype, coordenadas Maven afetadasO processo de geração inclui 7 asserções; se qualquer uma falhar, ele aborta e não grava o arquivo. Três merecem destaque:
<strong>Moderate: The fix for <a>CVE-2025-66614</a> was incomplete</strong> <a>CVE-2026-32990</a>.
Procurar "o primeiro CVE" no bloco inteiro acaba pegando o número antigo embutido no título; a consequência não é perder um item, é trocar um pelo outro:
um CVE fica com o título e a descrição de outro, enquanto geração, testes e verificação de artefatos reais continuam passando normalmente.Affects: fica logo acima do título do próximo CVE,
sendo muito fácil parear com o item errado — se errar, você obtém uma tabela que "parece perfeitamente normal, mas está deslocada uma posição".
usanado first_patched_version do GitHub para validação cruzada, no desenvolvimento ela realmente pegou um deslocamento uma vez.tomcat-embed-*.
A base da exclusão tem de ser verificação prática, não "eu lembro".Para regenerar:
python tools/gen_rules.py
mvn clean package # → target/tomcat-check.jar
34 testes. Zero dependências em tempo de execução; JUnit apenas nos testes.
MIT
| Explorabilidade real na configuração padrão |
| Cálculo mecânico a partir do vetor, sem verificar se você ativou o recurso |
| Onde ver | tomcat.apache.org/security-9.html | O Dependabot envia direto para você |