
Tiefgehende Analyse von CVE-2024-38819, einer Spring WebFlux Dateipfad-Traversal-Schwachstelle, mit code-level Aufschlüsselung, PoC und Minderungsstrategien einschließlich Filter und IPS-Regeln.
File-Traversal (Pfad-Traversal, Path Traversal) Schwachstelle ist eine Schwachstelle, die es Angreifern ermöglicht, Dateisystemberechtigungen in Webanwendungen zu umgehen und auf beliebige Dateien zuzugreifen. Sie ist als CWE-22 klassifiziert.
Spring WebFlux ist ein in Spring 5 eingeführtes Modul, das reaktive Programmierung unterstützt, die Entwicklung asynchroner nicht-blockierender Anwendungen ermöglicht und mit WebFlux.fn funktionale Endpunkt-Routing bereitstellt, das eine prägnante und flexible Routing-Konfiguration mit Lambda-Ausdrücken unterstützt.
CVE-2024-38819 tritt in Anwendungen auf, die WebFlux.fn oder WebMVC.fn verwenden. Dieses Dokument untersucht den Code-Ablauf, wie diese Schwachstelle in WebFlux ausgelöst wird, und sucht nach entsprechenden Gegenmaßnahmen.
[Abbildung 1] FileApplication.java
[Abbildung 1] zeigt, dass Spring WebFlux alle Anfragen an /static/** aus dem Verzeichnis C:/file des Servers bedient. Hier
[Abbildung 2] PathResourceLookupFunction.class - apply
[Abbildung 2] PathResourceLookupFunction - apply überprüft in Spring WebFlux, ob der angegebene Pfad auf eine gültige Ressource verweist, und gibt diese Ressource als
[Abbildung 3] PathResourceLookupFunction.class - isInvalidPath
[Abbildung 3] PathResourceLookupFunction - isInvalidPath zeigt, dass die Bedingung StringUtils.cleanPath(path).contains("../") existiert.
[Abbildung 4] StringUtils.class - cleanPath
[Abbildung 4] StringUtils.class - cleanPath zeigt, dass StringUtils.cleanPath(path) den TOP_PATH("..") entfernt, den Pfad in pathElements ablegt und top auf 0 setzt, sodass
[Abbildung 5] PathResourceLookupFunction.class - apply - 2
[Abbildung 6] PathResourceLookupFunction.class - isResourceUnderLocation
Durch den Aufruf von cleanPath in isResourceUnderLocation aus [Abbildung 5] wird über [Abbildung 6] eine erneute Prüfung mit cleanPath durchgeführt, und der in [Abbildung 5] übergebene Pfad ist C:/file../Windows/System32/drivers/etc/hosts.
[Abbildung 7] StringUtils.class - cleanPath -2
Durch den Code in [Abbildung 7] wird das Präfix zu C:/, der Pfad wird über [Abbildung 4] zu / Windows/System32/drivers/etc/hosts geändert, und die endgültige Rückgabe erfolgt alsDerzeit wurde der Test unter Windows mit C:/file durchgeführt, aber dieser Fall ist sehr gefährlich, wenn er unter Linux mit symbolischen Links ausgeführt wird.
(Bei zweimaligem ../../ funktioniert die normale Logik, die Schwachstelle tritt nur bei einmaligem ../ auf)

Angriff mit symbolischem Link auf einem Linux-Server
public RouterFunction<ServerResponse> staticResourceRouter() {
return RouterFunctions.resources("/static/**", new FileSystemResource("/app/static/"));
}
Nach dem Hinzufügen eines symbolischen Links ln -s /static /app/static/link Angriff durchführen

Bisher haben wir den Ablauf von File Traversal (CVE-2024-38819) in der Spring Webflux-Umgebung überprüft. Da es sich um eine Angriffsmethode handelt, bei der Serverinformationen gestohlen werden, sind Gegenmaßnahmen wichtig. Dazu schlagen wir Aktualisierung auf die neueste Version, Erstellung zusätzlicher Prüflogik und Blockierung durch IPS vor.