
Scanne les artefacts et sources Java à la recherche de CVE Spring/Tomcat, compare les scores CVSS du fournisseur à ceux de la NVD, vérifie les conditions d'exploitabilité et contrôle si des versions corrigées existent sur Maven Central.
Couvre 15 bulletins de sécurité officiels Spring / Tomcat (sept du 2026-08-20 · cinq du 2026-06-08 · un du 2025-09-15 · deux Tomcat du 2026-08-25).
Parmi elles, 8 sont signalées CRITICAL 9.1~9.8 par les scanners basés sur NVD, alors que l'évaluation officielle du fournisseur est LOW / MEDIUM.
Les 7 autres ont des évaluations parfaitement identiques des deux côtés — la seule différence : le fournisseur a-t-il soumis lui-même un score CVSS pour l'enregistrement CVE.
Cet outil répond à quatre questions :
| CVE | Composant | Officiel fournisseur | NVD | Qui a attribué le score 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 | Auto-évaluation fournisseur ✅ Identique |
La seule entrée identique des deux côtés est précisément celle où le fournisseur a soumis lui-même le CVSS à NVD.
La cause n'est pas une dissimulation : lorsque le fournisseur ne soumet pas de score, CISA-ADP attribue automatiquement un score selon le pire scénario, et la plupart des outils SCA reprennent la valeur NVD.
Ce n'est pas un bug, c'est le référentiel propre à chacun des deux systèmes de notation — mais votre processus d'urgence suit le 9.8.
Test réel (avec témoin positif, relancé à chaque génération de la table de règles) :
spring-web 6.2.19 = 200 ← la version précédente est sur Central
spring-web 6.2.20 = 404 ← celle vers laquelle le fournisseur vous demande de migrer, absente
spring-security-core 6.5.11 = 200
spring-security-core 6.5.12 = 404
Dans le tableau des versions de correctif du fournisseur, ces versions sont marquées Enterprise Support Only — réservées aux clients ayant acheté le support commercial.
Donc si vous êtes réellement concerné, vos options sont : migrer vers une version majeure supérieure, ou acheter le support commercial.
java -jar spring-cvss-check.jar <jar|war|répertoire>... [--src <répertoire source>]
# Le plus courant : scanner l'artefact compilé pour la version, scanner le code source pour les conditions de déclenchement
java -jar spring-cvss-check.jar target/ --src src/main
# Un seul fat jar / war suffit aussi
java -jar spring-cvss-check.jar app.war
Nécessite JDK 17+. Zéro dépendance à l'exécution, aucune connexion réseau.
Code de sortie : 0 version non concernée · 2 version concernée mais aucune condition de déclenchement trouvée · 3 conditions de déclenchement également remplies.
== Versions détectées ==
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
== Version concernée par 8 entrées ==
-- CVE-2026-47884 Spring Framework Improper Path Limitation in XsltView
Produit Spring Framework Affecté 6.2.0 - 6.2.19
[Écart] Officiel **MEDIUM** <-> NVD **CRITICAL 9.8**
Le score NVD n'est pas attribué par le fournisseur, mais par CISA-ADP.
Condition Uniquement si XsltView est utilisé, qu'il existe un mapping "/**" passant par le rendu de vue, et que le nom de vue n'est pas explicitement spécifié
[Trouvé] Dans votre code/configuration :
src/main/java/demo/ReportView.java <- XsltView(ligne 2)
[Non migrable] Le fournisseur demande de migrer vers 6.2.20 —— **cette version n'existe pas sur Maven Central (404)**, marquée Enterprise Support Only par le fournisseur
== Résumé ==
Votre scanner peut signaler 7 de ces 8 entrées comme CRITICAL ;
alors que l'évaluation **officielle du fournisseur** est : 3 LOW / 4 MEDIUM / 1 CRITICAL.
Parmi ces 8 entrées, 6 n'ont pas de condition de déclenchement trouvée dans votre code source, 2 en ont une.
[!] Pour 7 d'entre elles, la version de correctif fournie par le fournisseur **n'existe tout simplement pas sur Maven Central**
Le tableau ci-dessus pourrait laisser penser que « NVD attribue toujours des scores au hasard ». Non. Dans le même lot de données, il y a 7 autres entrées dont l'évaluation officielle et l'évaluation NVD sont parfaitement identiques :
| CVE | Composant | Officiel fournisseur | NVD | Qui a attribué le score NVD |
|---|---|---|---|---|
| CVE-2026-59270 | Spring Security | CRITICAL | 9.4 CRITICAL | Auto-évaluation fournisseur |
| CVE-2026-41843 | Spring Framework | MEDIUM | 5.9 MEDIUM | Auto-évaluation fournisseur |
| CVE-2026-41844 | Spring Framework | MEDIUM | 4.2 MEDIUM | Auto-évaluation fournisseur |
| CVE-2026-41846 | Spring Framework | MEDIUM | 5.9 MEDIUM | Auto-évaluation fournisseur |
| CVE-2026-41853 | Spring Framework | MEDIUM | 5.3 MEDIUM | Auto-évaluation fournisseur |
| CVE-2026-41848 | Spring Framework | LOW | 3.7 LOW | Auto-évaluation fournisseur |
| CVE-2025-41249 | Spring Framework | HIGH | 7.5 HIGH | Auto-évaluation fournisseur |
Aucun contre-exemple dans les deux directions, c'est le seul jugement causal que cet outil ose affirmer :
[email protected] (soumis par le fournisseur lui-même)CISA-ADP (le fournisseur n'a pas soumis, un tiers attribue automatiquement selon le pire scénario)Le script de génération utilise deux assertions pour surveiller respectivement ces deux directions (ASSERT4 / ASSERT7) ; si un contre-exemple apparaît, la table est refusée.
🔑 Pourquoi vérifier les deux directions : le fait que « les entrées identiques soient toutes des auto-évaluations du fournisseur » n'exclut pas que certaines entrées divergentes soient aussi des auto-évaluations du fournisseur. Si une telle entrée apparaissait, la causalité aurait un contre-exemple, et en ne vérifiant qu'une seule direction, la table entière serait quand même générée et tout serait vert. Une assertion unidirectionnelle ne prouve pas la causalité.
spring-core-5.3.39.jar, 11 entrées sont concernées, et pour ces 11 entrées, aucune version de correctif fournie par le fournisseur
n'existe sur Maven Central public (5.3.45 / 5.3.49 / 5.3.50, toutes marquées Enterprise Support Only).La table de décision est générée par tools/gen_rules.py à partir de quatre sources primaires, sans recopie manuelle :
| Source | Ce qui est récupéré | |
|---|---|---|
| A | spring.io/security/<cve> | Évaluation officielle / plage affectée / version de correctif (avec marquage OSS ⟷ Enterprise) |
| B | tomcat.apache.org/security-{9,10,11}.html | Idem |
| C | NVD REST API | Évaluation NVD et source du score |
| D | repo1.maven.org(HEAD) | La version vers laquelle le fournisseur demande de migrer existe-t-elle réellement sur Central |
Relancer une fois équivaut à une nouvelle vérification :
python tools/gen_rules.py
Le script contient six assertions ; si l'une échoue, la table est refusée, dont trois qui surveillent directement les affirmations de cet outil :
ASSERT2 Nombre d'entrées avec divergence officiel⟷NVD — s'il tombe à zéro, l'affirmation est invalidée, arrêt immédiatASSERT3 Détection Central avec témoin positif — si le témoin échoue, tous les 404 de ce lot sont annulésASSERT4 Pour l'entrée identique, la source du score doit être une auto-évaluation du fournisseur — c'est la seule preuve de la « cause »Apache-2.0