
Scans Java-Artefakte und Quellcode auf Spring/Tomcat-CVEs, vergleicht CVSS-Scores von Herstellern mit denen der NVD, verifiziert Ausnutzbarkeitsbedingungen und prüft, ob Fix-Versionen auf Maven Central existieren.
Abdeckung von 15 offiziellen Spring-/Tomcat-Sicherheitsbulletins (2026-08-20 sieben · 2026-06-08 fünf · 2025-09-15 eines · Tomcat 2026-08-25 zwei).
Bei 8 davon melden NVD-basierte Scanner CRITICAL 9.1~9.8, während die offizielle Herstellerbewertung LOW / MEDIUM lautet.
Bei den anderen 7 stimmen beide Bewertungen exakt überein — der einzige Unterschied: ob der Hersteller selbst einen CVSS-Score für den CVE-Eintrag eingereicht hat.
Dieses Tool beantwortet vier Fragen:
| CVE | Komponente | Offiziell (Hersteller) | NVD | Wer hat den Score bei NVD vergeben |
|---|
| 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 | Hersteller selbst ✅ konsistent |
Der einzige Eintrag, bei dem beide übereinstimmen, ist genau der, bei dem der Hersteller selbst den CVSS-Score bei NVD eingereicht hat.
Die Ursache ist keine Verschleierung: Wenn der Hersteller keinen Score einreicht, vergibt CISA-ADP automatisch eine Bewertung nach dem Worst Case, und die meisten SCA-Tools übernehmen den NVD-Wert.
Das ist kein Bug, sondern die jeweilige Methodik zweier Bewertungssysteme — aber dein Incident-Response-Prozess richtet sich nach 9.8.
Praxistest (mit Positivkontrolle, wird bei jeder Generierung der Regel-Tabelle erneut ausgeführt):
spring-web 6.2.19 = 200 ← vorherige Version auf Central
spring-web 6.2.20 = 404 ← vom Hersteller empfohlenes Upgrade, existiert nicht
spring-security-core 6.5.11 = 200
spring-security-core 6.5.12 = 404
In der offiziellen Fix-Version-Tabelle sind diese Versionen als Enterprise Support Only markiert — nur für Kunden mit kommerziellem Support.
Wenn du also tatsächlich betroffen bist, hast du zwei Optionen: Upgrade über die Major-Version hinweg oder Kauf des kommerziellen Supports.
java -jar spring-cvss-check.jar <jar|war|Verzeichnis>... [--src <Quellcode-Verzeichnis>]
# Häufigster Fall: Build-Artefakte scannen für die Version, Quellcode scannen für Auslösebedingungen
java -jar spring-cvss-check.jar target/ --src src/main
# Ein einzelnes Fat-Jar / War reicht ebenfalls
java -jar spring-cvss-check.jar app.war
Erforderlich: JDK 17+. Keine Laufzeitabhängigkeiten, keine Netzwerkverbindung.
Exit-Codes: 0 Version nicht betroffen · 2 Version betroffen, aber keine Auslösebedingungen gefunden · 3 Auslösebedingungen ebenfalls erfüllt.
== Gefundene Versionen ==
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 betrifft 8 Einträge ==
-- CVE-2026-47884 Spring Framework Improper Path Limitation in XsltView
Produkt Spring Framework Betroffen 6.2.0 - 6.2.19
[Abweichung] Offiziell **MEDIUM** <-> NVD **CRITICAL 9.8**
Der Score bei NVD stammt nicht vom Hersteller, sondern von CISA-ADP.
Auslösebedingungen Nur wenn XsltView verwendet wird, eine "/**"-Mapping existiert, das View-Rendering durchläuft, und der View-Name nicht explizit angegeben ist
[Treffer] In deinem Code/deiner Konfiguration gefunden:
src/main/java/demo/ReportView.java <- XsltView(Zeile 2)
[Kein Upgrade] Hersteller empfiehlt Upgrade auf 6.2.20 —— **Diese Version existiert nicht auf Maven Central (404)**, offiziell als Enterprise Support Only markiert
== Zusammenfassung ==
Dein Scanner meldet möglicherweise 7 dieser 8 Einträge als CRITICAL;
die **offizielle Herstellerbewertung** lautet: 3 LOW / 4 MEDIUM / 1 CRITICAL.
Von diesen 8 Einträgen wurden bei 6 keine Auslösebedingungen in deinem Quellcode gefunden, bei 2 wurden sie gefunden.
[!] Bei 7 davon existiert die vom Hersteller angegebene Fix-Version **nicht auf Maven Central**
Die obige Tabelle könnte den Eindruck erwecken, dass „NVD immer falsch bewertet". Das stimmt nicht. In denselben Daten gibt es 7 weitere Einträge, bei denen die Herstellerbewertung und die NVD-Bewertung exakt übereinstimmen:
| CVE | Komponente | Offiziell (Hersteller) | NVD | Wer hat den Score bei NVD vergeben |
|---|---|---|---|---|
| CVE-2026-59270 | Spring Security | CRITICAL | 9.4 CRITICAL | Hersteller selbst |
| CVE-2026-41843 | Spring Framework | MEDIUM | 5.9 MEDIUM | Hersteller selbst |
| CVE-2026-41844 | Spring Framework | MEDIUM | 4.2 MEDIUM | Hersteller selbst |
| CVE-2026-41846 | Spring Framework | MEDIUM | 5.9 MEDIUM | Hersteller selbst |
| CVE-2026-41853 | Spring Framework | MEDIUM | 5.3 MEDIUM | Hersteller selbst |
| CVE-2026-41848 | Spring Framework | LOW | 3.7 LOW | Hersteller selbst |
| CVE-2025-41249 | Spring Framework | HIGH | 7.5 HIGH | Hersteller selbst |
In beide Richtungen gibt es keine Gegenbeispiele — das ist das einzige kausale Urteil, das dieses Tool wagt:
[email protected] (vom Hersteller selbst eingereicht)CISA-ADP (Hersteller hat nichts eingereicht, Dritter bewertet automatisch nach Worst Case)Das Generierungsskript überwacht beide Richtungen mit zwei Assertions (ASSERT4 / ASSERT7); sobald ein Gegenbeispiel auftritt, wird die Tabellenerstellung verweigert.
🔑 Warum beide Richtungen prüfen: Die Aussage „Übereinstimmende sind immer herstellereingereicht" schließt nicht aus, dass auch einige Abweichende herstellereingereicht sein könnten. Würde ein solcher Eintrag auftauchen, hätte die Kausalität ein Gegenbeispiel — und bei nur einseitiger Prüfung würde die Tabelle trotzdem generiert und bliebe komplett grün. Eine einseitige Assertion beweist keine Kausalität.
spring-core-5.3.39.jar trifft 11 Einträge, und für keinen dieser 11 Einträge existiert die vom Hersteller angegebene Fix-Version
auf dem öffentlichen Maven Central (5.3.45 / 5.3.49 / 5.3.50, alle als Enterprise Support Only markiert).Die Bewertungstabelle wird von tools/gen_rules.py aus vier Primärquellen generiert, nicht handschriftlich:
| Quelle | Was wird verwendet | |
|---|---|---|
| A | spring.io/security/<cve> | Offizielle Bewertung / betroffener Bereich / Fix-Version (inkl. OSS ⟷ Enterprise-Kennzeichnung) |
| B | tomcat.apache.org/security-{9,10,11}.html | Dasselbe |
| C | NVD REST API | NVD-Bewertung und Score-Quelle |
| D | repo1.maven.org(HEAD) | Ob die vom Hersteller empfohlene Version tatsächlich auf Central existiert |
Ein erneuter Lauf ist eine erneute Überprüfung:
python tools/gen_rules.py
Das Skript enthält sechs Assertions; schlagen sie fehl, wird die Tabellenerstellung verweigert. Drei davon prüfen direkt die Kernaussagen dieses Tools:
ASSERT2 Anzahl der Einträge mit Abweichung Hersteller⟷NVD —— geht sie auf null zurück, ist die Kernaussage widerlegt; sofortiger StoppASSERT3 Central-Erkennung mit Positivkontrolle —— schlägt die Kontrolle fehl, sind alle 404-Ergebnisse dieser Charge ungültigASSERT4 Bei übereinstimmenden Einträgen muss die Score-Quelle der Hersteller selbst sein —— das ist der einzige Beleg für die „Ursache"Apache-2.0