Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
spring4shell-local-verification-lab — Spring Framework CVE-2022-22965 lokale Auswirkungsbedingungen-Verifizierung, Versions-Upgrade-Fix und erneutes Testprojekt | Kitploit
Tools/GitHubGitHub/meng-security/spring4shell-local-verification-lab
SchwachstellenanalyseCode-AnalyseExploitationWebsicherheitLernen & BildungLabs & Praxis
GitHubmeng-security/spring4shell-local-verification-lab

spring4shell-local-verification-lab

Spring Framework CVE-2022-22965 lokale Auswirkungsbedingungen-Verifizierung, Versions-Upgrade-Fix und erneutes Testprojekt

Repository anzeigen
1vor 1 MonatNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

Spring4Shell Lokale Auswirkungsbedingungen - Verifizierungs-, Behebungs- und Wiederholungstestprojekt

Projektbeschreibung

Dieses Projekt dient dem Lernen und Verifizieren von Spring Framework CVE-2022-22965, auch bekannt als die Spring4Shell-Sicherheitslücke, einschließlich der Auswirkungsbedingungen, der Risikodarstellung, der Behebungsmethoden und des Wiederholungstestprozesses nach der Behebung.

Das Projekt wurde in einer eigens eingerichteten lokalen autorisierten Umgebung durchgeführt. Der Schwerpunkt liegt nicht auf Angriffen auf reale Ziele, sondern darauf, durch den Aufbau einer Spring MVC-Testumgebung vor und nach der Behebung die relevanten Auswirkungsbedingungen der Sicherheitslücke Punkt für Punkt zu bestätigen und auf sichere, kontrollierbare, schreibgeschützte Weise die Unterschiede im Zugriff auf interne Eigenschaftspfade der Spring-Datenbindung vor und nach dem Versionsupgrade zu beobachten.

Dieses Projekt hat folgende Abläufe durchgeführt:

  • JDK-, Maven- und Apache Tomcat-Umgebungsvorbereitung
  • Aufbau des Spring MVC WAR-Projekts
  • Basisvalidierung der normalen Funktionalität
  • Bestätigung der Auswirkungsbedingungen der Sicherheitslücke
  • Schreibgeschützte Diagnose des internen Eigenschaftspfads
  • Analyse der Ursachen der Sicherheitslücke
  • Upgrade der Spring Framework-Version
  • Sicherer Wiederholungstest nach der Behebung
  • Wiederholungstest der normalen Funktionalität nach der Behebung
  • Zusammenstellung der Testberichte und Screenshot-Belege

Sicherheitserklärung

Dieses Projekt ist ausschließlich für die eigene lokale Testumgebung oder ausdrücklich autorisierte Sicherheitstestumgebungen bestimmt.

Das Projekt führt keine Scans, Erkundungen oder Exploits gegen öffentliche Websites, Server oder Drittanbieter-Systeme durch und enthält keine echten Benutzerdaten oder Geschäftsdaten.

Während des Tests wurden keine der folgenden Aktionen durchgeführt:

  • Kein Schreiben von WebShells
  • Keine Ausführung von Systembefehlen
  • Keine Änderung der Tomcat-Konfiguration
  • Kein Aufbau einer Reverse Shell
  • Keine Persistenzkontrolle
  • Keine Beeinträchtigung externer Systeme

Es ist untersagt, die Testmethoden dieses Projekts gegen nicht autorisierte Ziele einzusetzen.

Hintergrund der Sicherheitslücke

CVE-2022-22965, allgemein als Spring4Shell bezeichnet, ist eine Sicherheitslücke zur Remote-Code-Ausführung im Spring Framework, die mit dem Datenbindungsmechanismus von Anfrageparametern zusammenhängt.

Spring MVC unterstützt die automatische Bindung von HTTP-Anfrageparametern an Java-Objekteigenschaften. Beispielsweise empfängt dieses Projekt über die folgende Methode Name- und E-Mail-Parameter:

@ModelAttribute("profile") UserProfile profile

Normalerweise werden die Anfrageparameter name und email gemäß dem Eigenschaftsnamen an das UserProfile-Objekt gebunden.

