
Preuve de concept pour CVE-2024-32002: vulnérabilité d'injection de chemin dans les sous-modules Git.
Pendant la résolution de la machine Compiled de la plateforme Hack The Box, j'ai rencontré un comportement curieux impliquant Git et les sous-modules. En creusant plus profondément, j'ai trouvé cet excellent article du chercheur Amal Murali, qui détaille une technique d'injection de chemin via .gitmodules. À partir de là, j'ai décidé d'étudier le CVE-2024-32002 et de créer une PoC pratique démontrant l'impact réel de la vulnérabilité.
Le CVE-2024-32002 exploite une faille critique dans Git liée à la résolution des chemins des sous-modules. Git permet aux dépôts d'inclure des sous-modules définis dans le fichier .gitmodules, spécifiant le chemin et l'URL. La vulnérabilité survient lorsque le chemin est manipulé pour pointer vers l'intérieur du répertoire .git, qui stocke les métadonnées et les configurations internes du dépôt.
En combinant :
.gitmodules pour définir le chemin comme A/modules/xa → .git…Git est trompé et résout A/modules/x comme .git/modules/x, c'est-à-dire à l'intérieur du répertoire interne .git. Cela permet à un attaquant d'injecter des fichiers arbitraires comme des hooks malveillants qui peuvent être exécutés lors d'opérations légitimes comme checkout, merge ou clone.
Cette vulnérabilité représente un vecteur d'exécution de code à distance, particulièrement dangereux dans les environnements CI/CD, les automatisations ou les dépôts partagés.
setup.sh démontreCe script automatise la création d'un environnement vulnérable et reproduit l'impact de la faille :
hook-repo) contenant un hook post-checkout qui écrit dans /tmp/teste.txtmain-repo) et ajoute le sous-module.gitmodules pour rediriger le chemin du sous-module vers A/modules/xa → .git, faisant en sorte que A/modules/x soit résolu comme .git/modules/x.gitmodules malveillant dans l'index en utilisant git update-index --index-infocloned-repo) avec --recursive, initialisant le sous-module.git/hooks/ et exécute git checkout HEAD pour déclencher l'exploitEn cas de succès, le hook est exécuté et le fichier /tmp/teste.txt est créé avec le contenu :
joao was here
Ce dépôt inclut un Dockerfile qui :
docker build -t git-cve-poc .
docker run --rm -it git-cve-poc
Cette vulnérabilité affecte les versions de Git antérieures à 2.45.1. La faille a été corrigée avec des validations plus strictes dans la résolution des chemins des sous-modules. Les dépôts qui utilisent des sous-modules doivent être audités, et les environnements automatisés doivent être mis à jour immédiatement.
Ce projet est uniquement à des fins éducatives et de recherche. Ne l'utilisez pas dans des environnements de production. L'objectif est de démontrer l'impact technique de la vulnérabilité et de promouvoir les bonnes pratiques de sécurité.