
Analisi approfondita di CVE-2024-38819, una vulnerabilità di path traversal in Spring WebFlux, con analisi a livello di codice, PoC e strategie di mitigazione inclusi filtri e regole IPS.
La vulnerabilità File-Traversal (path traversal) è un tipo di attacco, identificato come CWE-22, che consente a un attaccante di aggirare i permessi del file system in un'applicazione web e accedere a file arbitrari.
Spring WebFlux è un modulo che supporta la programmazione reattiva, introdotto in Spring 5; supporta lo sviluppo di applicazioni asincrone non bloccanti e WebFlux.fn fornisce il routing funzionale degli endpoint, consentendo configurazioni di routing concise e flessibili tramite espressioni lambda.
CVE-2024-38819 si verifica nelle applicazioni che utilizzano WebFlux.fn e WebMVC.fn; questo documento esamina il flusso del codice per capire come la vulnerabilità si manifesta in WebFlux e cerca di individuare le relative contromisure.
[Figura 1] FileApplication.java
[Figura 1] mostra che in Spring WebFlux tutte le richieste in arrivo su /static/** vengono cercate e servite dalla directory C:/file del server. Qui
[Figura 2] PathResourceLookupFunction.class - apply
[Figura 2] PathResourceLookupFunction - apply verifica che il percorso fornito punti a una risorsa valida in Spring WebFlux e restituisce la risorsa
[Figura 3] PathResourceLookupFunction.class - isInvalidPath
[Figura 3] PathResourceLookupFunction - isInvalidPath mostra la condizione StringUtils.cleanPath(path).contains("../") ,
[Figura 4] StringUtils.class - cleanPath
Osservando [Figura 4] StringUtils.class - cleanPath, StringUtils.cleanPath(path) rimuove TOP_PATH(".."), inserisce il percorso in pathElements e top diventa 0, quindi
[Figura 5] PathResourceLookupFunction.class - apply - 2
[Figura 6] PathResourceLookupFunction.class - isResourceUnderLocation
Con la chiamata a cleanPath in isResourceUnderLocation di [Figura 5], viene eseguita un'ulteriore verifica tramite cleanPath in [Figura 6]; il percorso passato da [Figura 5] è C:/file../Windows/System32/drivers/etc/hosts e
[Figura 7] StringUtils.class - cleanPath -2
Tramite il codice di [Figura 7], prefix diventa C:/ e il percorso viene modificato in /Windows/System32/drivers/etc/hosts tramite [Figura 4]; il ritorno finale èAl momento il test è stato eseguito su Windows con C:/file, ma questo caso è molto pericoloso se combinato con un collegamento simbolico su Linux.
(Con ../../ la logica è normale; la vulnerabilità si verifica solo nel caso di un singolo ../)

Attacco su server Linux con collegamento simbolico
public RouterFunction<ServerResponse> staticResourceRouter() {
return RouterFunctions.resources("/static/**", new FileSystemResource("/app/static/"));
}
Aggiunto il collegamento simbolico con ln -s /static /app/static/link, quindi attacco

Finora abbiamo esaminato il flusso con cui File Traversal (CVE-2024-38819) viene eseguito in ambiente Spring WebFlux. Poiché si tratta di una modalità di attacco che consente il furto delle informazioni del server, le contromisure sono importanti. A tal fine, proponiamo l'aggiornamento all'ultima versione, la creazione di logiche di controllo aggiuntive e il blocco tramite IPS.