https://a.storyblok.com/f/270183/1368x665/f7d37747ed/25feb_dev-blog_secret-token-git-history.png

Como remover um token secreto do seu histórico do Git

Publicado em February 11, 2025

Tempo de leitura: 3 minutos

Introdução

Neste artigo, você aprenderá como remover com segurança tokens de autenticação expostos de todo o histórico do seu repositório Git usando BFG, uma poderosa ferramenta de limpeza. Você também compreenderá os riscos de segurança associados a segredos confirmados e dominará o processo passo a passo para sanear seu repositório de código e proteger os ativos digitais da sua organização. Vamos começar!

O Alerta de Segurança Inesperado

Imagine o seguinte: você é um desenvolvedor, totalmente imerso em um sprint importante, quando, de repente, um ticket do JIRA chega à sua caixa de entrada. O assunto do e-mail te dá um calafrio: “Problema crítico de segurança – Token do NPM exposto no histórico do repositório.”

A verificação automatizada de segurança revelou algo alarmante: um token de autenticação acidentalmente enviado para o repositório há anos, enterrado em commits de 4, 7 e 8 anos atrás. Pode parecer história antiga, mas no mundo da segurança cibernética, segredos antigos podem ser bombas-relógio. E seu CISO pode ser bem insistente em resolver esses problemas (com razão…).

Ok, você pode parar de imaginar, porque isso aconteceu conosco na Vonage. Felizmente, você pode aprender com a nossa experiência.

Os riscos ocultos dos tokens expostos

Um token de autenticação exposto é mais do que apenas um pequeno descuido. Ele representa uma vulnerabilidade de segurança significativa que poderia, potencialmente:

  • Permitir acesso não autorizado a registros de pacotes privados

  • Expor a infraestrutura sensível da empresa

  • Oferecer um possível ponto de entrada para agentes mal-intencionados

  • Riscos relacionados à propriedade intelectual da empresa

  • Pode violar os requisitos de conformidade

O dano à reputação causado por uma violação de segurança pode superar em muito a conveniência momentânea de uma ação precipitada.

A primeira coisa que você gostaria de fazer nesse caso é “rotacionar” a(s) chave(s) secreta(s) envolvida(s). Basta zerá-las e criar novas. Mas o risco não termina aí, pois, como alguém comentou em uma discussão em um grupo de JavaScript, chaves antigas e obsoletas podem conter uma pista sobre o próprio algoritmo do gerador de chaves. Não sou especialista em segurança cibernética (nem de longe), então vou confiar na opinião dos especialistas sobre isso. Como, então, nos livramos da chave exposta no repositório?

Conheça o BFG: seu melhor amigo na limpeza do histórico do Git

A solução? O BFG (Big Fast Git) é uma ferramenta poderosa projetada para limpar os históricos dos repositórios do Git de forma rápida e eficiente. Aqui está um guia passo a passo para a remoção de tokens:

  1. Peça a todos que estão trabalhando no repositório que aguardem alguns minutos até que você envie suas alterações.

  2. Baixe o BFG e copie para a pasta correspondente.

  3. Clone o repositório usando um espelho:

    git clone --mirror https://github.com/your-name/your-repo.git

    Sugiro fazer isso duas vezes em duas pastas diferentes, para que você tenha um backup do seu repositório “antigo” caso algo dê errado.

  4. Crie um arquivo tokens.txt com a sintaxe de substituição:

    old_token1==>PLACE_HOLDER1
    old_token2==>PLACE_HOLDER2
    ...

    Isso fará com que o BFG substitua todas as ocorrências dos tokens antigos por seus substitutos.

    Um exemplo disso seria:

    ab23234-89723c-aa7b7c==>${NPM_TOKEN}
    
  5. Execute o BFG com o arquivo substituto (certifique-se de estar na pasta raiz do repositório):

    java -jar bfg-1.14.0.jar --replace-text tokens.txt your-repo.git --no-blob-protection
  6. Limpar o repositório:

    cd your-repo.git
    git reflog expire --expire=now --all && git gc --prune=now --aggressive
  7. Verifique se o token foi substituído clonando o espelho local e executando o comando “grep” nele:

    cd .. && git clone your-repo.git && cd your-repo && git grep -n "REPLACE _WITH_YOUR_TOKEN

    Se isso retornar 0 resultados, significa que funcionou.

  8. Enviar as alterações à força:

    cd your-repo.git
    git push --mirror

  9. Peça aos seus colegas de equipe para baixarem e aplicarem as alterações:

    git fetch
    git reset --hard origin/main 

É isso aí. Seu repositório agora está limpo. A partir de agora, imagino que a mesma ferramenta que te alertou sobre os tokens possa dar o alarme durante um processo de PR, antes que o token se “espalhe” para o branch principal. Certifique-se de que isso aconteça 😉

Dicas profissionais para o gerenciamento de tokens

  • Nunca envie tokens diretamente para repositórios

  • Utilize variáveis de ambiente ou ferramentas seguras de gerenciamento de segredos

  • Implemente ganchos de pré-confirmação para evitar confirmações acidentais de tokens

  • Faça auditorias regulares no histórico do seu repositório

  • Troque os tokens periodicamente, especialmente se suspeitar que eles tenham sido expostos

Considerações finais

Em uma época de crescentes ameaças à segurança cibernética, o gerenciamento proativo de repositórios não é apenas uma boa prática — é uma necessidade. Ferramentas como o BFG oferecem aos desenvolvedores mecanismos poderosos para corrigir erros do passado e manter a integridade de seus repositórios de código.

Embora tenhamos nos concentrado na substituição de tokens, o BFG é uma ferramenta versátil capaz de:

  • Remoção de arquivos grandes do histórico do repositório

  • Limpeza de informações confidenciais

  • Reduzindo o tamanho do repositório

  • Limpeza de commits antes de tornar os projetos de código aberto

Se você concorda com os motivos pelos quais deve usar commits convencionais, o BFG pode permitir que você aprimore seus commits antigos com uma versão significativa e um texto de changelog.

Lembre-se de que, no desenvolvimento de software, o que é confirmado nem sempre é definitivo, graças a ferramentas como o BFG.

Conte-nos quais outros problemas com o Git você está enfrentando na nossa Slack da Comunidade Vonage ou envie-nos uma mensagem no X, antes conhecido como Twitter.

Compartilhar:

https://a.storyblok.com/f/270183/400x400/7bf76cb05c/yonatankra.png
Yonatan KraArquiteto de Software da Vonage

Yonatan já participou de alguns projetos incríveis tanto no meio acadêmico quanto no setor privado — desde C/C++, passando por Matlab, até PHP e JavaScript. Ex-CTO da Webiks e arquiteto de software na WalkMe. Atualmente, ele é arquiteto de software na Vonage e instrutor na Egghead.