🔴 Vulnerabilidades Critical
A anon key do Supabase está exposta no JavaScript do frontend. Usando essa chave, qualquer pessoa na internet pode acessar diretamente a API REST e extrair dados sensíveis de TODOS os 27 usuários sem nenhuma autenticação.
⚠️ Dados expostos publicamente:
- 27 perfis completos — nome, email, telefone, WhatsApp, data de nascimento, cargo, role
- Empresas — CNPJ, razão social, cidade, estado
- Máquinas — catálogo com preços internos (base_price, programmed_price)
- Team members — telefones e dados de contato da equipe
- Pending users — usuários aguardando aprovação
- Calendar events — eventos internos do calendário
- Branches — dados de filiais
- Calculator config — configurações internas de calculadoras
- Lotes — dados de lotes de tintas
Endpoint: https://cfrvopucfkfepdhgungr.supabase.co/rest/v1/
Reprodução:
- Extrair anon key do JS bundle (/_next/static/chunks/1d512f03c78abcbb.js)
- Fazer GET em /rest/v1/profiles?select=* com header apikey
- Todos os dados retornam sem autenticação
curl "https://cfrvopucfkfepdhgungr.supabase.co/rest/v1/profiles?select=full_name,email,phone,whatsapp,birthday,role" \
-H "apikey: eyJhbGci..." -H "Authorization: Bearer eyJhbGci..."
Correção: Configurar Row Level Security (RLS) no Supabase para TODAS as tabelas. Profiles, companies, machines, team_members devem exigir autenticação. Dados sensíveis (telefone, CPF, birthday) devem ser acessíveis apenas ao próprio usuário e admins.
O endpoint /rest/v1/ retorna o schema OpenAPI completo com todas as 123 tabelas, suas colunas e relacionamentos. Isso dá a um atacante o mapa completo do banco de dados.
123 tabelas expostas incluindo: profiles, admin_users, audit_log, notification_log, machines, companies, market_insights, kpis, etc.
Correção: Desabilitar o endpoint OpenAPI em produção ou restringir acesso apenas a usuários autenticados via Supabase Dashboard → API Settings.
A tabela machines está acessível sem autenticação e expõe preços internos: base_price, programmed_price, percentuais de entrada e margens. Informação comercial altamente sensível.
Exemplo de dados vazados:
PrismaTex 1.9m → base_price: R$ 55.851,15 / programmed: R$ 47.473,48
MTRE 1602 → base_price: R$ 69.813,94 / programmed: R$ 59.341,85
min_entry_percent: 39% / entry splits: 15%, 15%, 10%
Correção: RLS na tabela machines. Preços internos NUNCA devem ser públicos. Separar preço de venda (público) de custo interno (admin only).
Telefones pessoais, WhatsApp, datas de nascimento, endereços e emails de 27 colaboradores estão acessíveis publicamente via API. Isso constitui violação direta da Lei Geral de Proteção de Dados (LGPD).
Dados expostos por pessoa:
- Nome completo, email corporativo
- Telefone pessoal e WhatsApp
- Data de nascimento
- Cargo e role no sistema
- ID interno (UUID), avatar URL
- Token de calendário iCal (permite acesso ao calendário!)
Correção urgente: Implementar RLS imediata em profiles. Tokens de calendário são especialmente perigosos — permitem acesso externo ao calendário de cada funcionário.
🟠 Bugs High
O header Strict-Transport-Security está configurado com max-age=0, o que efetivamente desabilita HSTS. Isso permite ataques de downgrade HTTPS → HTTP (man-in-the-middle).
Header: strict-transport-security: max-age=0; includeSubDomains
Correção: Alterar para max-age=31536000; includeSubDomains; preload no Cloudflare ou no servidor.
Nenhum dos headers de segurança padrão está presente:
| Header | Status | Risco |
Content-Security-Policy | ❌ Ausente | XSS, injeção de scripts |
X-Frame-Options | ❌ Ausente | Clickjacking |
X-Content-Type-Options | ❌ Ausente | MIME sniffing |
Referrer-Policy | ❌ Ausente | Vazamento de URLs |
Permissions-Policy | ❌ Ausente | Abuso de APIs do browser |
X-XSS-Protection | ❌ Ausente | XSS em browsers legados |
Correção: Adicionar todos os headers via Cloudflare Workers, next.config.js ou middleware do Next.js.
Cada perfil de usuário contém um campo ical_feed_token (UUID) que provavelmente permite acesso ao feed iCal do calendário do funcionário. Com esse token, um atacante pode monitorar a agenda de qualquer funcionário.
Ex: ical_feed_token: "337dea0c-5062-4432-a59b-8b5811f67ac1"
Correção: Nunca expor tokens de calendário via API pública. Filtrar esse campo no RLS.
🟡 Bugs Medium
13 de 27 usuários (48%) não aceitaram os termos de uso. O portal lida com dados sensíveis (inteligência de mercado, preços, dados pessoais) sem garantia legal de que os usuários concordaram com os termos.
Correção: Forçar aceite de termos no login antes de acessar qualquer funcionalidade.
O formulário de registro como "Sou Cliente" solicita CPF com a justificativa "para convites VIP em feiras". CPF é dado sensível e sua coleta sem necessidade comprovada viola o princípio de minimização da LGPD.
/registro/ → Sou Cliente → campo CPF
Correção: Tornar CPF opcional ou coletá-lo apenas quando necessário (ex: emissão de NF).
A área de Inteligência de Mercado contém dados confidenciais sobre preços de concorrentes, leads e pesquisas. Apesar do aviso "Confidencial — uso exclusivo em planejamento estratégico", verificar se todos os perfis (colaborador, representante) têm acesso.
/dashboard/inteligencia-mercado/
Dashboard de KPIs mostra faturamento mensal (R$ 2.5M), ticket médio, metas de vendas, NPS score e market share. Verificar se todos os colaboradores devem ter acesso a esses dados financeiros.
/dashboard/kpis/
🔵 Bugs Low
8+ CSS chunks são preloaded via <link rel="preload"> mas não utilizados, gerando dezenas de warnings no console em toda navegação. Impacta performance e bandwidth.
Todas as páginas — console do DevTools
A barra de navegação inferior (Voltar, Início, Calendário, Timer, Cartão) sobrepõe conteúdo da página em diversas telas, especialmente Chamados, Feedback, TCO e Tabela Máquinas.
Correção: Adicionar padding-bottom: 80px no container principal.
A seção "4tex Mag" na home mostra artigos de 2021-2022 ("O que esperar de 2022?", "outono/inverno 2022"). Passa impressão de portal abandonado e compromete a credibilidade.
Home → seção "4tex Mag"