1. Reportar vulnerabilidade
Email: security@crivofino.com.br
security.txt RFC 9116: /.well-known/security.txt
SLA de resposta
| Severidade | ACK (acknowledge) | Mitigation |
|---|---|---|
| Crítica (RCE, auth bypass, PII leak) | 24h | 72h |
| Alta (XSS armazenado, IDOR) | 48h | 14 dias |
| Média (XSS refletido, info disclosure) | 72h | 30 dias |
| Baixa (best practice, hardening) | 5 dias | backlog 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.vspii.vsauth.) - 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_lockprevine 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-guardtrava 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).