Goal Reached Thanks to every supporter — we hit 100%!

Goal: 1000 CNY · Raised: 1020 CNY

100%

CVE-2024-32002 PoC — Git's recursive clones on case-insensitive filesystems that support symlinks are susceptible to Remote Code Execution

Source
Associated Vulnerability
Title:Git's recursive clones on case-insensitive filesystems that support symlinks are susceptible to Remote Code Execution (CVE-2024-32002)
Description:Git is a revision control system. Prior to versions 2.45.1, 2.44.1, 2.43.4, 2.42.2, 2.41.1, 2.40.2, and 2.39.4, repositories with submodules can be crafted in a way that exploits a bug in Git whereby it can be fooled into writing files not into the submodule's worktree but into a `.git/` directory. This allows writing a hook that will be executed while the clone operation is still running, giving the user no opportunity to inspect the code that is being executed. The problem has been patched in versions 2.45.1, 2.44.1, 2.43.4, 2.42.2, 2.41.1, 2.40.2, and 2.39.4. If symbolic link support is disabled in Git (e.g. via `git config --global core.symlinks false`), the described attack won't work. As always, it is best to avoid cloning repositories from untrusted sources.
Readme
# 💥 CVE-2024-32002 – Git Submodule Path Injection PoC

## Motivação

Durante a resolução da máquina **Compiled** da plataforma Hack The Box, me deparei com um comportamento curioso envolvendo Git e submódulos. Ao investigar mais a fundo, encontrei [este excelente post](https://amalmurali.me/posts/git-rce/) do pesquisador Amal Murali, que detalha uma técnica de injeção de caminho via `.gitmodules`. A partir disso, decidi estudar o CVE-2024-32002 e criar uma PoC prática que demonstrasse o impacto real da vulnerabilidade.


## 🧠 Visão geral da vulnerabilidade

O CVE-2024-32002 explora uma falha crítica no Git relacionada à resolução de caminhos de submódulos. O Git permite que repositórios incluam submódulos definidos no arquivo `.gitmodules`, especificando caminho e URL. A vulnerabilidade surge quando o caminho é manipulado para apontar para dentro do diretório `.git`, que armazena metadados e configurações internas do repositório.

Ao combinar:

- **Manipulação do `.gitmodules`** para definir o caminho como `A/modules/x`
- **Criação de um symlink `a → .git`**

…o Git é enganado e resolve `A/modules/x` como `.git/modules/x`, ou seja, **dentro do diretório interno `.git`**. Isso permite que um atacante injete arquivos arbitrários como hooks maliciosos que podem ser executados em operações legítimas como `checkout`, `merge` ou `clone`.

Essa vulnerabilidade representa um vetor de execução remota de código, especialmente perigoso em ambientes CI/CD, automações ou repositórios compartilhados.

---

## ⚙️ O que o script `setup.sh` demonstra

Este script automatiza a criação de um ambiente vulnerável e reproduz o impacto da falha:

1. **Cria um submódulo malicioso (`hook-repo`)** contendo um hook `post-checkout` que escreve em `/tmp/teste.txt`
2. **Inicializa o repositório principal (`main-repo`)** e adiciona o submódulo
3. **Modifica o arquivo `.gitmodules`** para redirecionar o caminho do submódulo para `A/modules/x`
4. **Cria um symlink `a → .git`**, fazendo com que `A/modules/x` seja resolvido como `.git/modules/x`
5. **Injeta o `.gitmodules` malicioso no índice** usando `git update-index --index-info`
6. **Realiza um commit legítimo** para simular atividade normal
7. **Clona o repositório (`cloned-repo`) com `--recursive`**, inicializando o submódulo
8. **Copia o hook malicioso para `.git/hooks/`** e executa `git checkout HEAD` para disparar o exploit

Se bem-sucedido, o hook é executado e o arquivo `/tmp/teste.txt` é criado com o conteúdo:

```bash
joao was here
```

# 🐳 Ambiente Docker
Este repositório inclui um Dockerfile que:

  1. **Instala o Git 2.45.0 (versão vulnerável)
  2. **Cria um usuário normal (joao)
  3. **Copia os arquivos da PoC
  4. **Executa automaticamente o setup.sh

# 🔧 Como reproduzir
```bash
docker build -t git-cve-poc .
docker run --rm -it git-cve-poc
```

# 🔐 Impacto e mitigação
Essa vulnerabilidade afeta versões do Git anteriores à 2.45.1. A falha foi corrigida com validações mais rígidas na resolução de caminhos de submódulos. 
Repositórios que usam submódulos devem ser auditados, e ambientes automatizados devem ser atualizados imediatamente.

# ⚠️ Aviso legal
Este projeto é apenas para fins educacionais e de pesquisa. Não use em ambientes de produção. O objetivo é demonstrar o impacto técnico da vulnerabilidade e promover boas práticas de segurança.
File Snapshot

[4.0K] /data/pocs/984e0824b25a810936bb6f190233baf32fcfdc77 ├── [1.2K] Dockerfile ├── [3.4K] README.md └── [1.8K] setup.sh 1 directory, 3 files
Shenlong Bot has cached this for you
Remarks
    1. It is advised to access via the original source first.
    2. Local POC snapshots are reserved for subscribers — if the original source is unavailable, the local mirror is part of the paid plan.
    3. Mirroring, verifying, and maintaining this POC archive takes ongoing effort, so local snapshots are a paid feature. Your subscription keeps the archive online — thank you for the support. View subscription plans →