
Scaneia artefatos e código-fonte Java em busca de CVEs do Spring/Tomcat, compara as pontuações CVSS do fornecedor com as do NVD, verifica as condições de explorabilidade e confere se versões corrigidas existem no Maven Central.
Cobre 15 avisos de segurança oficiais do Spring / Tomcat (sete em 2026-08-20 · cinco em 2026-06-08 · um em 2025-09-15 · dois do Tomcat em 2026-08-25).
Em 8 deles, scanners conectados ao NVD reportam CRITICAL 9.1~9.8, enquanto a avaliação oficial do fornecedor é LOW / MEDIUM.
Nos outros 7, as duas classificações são exatamente iguais — a diferença é apenas uma: se o fornecedor enviou ou não a pontuação CVSS para o registro do CVE.
Esta ferramenta responde a quatro perguntas:
| CVE | Componente | Oficial do fornecedor | NVD | Quem deu a pontuação no NVD |
|---|
| CVE-2026-59313 | Spring Framework | LOW | 9.8 CRITICAL | CISA-ADP |
| CVE-2026-47890 | Spring Framework | LOW | 9.8 CRITICAL | CISA-ADP |
| CVE-2026-59283 | Spring Framework | MEDIUM | 9.1 CRITICAL | CISA-ADP |
| CVE-2026-47891 | Spring Framework | MEDIUM | 9.8 CRITICAL | CISA-ADP |
| CVE-2026-47884 | Spring Framework | MEDIUM | 9.8 CRITICAL | CISA-ADP |
| CVE-2026-47892 | Spring Framework | MEDIUM | 9.8 CRITICAL | CISA-ADP |
| CVE-2026-65637 | Apache Tomcat | Moderate | 9.8 CRITICAL | CISA-ADP |
| CVE-2026-65905 | Apache Tomcat | Low | 9.8 CRITICAL | CISA-ADP |
| CVE-2026-59270 | Spring Security | CRITICAL | 9.4 CRITICAL | Autoavaliação do fornecedor ✅ Consistente |
O único caso em que os dois lados coincidem é exatamente aquele em que o fornecedor enviou o CVSS ao NVD.
A causa não é ninguém escondendo nada: quando o fornecedor não envia a pontuação, a CISA-ADP atribui automaticamente uma nota com base no pior cenário, e a maioria das ferramentas SCA usa o valor do NVD.
Isso não é um Bug, são os critérios de dois sistemas de avaliação distintos — mas o seu fluxo de resposta a incidentes está seguindo o 9.8.
Teste real (com controle positivo, reexecutado a cada geração da tabela de regras):
spring-web 6.2.19 = 200 ← versão anterior está no Central
spring-web 6.2.20 = 404 ← a que o fornecedor manda atualizar, não existe
spring-security-core 6.5.11 = 200
spring-security-core 6.5.12 = 404
Na tabela oficial de versões de correção, essas versões estão marcadas como Enterprise Support Only — disponíveis apenas para clientes com suporte comercial.
Então, se você realmente for afetado, suas opções são: atualizar para uma versão principal diferente ou comprar suporte comercial.
java -jar spring-cvss-check.jar <jar|war|diretorio>... [--src <diretorio-do-codigo-fonte>]
# Mais comum: analisar artefatos de build para determinar a versão e o código-fonte para as condições de acionamento
java -jar spring-cvss-check.jar target/ --src src/main
# Um único fat jar / war também funciona
java -jar spring-cvss-check.jar app.war
Requer JDK 17+. Zero dependências em tempo de execução, sem conexão com a internet.
Código de saída: 0 versão não afetada · 2 versão afetada mas nenhuma condição de acionamento encontrada · 3 condições de acionamento também confirmadas.
== Versões encontradas ==
Spring Framework 6.2.19 .../spring-core-6.2.19.jar
Spring Security 6.5.11 .../spring-security-core-6.5.11.jar
Apache Tomcat 9.0.37 .../tomcat-embed-core-9.0.37.jar
== Versão afetada por 8 vulnerabilidades ==
-- CVE-2026-47884 Spring Framework Improper Path Limitation in XsltView
Produto Spring Framework Afetadas 6.2.0 - 6.2.19
[Diferença] Oficial **MEDIUM** <-> NVD **CRITICAL 9.8**
A pontuação no NVD não foi dada pelo fornecedor, mas pela CISA-ADP.
Condição de acionamento Somente se usar XsltView, e existir um mapeamento "/**" que passe pela renderização de views, e o nome da view não for especificado explicitamente
[Confirmado] Encontrado no seu código/configuração:
src/main/java/demo/ReportView.java <- XsltView(linha 2)
[Sem atualização] O fornecedor manda atualizar para 6.2.20 —— **essa versão não existe no Maven Central (404)**, marcada oficialmente como Enterprise Support Only
== Resumo ==
Seu scanner pode reportar 7 dessas 8 como CRITICAL;
enquanto a avaliação **oficial do fornecedor** é: 3 LOW / 4 MEDIUM / 1 CRITICAL.
Dessas 8, em 6 não foram encontradas condições de acionamento no seu código-fonte; em 2 foram.
[!] Em 7 delas, a versão de correção oficial **não existe no Maven Central**
A tabela acima pode dar a impressão de que "o NVD sempre pontua errado". Não é verdade. No mesmo lote de dados há outras 7 vulnerabilidades em que a classificação oficial e a do NVD são exatamente iguais:
| CVE | Componente | Oficial do fornecedor | NVD | Quem deu a pontuação no NVD |
|---|---|---|---|---|
| CVE-2026-59270 | Spring Security | CRITICAL | 9.4 CRITICAL | Autoavaliação do fornecedor |
| CVE-2026-41843 | Spring Framework | MEDIUM | 5.9 MEDIUM | Autoavaliação do fornecedor |
| CVE-2026-41844 | Spring Framework | MEDIUM | 4.2 MEDIUM | Autoavaliação do fornecedor |
| CVE-2026-41846 | Spring Framework | MEDIUM | 5.9 MEDIUM | Autoavaliação do fornecedor |
| CVE-2026-41853 | Spring Framework | MEDIUM | 5.3 MEDIUM | Autoavaliação do fornecedor |
| CVE-2026-41848 | Spring Framework | LOW | 3.7 LOW | Autoavaliação do fornecedor |
| CVE-2025-41249 | Spring Framework | HIGH | 7.5 HIGH | Autoavaliação do fornecedor |
Não há contraexemplos em nenhuma das duas direções, e este é o único julgamento causal que esta ferramenta se atreve a fazer:
[email protected] (enviada pelo próprio fornecedor)CISA-ADP (fornecedor não enviou; um terceiro pontuou automaticamente pelo pior cenário)O script de geração usa duas asserções para monitorar cada direção (ASSERT4 / ASSERT7); se qualquer contraexemplo aparecer, a tabela é recusada.
🔑 Por que validar as duas direções: o fato de que "as consistentes são todas autoavaliações do fornecedor" não exclui que "algumas inconsistentes também sejam autoavaliações do fornecedor". Se um item assim aparecesse, a causalidade teria um contraexemplo, e validar apenas uma direção ainda geraria a tabela inteira, toda verde. Uma asserção unilateral não prova causalidade.
spring-core-5.3.39.jar acusará 11 vulnerabilidades, e para essas 11, nenhuma versão de correção oficial
existe no Maven Central público (5.3.45 / 5.3.49 / 5.3.50, todas marcadas como Enterprise Support Only).A tabela de regras é gerada pelo tools/gen_rules.py a partir de quatro fontes primárias, sem transcrição manual:
| Fonte | O que extrai | |
|---|---|---|
| A | spring.io/security/<cve> | Classificação oficial / faixa afetada / versão de correção (incluindo marcação OSS ⟷ Enterprise) |
| B | tomcat.apache.org/security-{9,10,11}.html | Idem |
| C | NVD REST API | Classificação do NVD e a fonte da pontuação |
| D | repo1.maven.org(HEAD) | Se a versão que o fornecedor manda atualizar existe de fato no Central |
Reexecutar é reverificar:
python tools/gen_rules.py
O script contém seis asserções; se alguma falhar, a tabela é recusada, e três delas monitoram diretamente as afirmações desta ferramenta:
ASSERT2 Número de vulnerabilidades com divergência oficial⟷NVD —— se zerar, a afirmação perdeu a validade e o processo para na horaASSERT3 Detecção no Central com controle positivo —— se o controle falhar, todos os 404 daquele lote são invalidadosASSERT4 Na vulnerabilidade consistente, a fonte da pontuação deve ser autoavaliação do fornecedor —— é a única evidência da "causa"Apache-2.0