Todos os guias
Severidade CríticaErros de configuração

Diretório .git exposto: o vazamento de código-fonte à vista de todos

Quando um servidor web serve o diretório .git junto com os arquivos da sua aplicação, um atacante pode baixar objetos suficientes para reconstruir todo o seu código-fonte — incluindo todos os segredos que já foram commitados, mesmo que tenham sido removidos num commit posterior. O AppSafe sinaliza isso como crítico.

O que é

O Git armazena o repositório completo — cada arquivo, cada commit, a ponta de cada branch — num diretório oculto .git na raiz do projeto. Se esse diretório for parar dentro da sua raiz web e o servidor não bloquear o acesso a ele, os arquivos /.git/config, /.git/HEAD e o armazenamento de objetos em /.git/objects/ podem ser baixados publicamente.

Reconstruir o código-fonte completo a partir de um diretório .git exposto é simples. Ferramentas como o git-dumper baixam o índice e depois todos os objetos referenciados, produzindo uma cópia de trabalho totalmente funcional. Os atacantes não precisam de acesso a shell — só de um navegador.

Por que importa

É quase certo que o seu código-fonte contém informações que aumentam o risco: API keys hardcoded (muitas vezes em commits antigos), schemas de banco de dados, caminhos de endpoints internos, regras de negócio e fluxos de autenticação. Mesmo que nenhum segredo esteja commitado hoje, o histórico está cheio de material que atacantes podem explorar.

O histórico do Git é permanente por design. Um segredo commitado anos atrás e depois removido continua no armazenamento de objetos e é baixado junto com todo o resto. Rotacioná-lo é a única forma de neutralizá-lo.

Como corrigir

Bloqueie o .git no nginx

Negue todas as requisições cujo caminho comece com /.git/. Retorne 404 em vez de 403 para não confirmar que o diretório existe.

location ~ /\.git {
  deny all;
  return 404;
}
Mantenha o .git fora da raiz web

A correção mais confiável é nunca publicar o diretório .git na raiz de documentos. Estruture o seu build para que a saída compilada vá para um diretório public/ separado e faça deploy só dele, não da raiz do projeto.

Confirme que está bloqueado

Depois de publicar a correção, abra https://yourdomain.com/.git/config num navegador. Deve retornar 404, não o conteúdo da sua configuração do Git. O AppSafe verifica isso de novo a cada varredura.

Rotacione todos os segredos que já foram commitados

Se o diretório esteve acessível, considere comprometidos todas as API keys, senhas e tokens que já apareceram em qualquer commit. Rotacione-os — remover o commit não basta, porque o objeto continua existindo nos pack files que um atacante pode já ter baixado.

FAQ

Faço deploy numa plataforma gerenciada (Vercel, Netlify, Fly.io) — estou em risco?

Plataformas gerenciadas que fazem o build a partir do código-fonte normalmente publicam só a saída do build, então o diretório .git não é servido. O risco é maior em deploys em VPS, contêineres Docker construídos a partir da raiz do projeto ou exportações de sites estáticos que copiam toda a árvore de trabalho.

O que exatamente o AppSafe verifica?

O AppSafe requisita /.git/config e /.git/HEAD e verifica se o corpo da resposta parece um arquivo real do Git (correspondendo aos padrões [core] ou ref:). Uma página genérica com 200 que não tenha conteúdo do Git não é sinalizada.

Posso simplesmente apagar o diretório .git no servidor?

Sim, se você só precisa dos arquivos publicados para o app rodar. Mas garanta que o seu processo de deploy não o copie de volta no próximo push. Bloqueá-lo também no nível do servidor web é uma defesa extra para quando os scripts de deploy não são consistentes.

Seu app está afetado?

O AppSafe verifica isso e dezenas de outros problemas em um único escaneamento grátis.

Escanear meu app grátis