Vulnerability Disclosure

Segurança da plataforma.

Política de divulgação responsável (coordinated disclosure) + medidas técnicas atualmente implementadas.

1. Reportar vulnerabilidade

Email: security@crivofino.com.br
security.txt RFC 9116: /.well-known/security.txt

SLA de resposta

SeveridadeACK (acknowledge)Mitigation
Crítica (RCE, auth bypass, PII leak)24h72h
Alta (XSS armazenado, IDOR)48h14 dias
Média (XSS refletido, info disclosure)72h30 dias
Baixa (best practice, hardening)5 diasbacklog normal

2. Regras de engajamento

Permitido:

  • Testes em ambiente staging (URL fornecido sob NDA via security@)
  • Análise estática de código público (quando houver)
  • Recon passivo (DNS, headers, certificados)

NÃO permitido:

  • Atacar usuárias da plataforma OU dados de produção
  • DoS / DDoS / volumetric attacks
  • Engenharia social contra equipe ou fornecedores
  • Acessar sistemas de terceiros (Hostinger infra, Mercado Pago, etc.)
  • Públicar PoC antes de patch + 90 dias coordinated disclosure

3. Coordinated disclosure

Reports válidos seguem disclosure coordenado: 90 dias entre report e publicação técnica (negociável up/down conforme severidade + complexidade fix).

Após patch + período de propagação (clientes atualizarem), publicamos RCA em /transparencia com crédito ao pesquisador (se desejar — anonymous OK também).

4. Bug bounty

MVP: sem bounty monetário. Hall of Fame público + carta de recomendação + agradecimento institucional pra researchers que ajudarem.

Revisaremos política de bounty pós-PMF (Mês 6-12).

5. Medidas implementadas (estado atual MVP)

Auth

  • Better-Auth (magic link via SMTP) — sem armazenamento de senhas
  • Cookies httpOnly + Secure + SameSite=Lax
  • CSRF protection via Origin/Referer check (apps/web/lib/api-helpers.ts)
  • CSP (Content-Security-Policy) headers em next.config.mjs
  • Rate-limit em endpoints sensíveis (@upstash/ratelimit em prod, in-memory dev)

PII

  • T1 PII Split: schemas Prisma separados (public. vs pii. vs auth.)
  • Hash de email + telefone (SHA-256 + pepper rotacionado)
  • Pseudonym tokens UUID v4 substituem userId em conteúdo público
  • Encryption placeholder (encrypted: prefix) — ADR-035 pgsodium real pendente antes de beta

Auditoria

  • Audit log com hash chain SHA-256 (T2 immutable trail)
  • Advisory lock pg_advisory_xact_lock previne race condition (CR-02 fix)
  • Função audit.verify_chain() verifica integridade on-demand
  • Retenção 7 anos audit log + dump S3 WORM Object Lock (futuro)

Admin

  • Role gate requireAdmin() em todas 14 admin pages
  • Middleware Edge defense-in-depth
  • ESLint custom rule crivofino/require-admin-guard trava merge se faltar guard
  • Authority hierarchy: moderator_junior < moderator_senior < admin

Infra

  • TLS 1.3 obrigatório (Caddy + Let's Encrypt auto-renew)
  • HSTS preload + X-Frame-Options DENY + X-Content-Type-Options nosniff
  • Postgres 16 com pgcrypto extension
  • Cron jobs idempotentes (escalation Arcanjo, purge retention, etc.)
  • PM2 process manager com health check + auto-restart

6. Limitações conhecidas (em backlog)

Transparência radical: aqui está o que ainda NÃO está pronto.

  • PII encryption real (pgsodium) — ADR-035 PROPOSED, pendente antes beta
  • Sentry error tracking — scaffolding pronto, no-op até SENTRY_DSN setado
  • Push notifications safety-tech — Crivo Arcanjo Módulo B lembrete usuária ainda placeholder
  • DPIA formal LGPD — pendente contratação advogado especializado
  • Bug bounty monetário — pos-PMF

7. Cumprimento legal

LGPD Art. 46 (segurança e sigilo). Comunicação de incidentes à ANPD em prazo razoável (interpretado: 72h GDPR-style). Comunicação a titulares afetados em casos de risco relevante (Art. 48).

Playbook completo incident response interno em INCIDENT-RESPONSE.md (8 cenários: PM2 crash, PII leak, brute-force, upload malicioso, DB corruption, CVE, Arcanjo cron failure, audit chain forked).