Secrets commitados são a causa de metade dos incidentes de conta comprometida em startup. Guia técnico para varrer histórico, revogar corretamente e configurar prevenção antes que aconteça de novo.
Secret commitado no Git é o incidente mais comum e evitável em 2026. Aparece em 38% dos apps que a Varredura audita. Este guia é o roteiro completo pra achar, revogar e nunca mais deixar acontecer.
Detectar: histórico completo
Comitou secret hoje, apagou amanhã. Ainda está no histórico. Ferramentas que varrem histórico:
- gitleaks: rápido, flexível. Rodar com
gitleaks detect --source .. - trufflehog: encontra padrões novos por entropia.
- git-secrets: foco em AWS.
Rode contra --all (todos os branches, todo o histórico).
Revogar corretamente
Regra 1: antes de qualquer outra coisa, revogue a credencial. Não importa se "foi só 1 minuto". Bots varrem GitHub em segundos.
Revogar significa:
- API key: rotacionar no provedor (AWS, Stripe, OpenAI, etc.).
- Senha DB: mudar no banco, atualizar em todos os serviços.
- Chave SSH: revogar no servidor.
- JWT secret: mudar E invalidar tokens ativos.
Regra 2: só depois de revogar, reescrever o histórico Git (git filter-repo). Reescrever antes = falso senso de segurança enquanto secret já vazou.
Reescrever histórico
git filter-repo --path config.env --invert-paths
git push --force origin main
Todos os desenvolvedores precisam re-clonar. Tags de release precisam ser regeradas.
Downside: PRs abertos ficam órfãos. Comunicar com o time antes.
Prevenir: pre-commit hook
.pre-commit-config.yaml:
repos:
- repo: https://github.com/gitleaks/gitleaks
rev: v8.18.0
hooks:
- id: gitleaks
Todo dev roda pre-commit install uma vez. Depois, commit com secret é bloqueado localmente.
Prevenir: GitHub Secret Scanning
Habilita em Settings > Security > Secret scanning. GitHub varre push contra padrões conhecidos (Stripe, AWS, GCP, etc.). Notifica você e o provedor.
Prevenir: revisão de PR sistemática
Um item no PR template:
- [ ] Nenhum secret (API key, senha, token) foi commitado
Reviewer verifica.
O que fazer no dia a dia
.env.exampleno repo com placeholders..envno.gitignore.- Secrets em variável de ambiente OU vault (HashiCorp, AWS Secrets Manager, Doppler).
- Rotação a cada 90 dias.
Anti-padrão comum
"O repo é privado, tá tudo bem."
Não. Colaborador desligado ainda tem clone local. Empresa comprada e vendida. Backup exportado. Fork acidental. Repo privado hoje pode ser público amanhã por engano de configuração.
Ferramenta bônus
git-crypt: criptografa arquivos específicos no repo (arquivo cifrado no Git, decifrado local). Útil se você precisa versionar secret por razão específica (chave de assinatura de release, por exemplo).
TL;DR
- Varrer histórico completo com gitleaks.
- Revogar antes de reescrever histórico.
- Pre-commit hook local.
- GitHub Secret Scanning ativo.
- Rotação a cada 90 dias.
A Varredura testa em runtime se algum secret conhecido está exposto via endpoint. Rodar agora.
Sua app em produção passa por essa análise?
Rode uma varredura autônoma em ~60 segundos. Sem cadastro.