Skip to content

Plataforma técnica · Seguridad

Seguridad del Sistema

Seguridad

La seguridad del ecosistema Nostromo se organiza como defensa en profundidad. Cada solicitud debe pasar por controles de identidad, autorización, alcance de tenant, validación de entrada, auditoría y protección de datos antes de modificar información contable, laboral o tributaria.

Identidad y sesión

Orchestrator autentica usuarios con POST /api/auth/login, emite una cookie sid HttpOnly y valida cada solicitud contra auth.user_sessions.

Autorización RBAC

authenticateToken, authorizeRoute y requireRole restringen rutas según rol, recurso y operación.

Aislamiento de tenant

tenantResolver resuelve la base de datos activa por usuario o por tenant_id explícito cuando el rol es SUPER_ADMIN.

Auditoría

auditMiddleware y auditLog registran login, logout, mutaciones, denegaciones, exportaciones y cambios de configuración.

flowchart LR
  Browser["Sevastopol"] --> Edge["Edge HTTPS"]
  Edge --> API["Orchestrator API"]
  API --> Auth["authenticateToken"]
  Auth --> Session["auth.user_sessions"]
  Auth --> RBAC["authorizeRoute / requireRole"]
  RBAC --> Tenant["tenantResolver"]
  Tenant --> Domain["Servicio de dominio"]
  Domain --> DB["Base tenant"]
  Domain --> Audit["auditLog"]
  Audit --> Monitoring["monitoring.audit_log"]
CapaControlImplementación principalCriterio de aceptación
TransporteHTTPS, CORS y headers de seguridadhelmet, cors y plataforma de despliegueEl tráfico público opera por TLS y solo acepta orígenes configurados
IdentidadLogin con contraseña y sesión revocableroutes/command/auth.ts, middleware/auth.tsLa cookie sid existe solo tras credenciales válidas y sesión persistida
Segundo factorTOTP y códigos de respaldodomain/auth/totpUsuarios con TOTP habilitado no reciben sesión hasta verificar el desafío
AutorizaciónRBAC por ruta y rol explícitolib/rbac.ts, requireRoleLas rutas sensibles devuelven 403 para roles no autorizados
Tenant scopeResolución controlada de base tenantlib/tenantResolver.tsUsuarios normales no eligen tenant arbitrario; SUPER_ADMIN debe declararlo
AuditoríaRegistro de eventos y mutacioneslib/audit.tsLogin, logout, cambios y errores relevantes quedan trazables
DatosClasificación, cifrado y redacciónGuías de protección de datosNo se registran secretos, tokens, RUT reales ni remuneraciones en claro
RiesgoMitigación vigenteRevisión esperada
Fuerza bruta sobre loginloginRateLimiter limita a 5 intentos por 15 minutosVerificar que el proxy conserva IP real mediante x-forwarded-for o x-real-ip
Sesión comprometidaSesiones persistidas en auth.user_sessions y revocables por logout o kill switchRevisar sesiones activas desde Command ante incidente
Escalada de privilegiosauthorizeRoute, requireRole y rutas declaradas en RBACCada endpoint nuevo declara middleware antes del handler
Fuga entre tenantsResolución de base por usuario y estado activo del tenantToda operación tenant-scoped usa getDatabaseNameForUser o contexto equivalente
Exposición en logsSanitización de auditoría y regla de no registrar datos críticosRevisar logs antes de merge cuando se agregan campos sensibles
Inyección SQLConsultas parametrizadas y builders compartidosNo concatenar entradas de usuario en SQL
  1. Identificar si la ruta es pública, autenticada, administrativa o tenant-scoped.
  2. Confirmar que el handler valida entrada antes de invocar servicios de dominio.
  3. Verificar que la ruta usa authenticateToken y, cuando corresponde, authorizeRoute o requireRole.
  4. Confirmar que el servicio opera contra el tenant correcto y no acepta tenant_id arbitrario para usuarios no privilegiados.
  5. Revisar que errores y logs no expongan credenciales, tokens, RUT reales, remuneraciones ni datos financieros críticos.
  6. Agregar o actualizar documentación cuando el control sea parte del contrato público de seguridad.