Pular para o conteúdo

Um segredo vazou no repositório: o que fazer

Intermediário12 min de leituraseguranca

Você acabou de descobrir uma chave commitada. A ordem importa mais que a velocidade — e a primeira coisa não é apagar o commit.

Enquanto a credencial for válida, todo o resto é secundário.

Janela do terminal
# AWS: desative primeiro (reversível), crie a nova, migre, só então apague
aws iam update-access-key --access-key-id AKIA... --status Inactive --user-name ci-loja
aws iam create-access-key --user-name ci-loja
# depois de tudo migrado:
aws iam delete-access-key --access-key-id AKIA... --user-name ci-loja
# GitHub: revogue o token na página de tokens ou pela API
# Banco: ALTER USER <usuario> WITH PASSWORD '<nova>';
# Cofre: vault kv put segredo/loja/api token=<novo>

Desativar antes de apagar dá reversibilidade: se algo parar de funcionar, você reativa por minutos enquanto conserta. Apagar direto pode transformar um incidente de segurança em um incidente de disponibilidade.

Se a credencial for de terceiro (gateway de pagamento, provedor de e-mail), revogue pelo painel deles e avise o suporte — muitos têm procedimento próprio.

Janela do terminal
# desde quando o segredo está no histórico
git log --oneline -S 'AKIA' --all | tail -5
git log --format='%H %ad %an' --date=iso -1 <commit-do-vazamento>

Registre: qual credencial, qual escopo de permissão, desde quando, e quem teve acesso ao repositório nesse período. Essas quatro respostas determinam o tamanho do problema — uma chave somente leitura exposta por uma hora não é o mesmo que uma chave de administrador exposta por oito meses.

Janela do terminal
# AWS: a chave foi usada? de onde?
aws cloudtrail lookup-events \
--lookup-attributes AttributeKey=AccessKeyId,AttributeValue=AKIA... \
--start-time 2026-08-01 --max-results 50
# GitHub: eventos de auditoria da organização
gh api /orgs/empresa/audit-log --paginate -f phrase='action:git.clone'

O que procura: acesso de IP ou país fora do padrão, horário incomum, chamadas de API que o pipeline nunca faz (listar buckets, criar usuário, alterar política). Se encontrar qualquer coisa assim, isso deixa de ser rotação de credencial e vira incidente de segurança — acione o processo de incidentes e o time de segurança.

Janela do terminal
# ferramenta recomendada hoje para reescrever histórico
pip install git-filter-repo
git filter-repo --path config/credenciais.env --invert-paths
git push --force --all && git push --force --tags

O que a reescrita não resolve: clones já existentes, forks, o cache de commits do GitHub (peça a remoção pelo suporte), builds antigos do CI com o valor em log, e a memória de quem viu.

Por isso a ordem deste guia: rotação é a correção; reescrita é higiene. Avise o time antes do --force, porque todo mundo precisa refazer o clone.

  • Time dono do serviço e time de segurança.
  • Quem opera os sistemas que usam aquela credencial (a rotação pode quebrá-los).
  • Se houver dado pessoal envolvido, o encarregado pela LGPD — a avaliação de incidente é dele, não sua.
  • Registre em postmortem sem procurar culpado: a pergunta é por que era possível commitar aquilo.

Duas camadas, porque uma sempre falha:

Janela do terminal
# 1. antes do commit, na máquina de quem escreve
gitleaks protect --staged --redact
# como hook de pre-commit, para todo o time
pre-commit install
# 2. no CI, sobre o histórico completo
- name: Varredura de segredos
run: gitleaks detect --redact --log-opts="--all" --exit-code 1

Ative também a varredura nativa do provedor (GitHub secret scanning e push protection, que bloqueia o push antes de o segredo entrar). E ataque a causa: se o segredo estava no repositório, é porque não havia um caminho fácil para fazer diferente — veja tirar segredos do Git em GitOps e deploy sem chave com OIDC.

  • Credencial rotacionada e a antiga revogada.
  • Escopo e janela de exposição documentados.
  • Logs de auditoria verificados para uso indevido.
  • Histórico limpo (opcional) com o time avisado.
  • Segurança, donos dos sistemas e encarregado comunicados.
  • Varredura no pre-commit e no CI ativa.
  • Postmortem com ação estrutural, não com aviso de “tomar cuidado”.