In den betroffenen Versionen sind die Zugriffsbeschränkungen auf einige interne Eigenschaftspfade nicht streng genug. Bei Verwendung von JDK 9 oder höher und unter bestimmten Servlet-Container-, Bereitstellungs- und Datenbindungsbedingungen können externe Anfrageparameter von normalen Geschäftsobjekten aus auf Java Class, Module, Klassenlader oder containerbezogene interne Objekte zugreifen.

In bestimmten ausnutzbaren Umgebungen könnte ein Angreifer die Serverkonfiguration ändern oder Dateien auf dem Server schreiben, wodurch ein Risiko für Remote-Code-Ausführung entsteht.

Dieses Projekt führt keine vollständige Remote-Code-Ausführung durch, sondern verwendet den folgenden Eigenschaftspfad für eine sichere, schreibgeschützte differenzielle Diagnose:

class.module.name

Projektziele

  1. Verstehen des grundlegenden Prozesses der Datenbindung von Spring MVC-Anfrageparametern.
  2. Aufbau eines lokalen Spring MVC WAR-Testprojekts.
  3. Basisvalidierung der normalen Geschäftsfunktionalität.
  4. Bestätigung der Auswirkungsbedingungen wie Spring Framework, JDK, Tomcat, WAR-Bereitstellung und Datenbindungseinstieg.
  5. Beobachten des Zugriffsverhaltens auf interne Eigenschaftspfade im schreibgeschützten Modus.
  6. Analyse der Hauptursache der Sicherheitslücke.
  7. Upgrade von Spring Framework auf eine behobene Version.
  8. Durchführung des Wiederholungstests mit derselben Methode nach der Behebung.
  9. Bestätigen, dass das Versionsupgrade die normale Geschäftsfunktionalität nicht beeinträchtigt hat.
  10. Zusammenstellung des Projektquellcodes, Testberichts und Screenshot-Belege.

Laborumgebung

Dieses Projekt wurde in einer isolierten lokalen VMware-Testumgebung durchgeführt.

  • Host: Windows 11
  • Zielmaschine: Windows 10 (virtuelle Maschine)
  • Virtualisierungssoftware: VMware Workstation
  • Java-Umgebung: Eclipse Temurin JDK 11.0.31
  • Projekt-Build-Tool: Apache Maven 3.9.16
  • Servlet-Container: Apache Tomcat 9.0.60
  • Spring Framework-Version vor der Behebung: 5.3.17
  • Spring Framework-Version nach der Behebung: 5.3.18
  • Web-Framework: Spring MVC
  • Projektbereitstellungsmethode: Traditionelle WAR-Bereitstellung
  • Testadresse: 127.0.0.1

Normale Funktionstestdaten:

  • Name: Alice
  • E-Mail: [email protected]

Sicherheitsdiagnose-Eigenschaftspfad:

class.module.name

Projektstruktur

spring4shell-local-verification-lab/

  • README.md: Projektbeschreibung, Testansatz, Verifizierungsergebnisse und Behebungsbeschreibung
  • docs/: Spring4Shell Lokale Auswirkungsbedingungen - Verifizierungs-, Behebungs- und Wiederholungstestbericht
  • images/: Screenshots der Laborumgebung, des Testprozesses und der Wiederholungstests
  • vulnerable-demo/: Projekt vor der Behebung mit Spring Framework 5.3.17
  • fixed-demo/: Projekt nach der Behebung mit Spring Framework 5.3.18
  • notes/: Lernnotizen und Prozessaufzeichnungen

Wichtige Quellcode-Struktur:

  • config/: Spring MVC-Konfigurationsklassen und Applikationsinitialisierungsklassen
  • controller/: Controller für Formularverarbeitung und Eigenschaftspfaddiagnose
  • model/: UserProfile-Klasse zum Empfang von Name- und E-Mail-Parametern
  • WEB-INF/views/: JSP-Seiten für Startseite, Sendeergebnis und Diagnoseergebnis

Beschreibung der Testprojekte

Dieses Projekt hat zwei Spring MVC-Anwendungen eingerichtet: eine vor und eine nach der Behebung.

Projekt vor der Behebung

Projektverzeichnis:

