Spring4Shell - PoC
CVE - 2022 - 22965
Betroffene Versionen :
- Spring Framework Versionen 5.3.0 bis 5.3.17, 5.2.0 bis 5.2.19 und ältere Versionen
- Java JDK 9
- Apache Tomcat Versionen unter 10..0.20, 9.0.62 und 8.5.78
- Anwendungen, die als traditionelles WAR mit spring-webmvc- oder spring-webflux-Abhängigkeit gepackt und auf einem eigenständigen Servlet-Container bereitgestellt werden, sind betroffen.
Beschreibung
- Das Problem kann durch classLoader-Manipulation verschärft werden.
- Fehlerhaftes Data Binding, das zum Befüllen eines Objekts aus Request-Parametern (Request-Mapping-Annotation) verwendet wird, verursacht diese Schwachstelle.
- Angreifer können beliebige Klassen laden und beliebigen Code injizieren, der von der Anwendung ausgeführt werden kann.
- Eine ähnliche Schwachstelle (CVE-2010-1622) wurde bereits früher offengelegt und es wurden Patches angewendet, um
class.classLoader und class.protectionDomain einzuschränken.
- Aber JDK9 führte eine neue Methode
class.getMethod() ein, die diese Einschränkung umgeht, indem sie class.module.classLoader verwendet, um auf jede Kindeigenschaft des Klassenobjekts zuzugreifen.
Auswirkungen
- Erfolgreiche Ausnutzung dieser Schwachstelle kann zu beliebiger Codeausführung auf dem anfälligen System führen.
Testanwendung
docker build . -t spring4shell-poc-app
Alternativ holen Sie das Docker-Image von [gokul2/spring4shell-poc]
docker pull gokul2/spring4shell-poc-app
- Starten Sie die Anwendung
docker run -p 8080:8080 spring4shell-poc-app
- Die Anwendung ist nun unter localhost:8080 verfügbar.
- Führen Sie die Datei exploit.py aus