CVE-2017-8046: Schwachstelle für Remote Code Execution (RCE) via PATCH in Spring Data REST

Im Jahr 2017 wurde eine kritische Schwachstelle (CVSS 9.8) in Spring Data REST-Versionen vor 2.6.9 (Ingalls SR9) und 3.0.1 (Kay SR1) sowie in Spring Boot-Versionen vor 1.5.9 und 2.0 M6 identifiziert. Diese Sicherheitslücke ermöglicht es entfernten Angreifern, durch speziell präparierte PATCH-Anfragen beliebigen Code auf dem Server auszuführen. Obwohl die Schwachstelle vom Spring-Team anerkannt und behoben wurde, liegen derzeit keine Berichte über eine weit verbreitete aktive Ausnutzung vor, was wahrscheinlich auf die Spezifität des Angriffs zurückzuführen ist, der eine aktivierte und exponierte JSON-Patch-Verarbeitung erfordert.

ProduktSpring Eureka
Datum02.06.2025 10:53:23
Informationen
  • Trending
  • Fix verfügbar

Technische Zusammenfassung

Die Schwachstelle resultiert aus einer unsicheren Deserialisierung und dem gefährlichen Umgang mit Ausdrücken in der Art und Weise, wie Spring Data REST PATCH-Anfragen mit dem Content-Type application/json-patch+json verarbeitet.

Angreifer können eine JSON-Patch-Operation unter Verwendung der Spring Expression Language (SpEL) konstruieren, wie im folgenden Beispiel:

[
  {
    "op": "replace",
    "path": "T(java.lang.Runtime).getRuntime().exec(\"<command>\").x",
    "value": "pwned"
  }
]

Dies ermöglicht die Ausführung von beliebigem Java-Code (z. B. das Starten von Systembefehlen oder das Exfiltrieren von Daten). Der Ausdruck wird aufgrund der fehlenden Eingabevalidierung bei der PATCH-Verarbeitung vom SpEL-Engine des Spring-Frameworks interpretiert.

Beispiel für eine Ausnutzung mittels curl:

curl --request PATCH \
  -H "Content-Type: application/json-patch+json" \
  -d '[{ "op" : "replace", "path" : "T(java.lang.Thread).sleep(10000).x", "value" : "pwned" }]' \
  http://localhost:8080/entity/1

Dies würde die Antwort um 10 Sekunden verzögern und damit die Code-Ausführung demonstrieren.

Komplexere Payloads können die Ausgabe des Befehls extrahieren oder durch die Ausführung von Befehlen zur Laufzeit Reverse Shells etablieren.

Empfehlungen

  1. Sofortiges Update:

    • Aktualisieren Sie Spring Data REST auf Version 2.6.9 oder höher (Ingalls SR9) bzw. 3.0.1 oder höher (Kay SR1).
    • Aktualisieren Sie Spring Boot auf Version 1.5.9 oder höher bzw. 2.0 M6 oder höher.
  2. JSON PATCH-Unterstützung deaktivieren, falls nicht benötigt:

    • JSON Patch wird in den meisten REST-APIs nicht benötigt. Wenn es nicht verwendet wird, deaktivieren Sie die Unterstützung für application/json-patch+json.
  3. Eingaben filtern und bereinigen:

    • Wenden Sie eine strikte Validierung der Anfragen an, um zu verhindern, dass bösartige Ausdrücke interpretiert werden.

[Callforaction-THREAT-Footer]

Leave a Reply

Your email address will not be published. Required fields are marked *