vulnerable-demo

Verwendete Version:

Spring Framework 5.3.17

Generierte WAR-Datei:

spring4shell-vulnerable-demo.war

Zugriffsadresse:

http://127.0.0.1:8080/spring4shell-vulnerable-demo/

Diagnoseseite:

http://127.0.0.1:8080/spring4shell-vulnerable-demo/binding-probe

Projekt nach der Behebung

Projektverzeichnis:

fixed-demo

Verwendete Version:

Spring Framework 5.3.18

Generierte WAR-Datei:

spring4shell-fixed-demo.war

Zugriffsadresse:

http://127.0.0.1:8080/spring4shell-fixed-demo/

Diagnoseseite:

http://127.0.0.1:8080/spring4shell-fixed-demo/binding-probe

Beschreibung der normalen Funktionalität

Das Testprojekt bietet ein einfaches Benutzerprofil-Formular mit:

  • Name-Eingabefeld
  • E-Mail-Eingabefeld
  • Absenden-Button

Der Controller empfängt die Anfrageparameter wie folgt:

@ModelAttribute("profile") UserProfile profile

Wenn der Benutzer Name und E-Mail sendet, bindet Spring MVC die Parameter name und email automatisch an das UserProfile-Objekt.

Die Ergebnis-Seite liest das gebundene Objekt und zeigt den gesendeten Namen und die E-Mail des Benutzers an.

Diese Funktion dient der Bestätigung, dass das Projekt ordnungsgemäß läuft und dass ein gültiger Einstiegspunkt für die Datenbindung von Spring MVC-Anfrageparametern in der Anwendung vorhanden ist.

Testansatz

Dieses Projekt folgt dem Ansatz „zuerst normale Funktionalität bestätigen, dann die Auswirkungsbedingungen bestätigen, danach eine schreibgeschützte Risikodiagnose durchführen und schließlich beheben und wiederholt testen".

  1. Installieren und Konfigurieren von JDK 11, Maven und Apache Tomcat.
  2. Aufbau eines Spring MVC-Projekts mit Spring Framework 5.3.17.
  3. Erstellen eines Formulars für Name und E-Mail.
  4. Binden der Anfrageparameter mit @ModelAttribute an das UserProfile-Objekt.
  5. Paketieren des Projekts mit Maven als WAR-Datei.
  6. Bereitstellung der WAR-Datei im eigenständig laufenden Apache Tomcat.
  7. Senden eines simulierten lokalen Benutzerprofils zur Basisvalidierung der normalen Funktionalität.
  8. Überprüfen der tatsächlich verwendeten JDK-, Tomcat-, Spring Framework- und Bereitstellungsmethode.
  9. Schreibgeschützte Diagnose von class.module.name mit Spring BeanWrapper.
  10. Aufzeichnen des Zugriffs auf den Eigenschaftspfad in der Spring Framework 5.3.17-Umgebung.
  11. Upgrade von Spring Framework auf 5.3.18.
  12. Neuerstellung und Bereitstellen des behobenen Projekts.
  13. Wiederholungstest nach der Behebung mit demselben Eigenschaftspfad.
  14. Erneutes Senden von Name und E-Mail, um zu bestätigen, dass die normale Funktionalität nicht beeinträchtigt wurde.

Bestätigung der Auswirkungsbedingungen

Dieses Projekt hat die folgenden Auswirkungsbedingungen Punkt für Punkt bestätigt:

  • Verwendung von JDK 11.0.31 (erfüllt die Bedingung JDK 9 oder höher)
  • Verwendung von Spring Framework 5.3.17
  • Das Projekt enthält die spring-webmvc-Komponente
  • Verwendung von Apache Tomcat 9.0.60
  • Das Projekt wird als traditionelles WAR-Paket bereitgestellt
  • Das Projekt wird vom eigenständig laufenden Tomcat geladen
  • Der Controller hat einen Datenbindungseinstiegspunkt auf Basis von @ModelAttribute

Die tatsächlich bereitgestellten Spring-Abhängigkeiten des Projekts vor der Behebung umfassen:

  • spring-beans-5.3.17.jar
  • spring-core-5.3.17.jar
  • spring-web-5.3.17.jar
  • spring-webmvc-5.3.17.jar

