
Verificador offline para Spring Cloud Config CVE-2026-40982 — informa se a sua linha de versão possui alguma correção OSS (3.1.x/4.1.x/4.2.x: não possui).
Ferramenta de verificação offline para CVE-2026-40982 do Spring Cloud Config — zero dependências, jar único, sem conexão à internet.
Ela não responde à pergunta «sou afetado ou não», mas sim àquela questão mais incômoda:
A minha linha de versão tem, afinal, alguma versão segura para a qual eu possa atualizar no Maven Central?
Para as três linhas 3.1.x / 4.1.x / 4.2.x, a resposta é não.
O aviso oficial (spring.io/security/cve-2026-40982) indica as versões corrigidas:
| Linha de versão | Versão oficial corrigida | Disponibilidade | Versão mais alta dessa linha no Maven Central | Você consegue atualizar |
|---|---|---|---|---|
| 3.1.x | 3.1.14 | Enterprise Support Only | 3.1.10 | ❌ |
| 4.1.x | 4.1.10 | Enterprise Support Only | 4.1.7 | ❌ |
| 4.2.x | 4.2.7 | Enterprise Support Only | 4.2.4 | ❌ |
| 4.3.x | 4.3.3 | OSS | 4.3.4 | ✅ |
| 5.0.x | 5.0.3 | OSS | 5.0.4 | ✅ |
Essas três versões de correção não estão em repositórios públicos. Qualquer pessoa pode verificar:
curl -sI https://repo1.maven.org/maven2/org/springframework/cloud/spring-cloud-config-server/4.2.7/
# HTTP/1.1 404 Not Found
E as ferramentas automatizadas não vão te contar isso — nos dados estruturados do GitHub advisory,
o first_patched_version dessas três linhas é exatamente null:
{"range": "<= 3.1.13", "first_patched_version": null}
{"range": ">= 4.1.0, <= 4.1.9", "first_patched_version": null}
{"range": ">= 4.2.0, <= 4.2.6", "first_patched_version": null}
{"range": ">= 4.3.0, <= 4.3.2", "first_patched_version": "4.3.3"}
{"range": ">= 5.0.0, <= 5.0.2", "first_patched_version": "5.0.3"}
Dependabot / OSV consomem exatamente esses dados. Sem um alvo de atualização, não é possível fornecer uma recomendação de atualização.
java -jar scc-check.jar <目录或 jar/war 路径>
# 中文乱码时(Windows 控制台代码页与 Java 判断常常对不上):
java -jar scc-check.jar target/ --utf8
Requer Java 17+. Sem dependências em tempo de execução, pode ser colocado diretamente em ambientes offline.
Códigos de saída: 2 há linhas de versão que não podem ser atualizadas · 1 afetado mas atualizável / não é possível determinar · 0 não encontrado · 3 erro de uso ou de caminho
.jar / .warBOOT-INF/lib/, WEB-INF/lib/)META-INF/maven/.../pom.properties) — reconhece mesmo se o jar for renomeadopom.xml1. Não considera o cliente como afetado.
Este CVE afeta apenas o spring-cloud-config-server do lado do servidor. Projetos que incluem spring-cloud-starter-config
(cliente) não são afetados; a ferramenta informa isso claramente, em vez de deixá-lo preocupado sem motivo.
2. Não emite veredito para 4.0.x.
Nenhum intervalo do advisory oficial cobre 4.0.x (4.0.0 > 3.1.13, não se enquadra na faixa sem limite inferior).
A ferramenta apenas reporta "fora da cobertura oficial", não reporta CRITICAL — preencher a tabela de veredito por suposição levaria as pessoas a decisões erradas.
3. Quando não consegue ler a versão, diz explicitamente "não é possível determinar", nunca assume que é seguro.
O Spring Cloud gerencia versões de forma unificada por release train, e no pom.xml muitas vezes não há <version> algum.
Nesse caso, a ferramenta orienta a escanear os artefatos de build, em vez de fingir que não encontrou problema.
Da mesma forma, dependências com scope test / provided não são propagadas aos consumidores e não contam como superfície de exposição;
dependências envolvidas em comentários XML são removidas.
tools/gen_rules.py compila o RuleTable.java a partir de duas fontes de dados primárias:
GHSA-6g23-24mc-hx6x → intervalos afetados + versões corrigidas oficiaismaven-metadata.xml do repo1.maven.org → versões que realmente existem no repositório públicoE inclui quatro asserções: número de intervalos ≥5, first_patched=null ≥3, linhas de versão ≥5, classificados como
ENTERPRISE_ONLY ≥3. Se qualquer uma não for satisfeita, o processo é abortado imediatamente e nenhum arquivo é gerado —
caso contrário, uma falha de parsing produziria uma tabela vazia, e os testes unitários passariam todos verdes mesmo contra uma tabela vazia.
python tools/gen_rules.py # 重新生成判定表
mvn test # 31 个测试
Esta ferramenta faz apenas comparação de versões; não verifica se o seu Config Server está realmente exposto à internet pública, se possui WAF ou se já foi mitigado por outros meios. O resultado da avaliação é um ponto de partida para investigação, não uma conclusão de segurança. Consulte os advisories oficiais.
MIT
Esta ferramenta responde à pergunta «eu fui afetado ou não». As questões abaixo ela não consegue responder, mas você pode me procurar para isso:
📮 [email protected] —— descreva a situação e eu te envio uma resposta por escrito em uma página em até 24 horas: se é viável, onde está a dificuldade e aproximadamente quanto tempo leva. Esta etapa é gratuita e você não precisa se comprometer com nada antecipadamente.
| Código | Significado |
|---|---|
0 | A varredura terminou e todos os arquivos foram realmente lidos, sem descobertas que exijam ação sua |
4 | Há arquivos que não puderam ser lidos —— não é um zip, conteúdo truncado ou falha de leitura |
🔴 O 4 foi adicionado em 2026-09-09, e o motivo vale a pena explicar.
Antes disso, arquivos que não podiam ser lidos deixavam apenas uma linha de aviso na saída, e o código de saída continuava sendo 0 ——
o registro é para leitura humana, mas o CI e os scripts olham o código de saída, então «não consegui lê-lo» equivale a «aprovado» na automação.
Um jar corrompido, criptografado ou baixado incompleto se transforma silenciosamente em um «nenhum problema encontrado».
«Não consigo lê-lo» e «você está seguro» precisam ser duas frases distintas.
⚠️ Um jar vazio legítimo não conta como ilegível (um registro EOCD de 22 bytes é um zip vazio de verdade) e não dispara o 4 ——
com muitos alarmes falsos, ninguém dá atenção aos alarmes reais.
Para o significado dos demais códigos de saída, consulte os níveis de veredito e as instruções de uso acima.