
Spring Framework CVE-2022-22965 lokale Auswirkungsbedingungen-Verifizierung, Versions-Upgrade-Fix und erneutes Testprojekt
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:
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:
Es ist untersagt, die Testmethoden dieses Projekts gegen nicht autorisierte Ziele einzusetzen.
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
Dieses Projekt wurde in einer isolierten lokalen VMware-Testumgebung durchgeführt.
127.0.0.1Normale Funktionstestdaten:
Alice[email protected]Sicherheitsdiagnose-Eigenschaftspfad:
class.module.name
spring4shell-local-verification-lab/
README.md: Projektbeschreibung, Testansatz, Verifizierungsergebnisse und Behebungsbeschreibungdocs/: Spring4Shell Lokale Auswirkungsbedingungen - Verifizierungs-, Behebungs- und Wiederholungstestberichtimages/: Screenshots der Laborumgebung, des Testprozesses und der Wiederholungstestsvulnerable-demo/: Projekt vor der Behebung mit Spring Framework 5.3.17fixed-demo/: Projekt nach der Behebung mit Spring Framework 5.3.18notes/: Lernnotizen und ProzessaufzeichnungenWichtige Quellcode-Struktur:
config/: Spring MVC-Konfigurationsklassen und Applikationsinitialisierungsklassencontroller/: Controller für Formularverarbeitung und Eigenschaftspfaddiagnosemodel/: UserProfile-Klasse zum Empfang von Name- und E-Mail-ParameternWEB-INF/views/: JSP-Seiten für Startseite, Sendeergebnis und DiagnoseergebnisDieses Projekt hat zwei Spring MVC-Anwendungen eingerichtet: eine vor und eine nach 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
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
Das Testprojekt bietet ein einfaches Benutzerprofil-Formular mit:
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.
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".