Dieses Projekt bewertet die Sicherheitslücke nicht allein anhand der Spring Framework-Version, sondern führt eine umfassende Analyse unter Berücksichtigung von JDK, Spring MVC, Tomcat, WAR-Bereitstellung und Datenbindungseinstieg durch.

Methode der Risikodiagnose

Um destruktive Exploits zu vermeiden, verwendet dieses Projekt den von Spring Framework bereitgestellten BeanWrapper für eine schreibgeschützte Überprüfung des folgenden Eigenschaftspfads:

class.module.name

Dieser Pfad repräsentiert:

  • class: Zugriff auf das Java Class-Objekt, das dem aktuellen Geschäftsobjekt entspricht
  • module: Zugriff auf das Java-Modul, zu dem diese Klasse gehört
  • name: Lesen des Modulnamens

Der Diagnoseprozess ruft nur die Lesbarkeitsprüfung der Eigenschaft und die Methode zum Lesen des Eigenschaftswerts auf:

  • Es werden keine Objekteigenschaften gesetzt
  • Es werden keine Serverkonfigurationen geändert
  • Es werden keine Dateien auf dem Server geschrieben
  • Es werden keine Betriebssystembefehle ausgeführt

Daher kann diese Diagnose nur dazu dienen, den Zugriffsunterschied auf den internen Eigenschaftspfad vor und nach der Behebung zu beobachten, und kann nicht allein den Nachweis einer erfolgreichen Remote-Code-Ausführung erbringen.

Verifizierungsergebnisse

Ergebnisse vor der Behebung

Umgebung vor der Behebung mit:

Spring Framework 5.3.17

Überprüfter Eigenschaftspfad:

class.module.name

Diagnoseergebnis:

  • Lesbar: true
  • Leseergebnis: null

true bedeutet, dass die aktuelle Umgebung über die class-Eigenschaft des normalen Geschäftsobjekts weiter zum Auflösen von module.name gelangen kann.

Das Leseergebnis ist null, weil die aktuelle WAR-Anwendung in einem unbenannten Java-Modul läuft und der Modulname leer ist; dies bedeutet nicht, dass der Eigenschaftspfad nicht gelesen werden kann.

Ergebnisse nach der Behebung

Umgebung nach der Behebung mit:

Spring Framework 5.3.18

Erneute Diagnose mit demselben Eigenschaftspfad:

class.module.name

Diagnoseergebnis:

  • Lesbar: false
  • Leseergebnis: Not readable

Die Ergebnisse vor und nach der Behebung zeigen einen klaren Kontrast:

  • Spring Framework 5.3.17: Der Eigenschaftspfad kann gelesen werden
  • Spring Framework 5.3.18: Der Eigenschaftspfad kann nicht gelesen werden

Dieses Ergebnis zeigt, dass der Zugriff auf den ursprünglich diagnostizierten Eigenschaftspfad nach dem Versionsupgrade eingeschränkt wurde und das zuvor beobachtete Risiko nicht mehr besteht.

Behebungsmaßnahmen

Dieses Projekt verwendet die Methode des Upgrades der Spring Framework-Version zur Behebung.

Konfiguration vor der Behebung:

<spring.version>5.3.17</spring.version>

Konfiguration nach der Behebung:

<spring.version>5.3.18</spring.version>

Während des Behebungsprozesses wurden die folgenden Aktionen durchgeführt:

  1. Kopieren des Projekts vor der Behebung in fixed-demo.
  2. Beibehalten der Geschäftslogik von Controller, Datenmodell und JSP-Seiten.
  3. Upgrade von Spring Framework von 5.3.17 auf 5.3.18.
  4. Erneutes Herunterladen der Abhängigkeiten der behobenen Version mit Maven.
  5. Neukompilieren und Erstellen der behobenen WAR-Datei.
  6. Bereitstellen der behobenen WAR-Datei im Apache Tomcat.
  7. Überprüfen der tatsächlich bereitgestellten Spring JAR-Versionen im behobenen Projekt.
  8. Durchführung des Sicherheits-Wiederholungstests mit dem ursprünglichen Eigenschaftspfad.
  9. Erneutes Testen der Funktion zum Senden von Name und E-Mail.

