Secrets no Histórico Git (o vetor GitHub #1)

Só leitura — não altera nada no alvo. Só em alvo seu ou autorizado por escrito.

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:

  1. GitHub Search avançado: filename:wrangler.jsonc SUPABASE_SERVICE_ROLE — busca em repos públicos.
  2. GitHub Dorks: extension:env SUPABASE_SERVICE_ROLE_KEY — encontra .env commitados.
  3. GitRob/GitMonitor: clona repos de um alvo (user/org) e roda regex de secrets automaticamente.
  4. TruffleHog: escaneia histórico git inteiro com verificação de validade (testa se a chave funciona).
  5. GitHub token scanning: GitHub detecta alguns secrets automaticamente, mas NÃO detecta sbp_ (Supabase) nem JWT_SECRET custom.
  6. Fork + PR attack: invasor faz fork, vê os secrets no histórico do fork.

Como corrigir

Correção necessária (P0 — urgente):

  1. 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
  2. Adicionar wrangler.jsonc ao .gitignore e usar wrangler secret put para cada variável.
  3. Limpar histórico com BFG Repo-Cleaner:
    # 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 --force
    
    OU com git-filter-repo:
    pip install git-filter-repo
    git filter-repo --invert-paths --path app/wrangler.jsonc
    git push --force
    
  4. GitHub Push Protection: ativar no repo (Settings → Code security → Push protection) — bloqueia commit de secrets conhecidos.
  5. GitHub Secret Scanning: ativar (Settings → Code security → Secret scanning) — alerta se secrets vazarem.
  6. Antes de publicar o repo: rodar gitleaks detect --source . localmente. Se encontrar algo, NÃO publicar.

PurpleLab // plataforma de treino ofensivo + defensivo // Fase 1 — portal dinamico