
Análise aprofundada de CVE-2024-38819, uma vulnerabilidade de travessia de arquivo Spring WebFlux, com detalhamento em nível de código, PoC e estratégias de mitigação incluindo filtros e regras de IPS.
A vulnerabilidade File-Traversal (navegação de caminho, Path Traversal) é uma vulnerabilidade que permite a um atacante contornar as permissões do sistema de arquivos em uma aplicação web e acessar arquivos arbitrários, sendo um tipo de ataque designado como CWE-22.
O Spring WebFlux é um módulo introduzido no Spring 5 que oferece suporte à programação reativa, permitindo o desenvolvimento de aplicações assíncronas não bloqueantes. O WebFlux.fn fornece roteamento de endpoints funcional, suportando uma configuração de roteamento concisa e flexível por meio de expressões lambda.
A CVE-2024-38819 ocorre em aplicações que utilizam WebFlux.fn e WebMVC.fn. Este documento examina o fluxo de código de como essa vulnerabilidade ocorre no contexto do WebFlux e busca explorar medidas de mitigação correspondentes.
[Figura 1] FileApplication.java
[Figura 1] No Spring WebFlux, todas as requisições que chegam a /static/** são servidas a partir do diretório C:/file do servidor. Aqui,
[Figura 2] PathResourceLookupFunction.class - apply
[Figura 2] PathResourceLookupFunction - apply verifica se o caminho fornecido aponta para um recurso válido no Spring WebFlux e retorna esse recurso
[Figura 3] PathResourceLookupFunction.class - isInvalidPath
[Figura 3] Em PathResourceLookupFunction - isInvalidPath, existe a condição StringUtils.cleanPath(path).contains("../"),
[Figura 4] StringUtils.class - cleanPath
[Figura 4] Em StringUtils.class - cleanPath, StringUtils.cleanPath(path) remove TOP_PATH("..") e insere o caminho em pathElements, com top tornando-se 0, portanto
[Figura 5] PathResourceLookupFunction.class - apply - 2
[Figura 6] PathResourceLookupFunction.class - isResourceUnderLocation
[Figura 5] Com a chamada de cleanPath em isResourceUnderLocation, uma nova validação é realizada por meio de cleanPath na [Figura 6], sendo o caminho encaminhado na [Figura 5] C:/file../Windows/System32/drivers/etc/hosts.
[Figura 7] StringUtils.class - cleanPath -2
[Figura 7] Através do código da [Figura 7], o prefixo torna-se C:/ e o caminho é alterado para /Windows/System32/drivers/etc/hosts por meio da [Figura 4], de modo que o retorno final éAtualmente, o teste foi realizado no Windows com C:/file, mas esse caso é muito perigoso quando combinado com um link simbólico no Linux.
(Quando configurado com ../../ duas vezes, é uma lógica normal; a vulnerabilidade ocorre somente quando há um único ../)

Ataque com link simbólico no servidor Linux
public RouterFunction<ServerResponse> staticResourceRouter() {
return RouterFunctions.resources("/static/**", new FileSystemResource("/app/static/"));
}
Após adicionar o link simbólico ln -s /static /app/static/link, realizar o ataque

Até agora, verificamos o fluxo em que o File Traversal (CVE-2024-38819) é executado no ambiente Spring WebFlux. Por ser um método de ataque que rouba as informações do servidor,
as medidas de mitigação são importantes. Para isso, propomos a atualização para a versão mais recente, a criação de lógica adicional de verificação e o bloqueio por meio de IPS.