Die tatsächlich bereitgestellten Spring-Abhängigkeiten des behobenen Projekts umfassen:

  • spring-beans-5.3.18.jar
  • spring-core-5.3.18.jar
  • spring-web-5.3.18.jar
  • spring-webmvc-5.3.18.jar

Dieses Ergebnis beweist, dass die behobene Version neu erstellt und tatsächlich bereitgestellt wurde, und nicht nur die Versionsnummer in der pom.xml geändert wurde.

Wiederholungstest der normalen Funktionalität nach der Behebung

Nach dem Upgrade auf Spring Framework 5.3.18 wurde die Startseite des behobenen Projekts erneut aufgerufen und die folgenden Testdaten gesendet:

  • Name: Alice
  • E-Mail: [email protected]

Nach dem Senden zeigte die Seite weiterhin normal an:

  • Benutzerprofil erfolgreich gesendet
  • Name ist Alice
  • E-Mail ist [email protected]

Dieses Ergebnis zeigt, dass das Versionsupgrade die ursprüngliche normale Anfrageparameterbindung und die Seitenanzeigefunktion des Projekts nicht beeinträchtigt hat.

Ursache der Sicherheitslücke

Der automatische Datenbindungsmechanismus von Spring MVC kann gemäß dem Namen des HTTP-Anfrageparameters auf Java-Objekteigenschaften zugreifen.

Normale Geschäftsparameter wie name und email müssen nur auf die entsprechenden normalen Eigenschaften in UserProfile zugreifen.

Allerdings unterstützt Spring's Eigenschaftszugriffsmechanismus auch verschachtelte Eigenschaftspfade mit Punkten. In den betroffenen Versionen sind die Beschränkungen für einige interne Eigenschaftspfade nicht streng genug, sodass externe Parameter in bestimmten Umgebungen von normalen Geschäftsobjekten weiter auf Java Class, Module, Klassenlader oder servlet-containerbezogene Objekte zugreifen können.

Wenn interne Objekte beschreibbare Eigenschaften haben, die die Serverkonfiguration oder das Dateisystem beeinflussen können, und wenn die Anwendung gleichzeitig die Bedingungen wie JDK, Tomcat, WAR-Bereitstellung und Datenbindung erfüllt, kann dies zu einem Risiko für Remote-Code-Ausführung führen.

Diese Sicherheitslücke besteht nicht, weil die Eigenschaften name oder email selbst problematisch sind, und nicht alle Projekte, die Spring MVC verwenden, sind zwangsläufig ausnutzbar. Für die Wirksamkeit der Sicherheitslücke sind in der Regel mehrere Bedingungen gleichzeitig erforderlich.

Behebungsempfehlungen

In realen Geschäftssystemen wird empfohlen, die folgenden Maßnahmen zu ergreifen:

  • Überprüfen der tatsächlich laufenden Spring Framework- und Spring Boot-Versionen
  • Vorrangiges Upgrade auf eine noch offiziell unterstützte Sicherheitsversion
  • Nach dem Upgrade die Anwendung neu erstellen und bereitstellen
  • Überprüfen der tatsächlichen Spring JAR-Versionen im endgültigen Bereitstellungspaket
  • Einschränken des Datenbindungsbereichs des Controllers
  • Nur die für das normale Geschäft erforderlichen Felder zur Bindung zulassen
  • Verwenden spezieller Anfragedatenobjekte zum Empfang externer Parameter
  • Vermeiden, dass Datenbankentitäten oder interne komplexe Objekte direkt externen Parametern ausgesetzt werden
  • Sich bei Sicherheitsbeschränkungen nicht auf die clientseitige Validierung verlassen
  • Für Systeme, die nicht sofort aktualisiert werden können, temporäre Abhilfemaßnahmen ergreifen
  • Temporäre Abhilfemaßnahmen können kein offizielles Versionsupgrade ersetzen
  • Ausführen von Tomcat- und Java-Diensten mit einem Konto mit niedrigen Berechtigungen
  • Festlegen der minimal erforderlichen Berechtigungen für Anwendungs- und Konfigurationsverzeichnisse
  • Überwachen auf ungewöhnliche Anfrageparameter und Dateiänderungen auf dem Server
  • Nach der Behebung sowohl einen Sicherheits-Wiederholungstest als auch einen Wiederholungstest der normalen Geschäftsfunktionalität durchführen

