/ TL;DR

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.example no repo com placeholders.
  • .env no .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.

EV

Equipe Varredura

Time de pesquisa de segurança · Varredura

Sua app em produção passa por essa análise?

Rode uma varredura autônoma em ~60 segundos. Sem cadastro.

Analisar minha aplicação →