
Comprobador offline para Spring Cloud Config CVE-2026-40982 — te indica si tu línea de versión tiene alguna corrección OSS (3.1.x/4.1.x/4.2.x: no la tiene).
Herramienta de diagnóstico offline para Spring Cloud Config CVE-2026-40982 —— sin dependencias, un solo jar, sin conexión a la red.
No responde a «¿me afecta?», sino a esa pregunta más incómoda:
Mi línea de versión, ¿tiene realmente alguna versión segura a la que pueda actualizar en Maven Central?
Para las tres líneas 3.1.x / 4.1.x / 4.2.x, la respuesta es no.
El advisory oficial (spring.io/security/cve-2026-40982) indica las versiones corregidas:
| Línea de versión | Versión oficial corregida | Disponibilidad | Versión más alta de esa línea en Maven Central | ¿Puedes actualizar? |
|---|---|---|---|---|
| 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 | ✅ |
Esas tres versiones corregidas no están en repositorios públicos. Cualquiera puede verificarlo:
curl -sI https://repo1.maven.org/maven2/org/springframework/cloud/spring-cloud-config-server/4.2.7/
# HTTP/1.1 404 Not Found
Y además, las herramientas automatizadas no te dirán esto — en los datos estructurados del aviso de GitHub,
el first_patched_version de estas tres líneas es exactamente 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 consumen exactamente estos datos. Sin un objetivo de actualización, no se puede dar una recomendación de actualización.
java -jar scc-check.jar <目录或 jar/war 路径>
# 中文乱码时(Windows 控制台代码页与 Java 判断常常对不上):
java -jar scc-check.jar target/ --utf8
Requiere Java 17+. Cero dependencias en tiempo de ejecución, se puede colocar directamente en un entorno offline.
Códigos de salida: 2 hay líneas de versión que no se pueden actualizar · 1 afectado pero actualizable / no se puede determinar · 0 no encontrado · 3 error de uso o de ruta
.jar / .warBOOT-INF/lib/, WEB-INF/lib/)META-INF/maven/.../pom.properties) — reconoce el jar aunque haya sido renombradopom.xml1. No cuenta al cliente como afectado.
Este CVE solo afecta al lado servidor spring-cloud-config-server. Los proyectos que incluyen spring-cloud-starter-config
(cliente) no se ven afectados; la herramienta te lo indica claramente en lugar de hacerte preocupar sin motivo.
2. No emite veredicto para 4.0.x.
Ningún rango del advisory oficial cubre 4.0.x (4.0.0 > 3.1.13, no cae en la línea sin límite inferior).
La herramienta solo informa «fuera del alcance oficial», no reporta CRITICAL — rellenar la tabla de veredictos con conjeturas llevaría a tomar decisiones equivocadas.
3. Cuando no puede leer la versión, dice explícitamente «no se puede determinar», nunca lo trata como seguro.
Spring Cloud gestiona las versiones de forma unificada mediante release train, y en el pom.xml a menudo no hay <version> en absoluto.
En ese caso la herramienta te indica que escanees los artefactos de compilación, en lugar de fingir que no se encontró ningún problema.
Del mismo modo, las dependencias con scope test / provided no se propagan a los consumidores y no cuentan como superficie de exposición;
las dependencias envueltas en comentarios XML se eliminan.
tools/gen_rules.py compila RuleTable.java a partir de dos fuentes de datos primarias:
GHSA-6g23-24mc-hx6x → rangos afectados + versión oficial corregidamaven-metadata.xml de repo1.maven.org → versiones que realmente existen en el repositorio públicoE incluye cuatro aserciones: número de rangos ≥5, first_patched=null ≥3, líneas de versión ≥5, clasificadas como
ENTERPRISE_ONLY ≥3. Si alguna no se cumple, se aborta directamente y no se genera el archivo —
de lo contrario, un fallo de análisis produciría una tabla vacía, y las pruebas unitarias contra una tabla vacía seguirían pasando en verde.
python tools/gen_rules.py # 重新生成判定表
mvn test # 31 个测试
Esta herramienta solo realiza comparación de versiones; no detecta si tu Config Server está realmente expuesto a Internet, si tiene un WAF, o si ya se ha mitigado por otros medios. El resultado es un punto de partida para la investigación, no una conclusión de seguridad. Prevalece el aviso oficial (advisory).
MIT
Esta herramienta responde a «¿estoy afectado o no?». Lo siguiente no puede responderlo, pero puedes contactarme para hacerlo:
📮 [email protected] —— explica la situación y en 24 horas te daré una respuesta escrita de una página: si se puede hacer, dónde está la dificultad y cuánto tiempo tomará aproximadamente. Este paso es gratuito y no requiere que te comprometas a nada de antemano.
| Código | Significado |
|---|---|
0 | El escaneo terminó y cada archivo se leyó realmente, sin hallazgos que requieran tu acción |
4 | Hay archivos que no se pueden leer —— no es un zip, contenido truncado, o fallo de lectura |
🔴 El código 4 se añadió el 2026-09-09, y la razón merece explicarse claramente.
Antes de eso, los archivos que no se podían leer solo dejaban una línea de aviso en la salida, mientras que el código de salida seguía siendo 0 ——
el rastro es para que lo vean las personas, pero CI y los scripts miran el código de salida, así que «no pude leerlo» equivale a «aprobado» en la automatización.
Un jar corrupto, cifrado o descargado de forma incompleta se convierte silenciosamente en un «no se encontraron problemas».
«No puedo leerlo» y «estás a salvo» deben ser dos frases distintas.
⚠️ Un jar vacío legítimo no cuenta como ilegible (un registro EOCD de 22 bytes es un zip vacío real) y no activa el 4 ——
cuando hay demasiadas alertas falsas, nadie presta atención a las alertas reales.
El significado de los demás códigos de salida se encuentra en las secciones anteriores sobre los niveles de veredicto y las instrucciones de uso.