Wichtige Screenshot-Belege

Umgebung und Bereitstellung

JDK 11 Version bestätigt

Maven Version bestätigt

Apache Tomcat 9.0.60 erfolgreich gestartet

Maven-Paketierung erfolgreich

WAR-Projekt erfolgreich bereitgestellt

Basisnormal funktionalität

Startseite des Testprojekts normal erreichbar

Basisvalidierung der normalen Funktionalität erfolgreich

Verifizierung vor der Behebung

Spring Framework 5.3.17 Abhängigkeiten bestätigt

Interner Eigenschaftspfad vor der Behebung lesbar

Behebung und Wiederholungstest

Behobene Version erfolgreich paketiert

Interner Eigenschaftspfad nach der Behebung nicht lesbar

Wiederholungstest der normalen Funktionalität nach der Behebung erfolgreich

Spring Framework 5.3.18 Abhängigkeiten nach der Behebung bestätigt

Aktueller Fortschritt

  • Projektverzeichnis erstellt
  • README geschrieben
  • Testbericht erstellt
  • JDK-, Maven- und Tomcat-Umgebung vorbereitet
  • Spring MVC-Testprojekt aufgebaut
  • WAR-Projektpaketierung und -Bereitstellung abgeschlossen
  • Basisvalidierung der normalen Funktionalität abgeschlossen
  • Bestätigung der Auswirkungsbedingungen der Sicherheitslücke abgeschlossen
  • Lokale schreibgeschützte Risikodiagnose abgeschlossen
  • Analyse der Ursachen der Sicherheitslücke abgeschlossen
  • Spring Framework-Versionsupgrade abgeschlossen
  • Sicherer Wiederholungstest nach der Behebung abgeschlossen
  • Wiederholungstest der normalen Funktionalität nach der Behebung abgeschlossen
  • Tatsächliche Abhängigkeitsversionen nach der Behebung bestätigt
  • Testbericht und Screenshot-Belege zusammengestellt

Projektzusammenfassung

Dieses Projekt hat in einer lokalen isolierten Umgebung die Bestätigung der Auswirkungsbedingungen, die Diagnose der Risikodarstellung, das Versionsupgrade und den Wiederholungstest für Spring Framework CVE-2022-22965 durchgeführt.

Das Projekt vor der Behebung verwendete Spring Framework 5.3.17. In der Umgebung mit JDK 11, Spring MVC, Apache Tomcat 9.0.60 und traditioneller WAR-Bereitstellung wurde der Eigenschaftspfad class.module.name als lesbar eingestuft.

Das Projekt nach der Behebung führte ein Upgrade von Spring Framework auf 5.3.18 durch. Der gleiche Eigenschaftspfad wurde als nicht lesbar eingestuft, während die normale Datenbindungsfunktion für Name und E-Mail weiterhin nutzbar blieb.

Dieses Projekt hat keine vollständige Remote-Code-Ausführung durchgeführt, sondern mit einer sicheren, kontrollierbaren, schreibgeschützten Methode die Differenz vor und nach der Behebung verifiziert.

Das Projekt zeigt die folgenden Fähigkeiten:

  • Aufbau einer grundlegenden Java- und Spring MVC-Umgebung
  • Maven-Projekt-Build
  • Bereitstellung von Tomcat WAR-Anwendungen
  • Verständnis des Spring-Datenbindungsmechanismus
  • Analyse der Auswirkungsbedingungen von Sicherheitslücken
  • Gestaltung von Sicherheitstestprozessen
  • Upgrade von Komponentenversionen
  • Wiederholungstest nach der Behebung
  • Regressionstest der normalen Funktionalität
  • Erstellung von Sicherheitstestberichten
  • Zusammenstellung von Screenshot-Belegen und GitHub-Projekt
Tool herunterladen