
Offline-Prüfer für Spring Cloud Config CVE-2026-40982 — zeigt Ihnen, ob Ihre Versionslinie überhaupt einen OSS-Fix hat (3.1.x/4.1.x/4.2.x: das ist nicht der Fall)
Spring Cloud Config CVE-2026-40982 Offline-Prüfwerkzeug – keine Abhängigkeiten, ein einziges JAR, keine Netzwerkverbindung.
Es beantwortet nicht die Frage „Bin ich betroffen?“, sondern die unangenehmere Frage:
Gibt es für meine Versionslinie auf Maven Central überhaupt eine sichere Version, auf die ich aktualisieren kann?
Für die drei Linien 3.1.x / 4.1.x / 4.2.x lautet die Antwort nein.
Die im offiziellen Advisory (spring.io/security/cve-2026-40982) angegebenen Fix-Versionen:
| Versionslinie | Offizielle Fix-Version | Verfügbarkeit | Höchste Version dieser Linie auf Maven Central | Kannst du upgraden |
|---|---|---|---|---|
| 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 | ✅ |
Diese drei Fix-Versionen sind nicht in öffentlichen Repositories verfügbar. Jeder kann das überprüfen:
curl -sI https://repo1.maven.org/maven2/org/springframework/cloud/spring-cloud-config-server/4.2.7/
# HTTP/1.1 404 Not Found
Und die automatisierten Tools werden Ihnen das nicht sagen – in den strukturierten Daten der GitHub-Advisory sind die first_patched_version dieser drei Linien genau 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 konsumieren genau diese Daten. Ohne Upgrade-Ziel kann kein Upgrade-Vorschlag gegeben werden.
java -jar scc-check.jar <目录或 jar/war 路径>
# 中文乱码时(Windows 控制台代码页与 Java 判断常常对不上):
java -jar scc-check.jar target/ --utf8
Benötigt Java 17+. Zur Laufzeit keine Abhängigkeiten, kann direkt in eine Offline-Umgebung geworfen werden.
Exit-Codes: 2 Versionslinie vorhanden, aber kein Upgrade möglich · 1 betroffen, aber Upgrade möglich / nicht beurteilbar · 0 nicht gefunden · 3 Nutzungs- oder Pfadfehler
.jar / .warBOOT-INF/lib/, WEB-INF/lib/)META-INF/maven/.../pom.properties) – wird auch bei umbenannten Jars erkanntpom.xml1. Clients werden nicht als betroffen gezählt.
Diese CVE betrifft nur den serverseitigen spring-cloud-config-server. Projekte, die spring-cloud-starter-config
(den Client) einbinden, sind nicht betroffen; das Tool sagt dir das ausdrücklich, statt dich unnötig in Aufregung zu versetzen.
2. Für 4.0.x wird keine Bewertung abgegeben.
Kein Bereich im offiziellen Advisory deckt 4.0.x ab (4.0.0 > 3.1.13, fällt nicht in den Bereich ohne Untergrenze).
Das Tool meldet nur „nicht im offiziellen Abdeckungsbereich" und meldet nicht CRITICAL – eine Bewertungstabelle mit Vermutungen zu füllen, führt zu Fehlentscheidungen.
3. Wenn die Version nicht lesbar ist, wird klar „nicht beurteilbar" gesagt, niemals „sicher" angenommen.
Spring Cloud verwaltet Versionen über Release Trains einheitlich; in der pom.xml fehlt oft schlicht und einfach <version>.
In diesem Fall sagt dir das Tool, dass du die Build-Artefakte scannen sollst, statt vorzugeben, kein Problem gefunden zu haben.
Ebenso werden Abhängigkeiten mit scope test / provided nicht an Nutzer weitergegeben und zählen nicht zur Angriffsfläche;
Abhängigkeiten, die in XML-Kommentaren eingeschlossen sind, werden entfernt.
tools/gen_rules.py kompiliert RuleTable.java aus zwei Primärquellen:
GHSA-6g23-24mc-hx6x → betroffene Bereiche + offizielle Fix-Versionmaven-metadata.xml von repo1.maven.org → die im öffentlichen Repository tatsächlich vorhandenen VersionenDazu kommen vier Assertions: Anzahl der Bereiche ≥5, first_patched=null ≥3, Versionslinien ≥5, als
ENTERPRISE_ONLY bewertet ≥3. Wird eine davon nicht erfüllt, wird sofort abgebrochen und keine Datei generiert –
sonst würde bei einem einzigen Parsing-Fehler eine leere Tabelle entstehen, und die Unit-Tests würden gegen die leere Tabelle trotzdem alle grün sein.
python tools/gen_rules.py # 重新生成判定表
mvn test # 31 个测试
Dieses Tool führt ausschließlich einen Versionsabgleich durch und prüft nicht, ob dein Config Server tatsächlich öffentlich im Internet erreichbar ist, ob eine WAF vorhanden ist oder ob das Problem bereits auf andere Weise entschärft wurde. Das Ergebnis ist ein Ausgangspunkt für die Untersuchung, keine Sicherheitsbewertung. Maßgeblich sind die offiziellen Advisories.
MIT
Dieses Tool beantwortet die Frage „Bin ich betroffen?“. Die folgenden Punkte kann es nicht beantworten – dafür kannst du mich beauftragen:
📮 [email protected] – schildere die Situation, und ich gebe dir innerhalb von 24 Stunden eine schriftliche Antwort auf einer Seite: ob es machbar ist, wo die Schwierigkeiten liegen und wie lange es ungefähr dauert. Dieser Schritt ist kostenlos, und du musst dich zu nichts verpflichten.
| Code | Bedeutung |
|---|---|
0 | Scan abgeschlossen, und jede Datei wurde tatsächlich eingelesen, keine Befunde, die eine Aktion von dir erfordern |
4 | Eine Datei konnte nicht gelesen werden – kein Zip, Inhalt abgeschnitten oder Lesefehler |
🔴 4 wurde am 2026-09-09 hinzugefügt, und der Grund dafür sollte klar benannt werden.
Zuvor hinterließen nicht lesbare Dateien nur eine Hinweiszeile in der Ausgabe, während der Exit-Code weiterhin 0 blieb –
die Spur ist für Menschen gedacht, CI und Skripte schauen auf den Exit-Code, und so bedeutet „ich konnte es nicht lesen“ in der Automatisierung gleich „bestanden“.
Ein beschädigtes, verschlüsseltes oder unvollständig heruntergeladenes Jar wird so stillschweigend zu einem „keine Probleme gefunden“.
„Ich kann es nicht lesen“ und „du bist sicher“ müssen zwei verschiedene Aussagen sein.
⚠️ Ein legitimes leeres Jar gilt nicht als nicht lesbar (ein 22-Byte-EOCD-Datensatz ist ein echtes leeres Zip) und löst kein 4 aus –
bei zu vielen Fehlalarmen schaut niemand mehr auf echte Warnungen.
Die Bedeutung der übrigen Exit-Codes findest du oben in den jeweiligen Bewertungsstufen und in der Gebrauchsanweisung.