
Analyse approfondie de CVE-2024-38819, une vulnérabilité de type file traversal dans Spring WebFlux, avec analyse au niveau du code, PoC et stratégies d'atténuation incluant des filtres et des règles IPS.
La vulnérabilité File-Traversal (parcours de chemin, Path Traversal) permet à un attaquant de contourner les autorisations du système de fichiers dans une application web et d'accéder à des fichiers arbitraires. Elle est répertoriée sous le code CWE-22 et constitue un type d'attaque.
Spring WebFlux est un module introduit dans Spring 5 qui prend en charge la programmation réactive et le développement d'applications asynchrones non bloquantes. WebFlux.fn fournit un routage fonctionnel des points de terminaison, permettant une configuration de routage concise et flexible à l'aide d'expressions lambda.
CVE-2024-38819 survient dans les applications utilisant WebFlux.fn, WebMVC.fn. Ce document examine comment cette vulnérabilité se produit dans le contexte de WebFlux, en suivant le flux de code, et explore les mesures correctives correspondantes.
[Figure 1] FileApplication.java
[Figure 1] Dans Spring WebFlux, toutes les requêtes vers /static/** sont servies en recherchant dans le répertoire C:/file du serveur. Ici,
[Figure 2] PathResourceLookupFunction.class - apply
[Figure 2] PathResourceLookupFunction - apply vérifie si le chemin donné pointe vers une ressource valide dans Spring WebFlux et retourne cette ressource sous forme de
[Figure 3] PathResourceLookupFunction.class - isInvalidPath
[Figure 3] PathResourceLookupFunction - isInvalidPath montre la condition StringUtils.cleanPath(path).contains("../").
[Figure 4] StringUtils.class - cleanPath
[Figure 4] StringUtils.class - cleanPath montre que StringUtils.cleanPath(path) supprime TOP_PATH (".."), puis place le chemin dans pathElements, et top devient 0. Ainsi,
[Figure 5] PathResourceLookupFunction.class - apply - 2
[Figure 6] PathResourceLookupFunction.class - isResourceUnderLocation
Suite à l'appel de isResourceUnderLocation dans [Figure 5], une nouvelle validation via cleanPath a lieu dans [Figure 6]. Le chemin transmis dans [Figure 5] est C:/file../Windows/System32/drivers/etc/hosts, et
[Figure 7] StringUtils.class - cleanPath -2
Grâce au code de [Figure 7], le préfixe devient C:/, et le chemin est modifié via [Figure 4] en /Windows/System32/drivers/etc/hosts, le retour final étantActuellement, le test a été effectué sur Windows avec C:/file, mais ce cas est très dangereux s'il est combiné avec un lien symbolique sous Linux.
(La vulnérabilité ne se produit que lorsque ".." est présent une seule fois ; avec "../.." deux fois, le comportement normal s'applique.)

Attaque avec un lien symbolique sur un serveur Linux
public RouterFunction<ServerResponse> staticResourceRouter() {
return RouterFunctions.resources("/static/**", new FileSystemResource("/app/static/"));
}
Ajout du lien symbolique : ln -s /static /app/static/link, puis attaque

Nous avons examiné le déroulement de l'attaque File Traversal (CVE-2024-38819) dans l'environnement Spring WebFlux. Il s'agit d'une méthode d'attaque permettant le vol d'informations du serveur, d'où l'importance des mesures correctives. Nous proposons ici la mise à jour vers la dernière version, la création d'une logique de validation supplémentaire, et le blocage via un IPS.
@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("Accès à un chemin vulnérable.");
}
}
return next.handle(request);
});
}
Bloquer toute requête URL contenant ../ provoquant un déplacement vers un répertoire parent
Nous avons étudié le File Traversal via WebFlux. Cette vulnérabilité provient de l'utilisation de StringUtils.cleanPath() sans avoir conscience du problème dans sa logique.
(POC)
https://github.com/masa42/CVE-2024-38819-POC
(Spring officiel)
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
