A pasta que se publicou sozinha: um diretório .git exposto
O desafio
A Verdanta faz o deploy da loja rodando git pull no servidor web, o que é prático até você notar que o diretório .git inteiro está dentro da web root, servido para qualquer um que pedir. Um repositório não é só código-fonte: ele lembra como se comunica com a origem. A partir da recon box, confirme que o diretório está exposto e leia o único arquivo que transforma um deploy descuidado na credencial de outra pessoa. Informe o token de deploy que ele vaza.
O que você vai aprender
- Confirmar um diretório .git exposto via HTTP
- Ler o .git/config e encontrar a URL do remote origin
- Reconhecer credenciais embutidas na URL de clone como um segredo vazado
- Explicar por que um .git exposto vaza muito mais do que um único arquivo
- Indicar como fazer deploy sem colocar o .git na raiz web
Habilidades testadas
Pré-requisitos
- Uso do curl
- O que é um remote do git
Como funciona
Fazer deploy rodando git pull no servidor é prático e deixa o diretório .git inteiro ao lado do site. Se esse diretório estiver dentro da raiz web, o servidor entrega seus arquivos a qualquer um que pedir, sem autenticação.
O .git/config registra o remote origin. Quando um repositório foi clonado via HTTPS com usuário e senha na URL, o git grava essa URL, segredo incluído, direto no config. Uma única requisição devolve a credencial de deploy.
É pior do que um arquivo só: .git/objects e os packs permitem que um atacante reconstrua o histórico completo, recuperando todo segredo que já foi commitado e depois removido, todo caminho interno e todas as versões anteriores do código.
Erros comuns
- Parar em
.git/HEAD. Ele confirma a exposição, mas só informa o nome da branch; a credencial está noconfig. - Olhar só a raiz do site. A página inicial está limpa; o vazamento está em
/.git/. - Responder o usuário ou o host.
verdanta-ciegit.verdanta.examplesão contexto; o token é o valor depois dos dois-pontos. - Achar que é preciso o histórico inteiro. Aqui um arquivo basta, embora o histórico também seja recuperável.
Como se proteger
Mantenha o repositório fora da árvore servida e rotacione o que vazou.
- Faça o deploy a partir de um artefato compilado ou de uma exportação com
git archive, ou mantenha o checkout de trabalho fora da raiz de documentos. Nunca sirva o.git. - Bloqueie o acesso a diretórios e arquivos iniciados por ponto no servidor web, como defesa em profundidade.
- Não embuta credenciais na URL de um remote. Use um credential helper ou uma deploy key, e rotacione qualquer token que já tenha sido escrito em uma URL.
- Trate uma credencial que chegou ao
.git/configcomo já pública.