Files
4ventures-client-portal/SECURITY.md
2026-09-21 18:16:44 +02:00

1.7 KiB

Security — Centro de Mando (app.4ventures.es)

Incident NOW (secretos filtrados)

El PDF “Agencia 2030” y el antiguo .env.example del repo contenían JWTs reales (anon + service_role) y passwords de demo.

  1. En Supabase Studio → Settings → API: regenerar anon y service_role.
  2. Actualizar secrets en Dokploy / env del contenedor app y de n8n.
  3. Cambiar passwords de admin@… y clientes demo; invalidar sesiones.
  4. Rotar ANTHROPIC_API_KEY si estuvo en chats/docs.
  5. Confirmar que .env.example solo tiene placeholders (ya corregido en este repo).

Superficies a restringir (amenaza)

Host Acción
git.4ventures.es VPN / IP allowlist / Basic Auth delante de Gitea
n8n-agencia UI No público; solo webhooks con path secreto
supabase Studio Solo red interna / SSO admin
app Público OK; APIs tras sesión (middleware)

Patch Traefik listo en .ops/HARDEN_SURFACES.md (no aplicado).
Candidata egress oficina (2026-09-21): 90.161.248.78/32 — confirmar si es fija antes de allowlist.

Controles en código (este repo)

  • Middleware exige sesión en /dashboard/* y /api/* (excepto /api/health).
  • /api/chat y /api/simulate exigen usuario + tenant_id en metadata.
  • /api/admin/* bloqueado para rol client.
  • Activos leen documents vía cliente SSR (RLS), no anon global.
  • Headers: frame deny, nosniff, robots noindex, HSTS en prod.

RLS (verificar en Studio)

Ejecutar checklist en sql/rls_checklist.sql. Sin RLS real, el multi-tenant es cosmético.

Cron / n8n

  • Webhooks solo POST.
  • Header secreto compartido (X-Webhook-Secret / HMAC) en lead-inbound y deal-won.
  • No loguear bodies con PII a stdout público.