
Determinar la versión real de Tomcat integrado en Spring Boot (no está en el pom) y, para cada CVE de 2026, proporcionar también la calificación oficial de ASF y la calificación de GitHub, las condiciones de activación y si este entrará en la alerta de Dependabot CVE-2026-41293
Descubre la versión real de Tomcat que tienes instalada y, para cada CVE de 2026, muestra dos conjuntos de clasificaciones y condiciones de activación.
Un único jar sin dependencias, funciona sin conexión, no se conecta a la red ni sube nada.
1. La versión de Tomcat embebido de un proyecto Spring Boot no está en tu pom.
La controla la propiedad tomcat.version de spring-boot-starter-parent; en el pom solo ves spring-boot-starter-web. Por eso esta herramienta analiza los artefactos de construcción (jar / fat jar / directorio de instalación), no lee el pom.
2. Algunas entradas no llegan a las alertas de Dependabot.
En 2026 Tomcat publicó 29 CVE; algunas no aparecen en las alertas de los proyectos Spring Boot por dos mecanismos:
| Mecanismo | Descripción |
|---|---|
El advisory es unreviewed | GitHub solo usa advisories reviewed para las alertas de Dependabot. unreviewed es el estado normal del proceso cuando NVD lo importa automáticamente y aún no se han confirmado manualmente los paquetes afectados |
| Las coordenadas no coinciden | El advisory cuelga de coordenadas como org.apache.tomcat:tomcat-coyote, mientras que el árbol de dependencias de Spring Boot solo contiene tomcat-embed-core / -el / -websocket |
Efecto real: una aplicación Spring Boot con Tomcat embebido 9.0.118, con el panel de Dependabot completamente en verde, esta herramienta reporta 4 coincidencias, una de ellas expuesta por configuración predeterminada.
3. Dos sistemas de clasificación con criterios distintos, y solo ves uno de ellos.
| ASF / oficial de Tomcat | GitHub / NVD | |
|---|---|---|
| Clasificación | Low / Moderate / Important / Critical | Valor CVSS |
De las 29, 17 tienen una diferencia de 2 niveles o más entre los dos sistemas de clasificación; el caso más extremo es CVE-2026-41293: oficial Low, GitHub critical CVSS 9.8.
Nadie se ha equivocado al informar. Los dos sistemas miden cosas distintas por diseño. Pero para decidir «¿debería actualizar ahora?», necesitas verlas a la vez — y si tienes esa función activada.
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
Requiere Java 17+.
Cada coincidencia incluye: las dos clasificaciones, las condiciones de activación, el texto original de la descripción oficial y si esa entrada aparecerá o no en tus alertas de Dependabot. Al final ofrece un objetivo de actualización que cubre todas las coincidencias.
unreviewed es un estado normal del proceso.tools/gen_rules.py genera CveTable.java a partir de dos fuentes primarias, sin copiar ni una línea manualmente:
https://tomcat.apache.org/security-{9,10,11}.html — clasificación oficial, título, texto original de la descripción, rango de versiones afectadastype, coordenadas Maven afectadasEl proceso de generación incluye 7 aserciones; si alguna no se cumple, se detiene y no escribe el archivo. Tres merecen mención aparte:
<strong>Moderate: The fix for <a>CVE-2025-66614</a> was incomplete</strong> <a>CVE-2026-32990</a>.
Buscar «el primer CVE» en todo el bloque puede tomar el número antiguo incrustado en el título; el resultado no es que falte una entrada, sino que se atribuye mal:
un CVE hereda el título y la descripción de otro, mientras la generación, las pruebas y la re-verificación con artefactos reales superan todos los controles.Affects: está justo al lado del título de la siguiente CVE,
por lo que es muy fácil emparejarla con la entrada equivocada: si falla, obtienes una tabla que «parece totalmente normal pero está desfasada una posición».
Se cruza con first_patched_version de GitHub; durante el desarrollo de hecho se detectó una desviación así.tomcat-embed-*.
La exclusión debe basarse en una comprobación real, no en «me acuerdo».Para regenerar:
python tools/gen_rules.py
mvn clean package # → target/tomcat-check.jar
34 pruebas. Cero dependencias en tiempo de ejecución; JUnit solo en pruebas.
MIT
| Base | Explotabilidad real con la configuración predeterminada | Cálculo mecánico desde el vector, sin tener en cuenta si has activado esa función |
| Dónde verlo | tomcat.apache.org/security-9.html | Dependabot te lo envía directamente |