
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 2] PathResourceLookupFunction.class - apply
[Abbildung 3] PathResourceLookupFunction.class - isInvalidPath
[Abbildung 4] StringUtils.class - cleanPath
[Abbildung 5] PathResourceLookupFunction.class - apply - 2
[Abbildung 6] PathResourceLookupFunction.class - isResourceUnderLocation
[Abbildung 7] StringUtils.class - cleanPath -2
Derzeit 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.
@Bean
public RouterFunction<ServerResponse> staticResourceRouter() {
return RouterFunctions.resources("/static/**", new FileSystemResource("C:/file"))
.filter((request, next) -> {
String path = request.path();
if (path.contains("..")) {
if(!StringUtils.cleanPath(path).contains("../")) {
return ServerResponse.status(HttpStatus.FORBIDDEN).bodyValue("Vuln path access.");
}
}
return next.handle(request);
});
}
Alle URL-Anfragen, die einen ../-Aufstieg im Pfad verursachen, blockieren.
Bisher haben wir File Traversal über Webflux untersucht. Diese Schwachstelle trat auf, weil das aus der Logik von StringUtils.cleanPath() resultierende Problem nicht erkannt wurde.
(POC)
https://github.com/masa42/CVE-2024-38819-POC
(Spring offiziell)
https://spring.io/security/cve-2024-38819
(CVE-DETAIL)
https://www.cvedetails.com/cve/CVE-2024-38819/
(NIST)
https://nvd.nist.gov/vuln/detail/cve-2024-38819