
Proof of Concept für CVE-2024-32002: Git submodule path injection vulnerability.
Während der Lösung der Maschine Compiled der Plattform Hack The Box bin ich auf ein merkwürdiges Verhalten im Zusammenhang mit Git und Submodulen gestoßen. Bei der tiefergehenden Untersuchung fand ich diesen exzellenten Beitrag des Forschers Amal Murali, der eine Technik zur Pfad-Injektion über .gitmodules beschreibt. Daraufhin entschloss ich mich, CVE-2024-32002 zu studieren und einen praktischen PoC zu erstellen, der die tatsächlichen Auswirkungen der Schwachstelle demonstriert.
CVE-2024-32002 nutzt einen kritischen Fehler in Git im Zusammenhang mit der Auflösung von Submodul-Pfaden aus. Git erlaubt es Repositorys, Submodule aufzunehmen, die in der Datei .gitmodules definiert sind, mit Angabe von Pfad und URL. Die Schwachstelle entsteht, wenn der Pfad so manipuliert wird, dass er auf das Verzeichnis .git zeigt, das Metadaten und interne Konfigurationen des Repositorys speichert.
Durch die Kombination von:
.gitmodules, um den Pfad auf A/modules/x zu setzena → .git…wird Git getäuscht und löst A/modules/x als .git/modules/x auf, also innerhalb des internen .git-Verzeichnisses. Dadurch kann ein Angreifer beliebige Dateien wie schädliche Hooks injizieren, die bei legitimen Operationen wie checkout, merge oder clone ausgeführt werden können.
Diese Schwachstelle stellt einen Vektor für Remote-Code-Ausführung dar, der besonders gefährlich in CI/CD-Umgebungen, Automatisierungen oder gemeinsamen Repositorys ist.
setup.sh demonstriertDieses Skript automatisiert die Erstellung einer verwundbaren Umgebung und reproduziert die Auswirkungen des Fehlers:
hook-repo), das einen post-checkout-Hook enthält, der in /tmp/teste.txt schreibtmain-repo) und fügt das Submodul hinzu.gitmodules, um den Pfad des Submoduls auf A/modules/x umzuleitena → .git, sodass A/modules/x als .git/modules/x aufgelöst wird.gitmodules in den Index ein, mit git update-index --index-infocloned-repo) mit , wobei das Submodul initialisiert wirdBei Erfolg wird der Hook ausgeführt und die Datei /tmp/teste.txt mit folgendem Inhalt erstellt:
joao was here
Dieses Repository enthält ein Dockerfile, das:
setup.sh ausführtdocker build -t git-cve-poc .
docker run --rm -it git-cve-poc
Diese Schwachstelle betrifft Git-Versionen vor 2.45.1. Der Fehler wurde mit strengeren Validierungen bei der Auflösung von Submodul-Pfaden behoben. Repositorys, die Submodule verwenden, sollten überprüft werden, und automatisierte Umgebungen sollten sofort aktualisiert werden.
Dieses Projekt dient ausschließlich Bildungs- und Forschungszwecken. Nicht in Produktionsumgebungen verwenden. Ziel ist es, die technischen Auswirkungen der Schwachstelle zu demonstrieren und bewährte Sicherheitspraktiken zu fördern.
--recursive.git/hooks/ und führt git checkout HEAD aus, um den Exploit auszulösen