CVE-2022-22963 & Spring4Shell (CVE-2022-22965) im Überblick
Was Sie unbedingt wissen sollten:
Zwei RCE-Schwachstellen werden oft verwechselt und stiften Verwirrung: Bei der einen (die Spring Cloud betrifft) handelt es sich um CVE-2022-22963 und bei der anderen (die Spring Framework betrifft) um CVE-2022-22965.
Für beide Bugs ist aktiver Exploit Code frei im Umlauf.
Fastly Kunden können sich vor dieser Sicherheitslücke schützen.
Sowohl für CVE-2022-22963 als auch für CVE-2022-22965 sind Patches erhältlich.
Bei den Tools von Spring handelt es sich um Frameworks, die die Entwicklung von JavaScript Anwendungen beschleunigen und sich bei Java Entwicklern großer Beliebtheit erfreuen. Die hier besprochenen Bugs beziehen sich auf die Pakete Spring Cloud und Spring Framework. Zu reichlich Verwirrung kam es diese Woche bei der Frage, ob es sich bei diesen Bugs um ein und dasselbe Problem handelt. Die Antwort lautet nein, wir haben es hier mit zwei verschiedenen Bugs zu tun. Beide Bugs führen dazu, dass beliebiger Code auf einem Remote Host ausgeführt werden kann, der Webanwendungen bereitstellt, wenn betroffene Versionen der Software ausgeführt werden. Es liegt auf der Hand, dass ein solches Maß an unautorisierter Kontrolle über eine potenziell öffentlich zugängliche Infrastruktur erhebliche Auswirkungen haben kann.
Was die Auswirkungen sind:
CVE-2022-22963:
Diese Schwachstelle lässt sich sehr leicht ausnutzen und ermöglicht es Angreifern, beliebigen Code über einen HTTP-Header namens spring.cloud.function.routing-expression
an Spring Expression Language (SpEL) zu übergeben, da dieser Parameter von Cloud Function nicht validiert wird. Die Auswirkungen sind ziemlich gravierend, wenn man bedenkt, wie leicht diese Schwachstelle ausgenutzt werden kann. Die Verfügbarkeit ist davon aber kaum betroffen, da sich die Schwachstelle nur auf Services auswirkt, die Spring Cloud Function <=3.1.6 (für 3.1.x) und <=3.2.2 (für 3.2.x) ausführen.
CVE-2022-22965:
Diese Schwachstelle betrifft Spring MVC und Spring WebFlux Anwendungen, die unter JDK 9 oder höher laufen. Der spezifische Exploit erfordert, dass die Anwendung auf Tomcat als WAR Datei bereitgestellt wird. Wenn die Anwendung standardgemäß als ausführbares Spring Boot JAR bereitgestellt wird, ist sie nicht anfällig für den Exploit. Die Schwachstelle ist allerdings von allgemeinerer Natur, weshalb es möglicherweise weitere Wege gibt, sie auszunutzen.
Warum das Ganze so interessant ist:
CVE-2022-22963 ist eine Ausdruckssprachschwachstelle, die eine Remote-Codeausführung (RCE) ermöglicht. Es gab bereits einige andere bekannte Schwachstellen (darunter CVE-2017-8046), die auf ähnliche Bedingungen für die Remote-Codeausführung abzielten. Ein erneutes Auftreten dieser Art von Bugs im selben Framework und mit denselben Ausführungs-möglichkeiten sollte bei denjenigen, die dieses Framework nutzen, Fragen aufwerfen.
CVE-2022-22965 ist ebenfalls eine RCE-Schwachstelle in Spring Framework, für die bereits vor der CVE Veröffentlichung ein Proof of Concept durchgesickert war, das sich auf eine 12 Jahre alte Schwachstelle im selben Code bezieht (CVE-2010-1622).
Ja, aber …
CVE-2022-22963:
Diese Schwachstelle betrifft Spring Cloud Function <=3.1.6 (für 3.1.x) und <=3.2.2 (für 3.2.x). Sie lässt sich durch einfaches Ändern eines Anfrage-Headers ausnutzen. Es scheint jedoch, als sei die Anzahl der Services, die Spring Cloud Function nutzen, weitaus geringer als die von Spring Framework selbst. Dadurch dürften auch die Auswirkungen deutlich geringer ausfallen.
CVE-2022-22965:
Um diese Schwachstelle ausnutzen zu können, müssen folgende Bedingungen erfüllt sein:
JDK ab Version 9
Apache Tomcat als Servlet Container
Komprimierung als traditionelle WAR Datei (statt als ausführbare Spring Boot JAR)
spring-webmvc
- oder spring-webflux
-AbhängigkeitSpring Framework Versionen 5.3.0 bis 5.3.17 bzw. 5.2.0 bis 5.2.19 oder älter
Aber selbst wenn die oben genannten Bedingungen erfüllt sind, bedeutet das nicht immer, dass Remote-Code erzwungen werden kann.
Noch tieferer Einstieg in die Materie:
CVE-2022-22963:
Bei der Untersuchung von CVE-2022-22963 wurde schnell klar, dass der Exploit über einen Header stattfand. Dieser Exploit wurde aufgrund seiner Einfachheit an vielen Stellen veröffentlicht. Hier ein Beispiel für eine POST-Anfrage für diese Schwachstelle:
POST /functionRouter HTTP/1.1
host:127.0.0.1:8080
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.2 Safari/605.1.15
Connection: close
spring.cloud.function.routing-expression:T(java.lang.Runtime).getRuntime().exec("touch /tmp/pwned")
Content-Length: 1
.
CVE-2022-22963 ist ein einfacher Exploit des Zugriffs auf Spring Cloud Funktionen durch Manipulation der Event Routing Funktion. Indem Angreifer „spring.cloud.function.routing-expression“ als HTTP-Header bei einem bestimmten Satz an Strings einfügen, erhalten sie Zugriff auf Funktionen wie getRunTime().exec(), getByName() und andere, die für sie nicht verfügbar sein sollten.
CVE-2022-22965:
Bei diesem Bug werden die Java Eigenschaften, die mit dem Laden von Klassen verbunden sind, nicht ordnungsgemäß gefiltert und ermöglichen es so Angreifern, einen Speicherort und einen Template-Namen für eine Klasse anzugeben, aus der geladen werden soll. Dies ist auch aus den veröffentlichten Proofs of Concept ersichtlich. Insbesondere werden folgende Properties in einem HTTP POST gesendet, um den Dateinamen im lokalen Dateisystem zu erzeugen:
class.module.classLoader.resources.context.parent.pipeline.first.directory
class.module.classLoader.resources.context.parent.pipeline.first.prefix
class.module.classLoader.resources.context.parent.pipeline.first.suffix
class.module.classLoader.resources.context.parent.pipeline.first.fileDateFormat
Anschließend wird die Eigenschaft class.module.classLoader.resources.context.parent.pipeline.first.pattern
genutzt, um festzulegen, welcher Template-Name im nächsten Schritt übergeben werden kann, um das Objekt anzugeben, das in die Datei geschrieben und ausgeführt wird.
Der nächste Angriffsschritt besteht darin, den Template-Namen als HTTP-Header zu senden, der den auszuführenden Java Code enthält.
In dem geleakten Proof of Concept, den unser Team erhalten hat, wurde folgender Code zum Starten einer Shell verwendet:
Runtime.getRuntime().exec(request.getParameter("cmd"))
Die erfolgreiche Ausführung scheint davon abhängig zu sein, dass die Eigenschaften durch die POST-Anfrage festgelegt werden. Andere Researcher haben aber eine Methode geteilt, um die Exposition über einen GET-Command, der auch „classLoader“-Properties enthält, zu testen.
Die Notwendigkeit, „classLoader“-Properties zu manipulieren, um sie testen oder ausnutzen zu können, gibt Security-Spezialisten die Möglichkeit, bei forensischen Untersuchungen nach einem leicht erkennbaren String zu suchen. Die spezifischen Werte, die den Properties zugewiesen werden, können dann weitere Details darüber liefern, an welcher Stelle in Dateisystemen gesucht werden sollte oder bei welchen Befehlen es zu Ausführungsversuchen kam.
Was Sie tun sollten:
Wie bei allen Bugs besteht die empfohlene Vorgehensweise zur Beseitigung oder Behebung des Grundproblems in der Anwendung verfügbarer Patches. Während CVE-2022-22965 bereits vor der Verfügbarkeit von Patches im Umlauf war, gibt es für beide Bugs inzwischen Patches.
CVE-2022-22963:
Einzelheiten zu den verfügbaren Patches finden Sie hier.
Nutzer der betroffenen Versionen sollten ein Upgrade auf 3.1.7, 3.2.3 durchführen. Es sind keine weiteren Schritte erforderlich. In folgenden Versionen wurde dieses Problem bereits behoben:
Spring Cloud Function
3.1.7
3.2.3
CVE-2022-22965:
Einzelheiten zu den verfügbaren Patches finden Sie hier.
Spring Framework 5.3.18 und 5.2.20, die diese Fixes bereits enthalten, wurden veröffentlicht.
Spring Boot 2.6.6 und 2.5.12, die von Spring Framework 5.3.18 abhängig sind, wurden veröffentlicht.
Für diese CVE hat Spring zusätzlich zu den Patches weitere Informationen zur Begrenzung der Auswirkungen für diejenigen Nutzer bereitgestellt, die die Patches nicht anwenden können.
Es wird ausdrücklich davor gewarnt, die empfohlene Einstellung disallowedFields
in WebDataBinder
über eine @ControllerAdvice
hinzuzufügen:
@ControllerAdvice
@Order(Ordered.LOWEST_PRECEDENCE)
public class BinderControllerAdvice {
@InitBinder
public void setAllowedFields(WebDataBinder dataBinder) {
String[] denylist = new String[]{"class.*", "Class.*", "*.class.*", "*.Class.*"};
dataBinder.setDisallowedFields(denylist);
}
}
Dies ist zwar im Allgemeinen eine praktikable Lösung, als zentral angewandte Umgehungslösung lässt sie jedoch möglicherweise einige Hintertüren offen. Wir empfehlen, die vollständigen Anweisungen im Spring Blog zu befolgen.
Außerdem können Fastly Kunden mithilfe unserer WAF-Produkte Abwehrmaßnahmen gegen diese Schwachstellen implementieren.
CVE-2022-22963:
Die Fastly Next-Gen WAF (powered by Signal Sciences) kann diese Sicherheitslücke erkennen. Wenn Sie ein Next-Gen WAF Kunde sind, können Sie auch die folgenden Schritte ausführen, um eine Templated Rule zu aktivieren, die Sie vor der Ausnutzung von CVE-2022-22963 schützt.
Navigieren Sie zu den Templated Rules und suchen Sie nach „CVE-2022-22963“.
Klicken Sie auf „Configure“ und aktivieren Sie Block requests from an IP immediately if the CVE-2022-22963 signal is observed.
Für Kunden der herkömmlichen Fastly WAF können wir VCL-basierte Abhilfemaßnahmen gegen die vorliegende Bedrohung bereitstellen. Wenn Sie Unterstützung bei der Anwendung dieser Konfiguration wünschen, wenden Sie sich bitte an unser CSOC unter securitysupport@fastly.com.
CVE-2022-22965:
Die Fastly Next-Gen WAF (powered by Signal Sciences) kann diese Sicherheitslücke erkennen. Wenn Sie ein Next-Gen-WAF-Kunde sind, können Sie auch die folgenden Schritte ausführen, um eine Templated Rule zu aktivieren, die Sie vor der Ausnutzung von CVE-2022-22965 schützt.
Navigieren Sie zu den Templated Rules und suchen Sie nach „CVE-2022-22965“.
Klicken Sie auf „Configure“ und aktivieren Sie Block requests from an IP immediately if the CVE-2022-22965 signal is observed.
Für Kunden der herkömmlichen Fastly WAF können wir VCL-basierte Abhilfemaßnahmen gegen die vorliegende Bedrohung bereitstellen. Wenn Sie Unterstützung bei der Anwendung dieser Konfiguration wünschen, wenden Sie sich bitte an unser CSOC unter securitysupport@fastly.com.