
Eine Spring-MVC- oder Spring-WebFlux-Anwendung, die auf JDK 9+ läuft, kann über Datenbindung anfällig für Remote-Code-Ausführung (RCE) sein. Der spezifische Exploit erfordert, dass die Anwendung als WAR-Deployment auf Tomcat läuft. Wenn die Anwendung als ausführbare Spring-Boot-JAR bereitgestellt wird, also der Standardfall, ist sie nicht anfällig für den Exploit. Die Natur der Schwachstelle ist jedoch allgemeiner, und es könnte weitere Möglichkeiten geben, sie auszunutzen.
CVE-2022-22965 (Spring4Shell, SpringShell) ist eine Schwachstelle im Spring Framework, die die Datenbindungsfunktion nutzt, um in einer HTTP-Anfrage gespeicherte Daten an bestimmte, von einer Anwendung verwendete Objekte zu binden. Der Fehler existiert in der Methode getCachedIntrospectionResults, die verwendet werden kann, um unbefugten Zugriff auf solche Objekte zu erlangen, indem ihre Klassennamen über eine HTTP-Anfrage übergeben werden. Dies erzeugt Risiken von Datenlecks und Remote-Code-Ausführung, wenn spezielle Objektklassen verwendet werden. Diese Schwachstelle ähnelt der lange geschlossenen CVE-2010-1622, bei der Klassenprüfungen als Fix hinzugefügt wurden, damit der Name nicht mit classLoader oder protectionDomain übereinstimmte.
Nach dem CVSSv3-System wird es als KRITISCH eingestuft.
Im Folgenden findest du Erkennungsmöglichkeiten für CVE-2022-22965, die zur Identifizierung der Schwachstelle genutzt werden können.
Die aktuellen Bedingungen für die Schwachstelle (wie in Springs Ankündigung der Schwachstelle angegeben) lassen sich wie folgt zusammenfassen:
python3 exploit.py http://10.10.10.10/
Hinweis: Der abschließende Schrägstrich ist hier sehr wichtig!
Suche nach der „action“ des Kontaktformulars (die einzige uns zur Verfügung stehende POST-Anfrage).
<form id="contactForm" action="/" method="post">
Die action ist "/", was bedeutet, dass unsere Ziel-URL einfach http://10.10.10.10/ sein wird.