Secrets no Histórico Git (o vetor GitHub #1)
O vetor
Vetor real: invasores usam ferramentas automatizadas (TruffleHog, gitleaks, GitRob) que clonam repositórios públicos do GitHub e escaneiam TODOS os commits — não só o estado atual. Mesmo que você remova o secret do arquivo atual, ele permanece no histórico. Se o repo for público ou se alguém conseguir acesso (token de collaborator, fork, breach), o invasor extrai TODAS as credenciais que já foram commitadas. O que testamos: quantos secrets estão no seu histórico git e se estão acessíveis.
Os passos
Passo 1 — Contar secrets expostos no histórico:
cd /d/Antigravity-Monetizacao_TikTok
git log --all -p | grep -c "SUPABASE_SERVICE_ROLE_KEY\|OPENAI_API_KEY\|JWT_SECRET\|CLOUDFLARE_API_TOKEN\|sbp_fcf0\|GOOGLE_AI_STUDIO_KEY\|DATA_FOR_SEO_AUTH\|ADMIN_PASSWORD_HASH\|CRON_SECRET"
O que esperar
Resultado esperado (validado ao vivo):
75
✅ Confirmado: 75 ocorrências de secrets em todo o histórico git. Cada uma é uma credencial que um invasor extrairia se o repo fosse público ou se ganhasse acesso.
Passo 2 — Extrair um secret real do histórico (prova de conceito):
git log --all -p -- "app/wrangler.jsonc" | grep "OPENAI_API_KEY" | head -3
Resultado esperado:
+ "OPENAI_API_KEY": "sk-proj-***REDIGIDO — o valor completo aparece no seu terminal***",
✅ A chave OpenAI completa está no histórico. Um invasor copia e usa na própria conta — você paga a conta. ⚠️ Nunca copie o valor real da chave para documentos, tickets ou chats — o comando mostra no terminal para você, mas o registro fica sempre redigido.
Passo 3 — Verificar se wrangler.jsonc está no .gitignore:
grep "wrangler" .gitignore
Resultado esperado: vazio. wrangler.jsonc NÃO está no .gitignore — continua sendo commitado a cada mudança.
Passo 4 — Simular o que um invasor faz (clone + scan):
# O que um invasor faria se o repo estivesse no GitHub:
# 1. git clone https://github.com/seu-usuario/Antigravity-Monetizacao_TikTok.git
# 2. gitleaks detect --source . --report-path=leaks.json
# 3. cat leaks.json | jq '.[] | .Secret' → todas as chaves
# Simulação local (sem precisar publicar):
git log --all -p | grep -oP '(sk-proj-[A-Za-z0-9_-]+|eyJhbGci[A-Za-z0-9._-]+|sbp_[a-f0-9]+)' | sort -u
Resultado esperado: lista de TODAS as chaves únicas extraíveis do histórico — OpenAI sk-proj-..., Supabase eyJhbGci..., Management API sbp_fcf0....
Análise — como invasores encontram dados no GitHub:
- GitHub Search avançado:
filename:wrangler.jsonc SUPABASE_SERVICE_ROLE— busca em repos públicos. - GitHub Dorks:
extension:env SUPABASE_SERVICE_ROLE_KEY— encontra.envcommitados. - GitRob/GitMonitor: clona repos de um alvo (user/org) e roda regex de secrets automaticamente.
- TruffleHog: escaneia histórico git inteiro com verificação de validade (testa se a chave funciona).
- GitHub token scanning: GitHub detecta alguns secrets automaticamente, mas NÃO detecta
sbp_(Supabase) nemJWT_SECRETcustom. - Fork + PR attack: invasor faz fork, vê os secrets no histórico do fork.
Como corrigir
Correção necessária (P0 — urgente):
- Rotacionar TODOS os secrets nos respectivos painéis (cada chave atual está comprometida):
- Supabase: Settings → API → Reset Service Role Key
- OpenAI: platform.openai.com → API Keys → Delete + Create new
- Google AI Studio: aistudio.google.com → regenerar
- DataForSEO: dashboard → regenerar
- Cloudflare: dash.cloudflare.com → API Tokens → Roll
- JWT_SECRET: gerar novo com
openssl rand -base64 32 - Admin password: trocar + re-hash com bcrypt
sbp_token: Supabase Dashboard → Account → Access Tokens → Revoke
- Adicionar
wrangler.jsoncao.gitignoree usarwrangler secret putpara cada variável. - Limpar histórico com BFG Repo-Cleaner:
OU com git-filter-repo:# Baixar BFG: https://rtyley.github.io/bfg-repo-cleaner/ java -jar bfg.jar --replace-text passwords.txt git reflog expire --expire=now --all git gc --prune=now --aggressive git push --forcepip install git-filter-repo git filter-repo --invert-paths --path app/wrangler.jsonc git push --force - GitHub Push Protection: ativar no repo (Settings → Code security → Push protection) — bloqueia commit de secrets conhecidos.
- GitHub Secret Scanning: ativar (Settings → Code security → Secret scanning) — alerta se secrets vazarem.
- Antes de publicar o repo: rodar
gitleaks detect --source .localmente. Se encontrar algo, NÃO publicar.