· Orquestador Markdown → HTML · ROUTE_SILENTLY → md-document document: 18 slides: 8 review: 0

Análisis de Arquitectura: NovaSaaS Platform

📁 analisis-plataforma-saas.md 🏢 NovaSaaS S.L. 📅 Junio 2026 ✍️ CULTIVA IA 📄 v2.1

Resumen Ejecutivo

Este informe presenta el análisis de la plataforma SaaS B2B de NovaSaaS tras una auditoría de 3 semanas. La plataforma presenta deuda técnica significativa en el módulo de facturación y una arquitectura de microservicios parcialmente implementada que genera inconsistencias en la capa de datos.

⚠ Importante

Se detectaron 3 vulnerabilidades críticas de seguridad en el módulo de autenticación que requieren atención inmediata antes de continuar con cualquier nueva funcionalidad.

ÁreaEstadoPrioridad
AutenticaciónCríticoP0
Base de datosDegradadoP1
API GatewayEstableP2
FrontendObsoletoP2
FacturaciónRotoP0

Estado Actual

Infraestructura

La plataforma está desplegada en AWS con una arquitectura híbrida monolito-microservicios:

  • Backend principal: Node.js 16 (EOL) + Express 4.18
  • Base de datos: PostgreSQL 13 (sin pooling de conexiones)
  • Cache: Redis 6.2 (configuración por defecto, sin eviction policy)
  • Frontend: React 17 + Webpack 4 (sin code splitting)
  • Autenticación: JWT con secretos hardcodeados en .env.production
ℹ Nota

Node.js 16 llegó a End-of-Life en septiembre 2023. La plataforma lleva 30+ meses sin actualizaciones de seguridad en el runtime.

Métricas de Rendimiento

MétricaValor ActualObjetivoEstado
P50 latencia API340 ms< 200 ms⚠ Degradado
P95 latencia API2.100 ms< 800 ms✗ Crítico
Uptime (90d)97.2%> 99.5%✗ Crítico
Errores 5xx/día847< 50✗ Crítico
Tiempo despliegue45 min< 10 min✗ Crítico

Cobertura de Tests

text
Módulo de Autenticación:   12% cobertura
Módulo de Facturación:      3% cobertura
API REST:                  28% cobertura
Frontend:                   0% cobertura
─────────────────────────────────────
Total:                     11% cobertura

Hallazgos Críticos

P0 — Vulnerabilidades de Seguridad

CVE-2024-21538 (jsonwebtoken): La versión 8.5.1 tiene una vulnerabilidad de verificación de firma que permite forjar tokens si el atacante conoce el algoritmo none.

Secretos expuestos: El repositorio Git tiene 14 commits históricos con credenciales AWS y claves de Stripe en texto plano.

SQL Injection potencial: El módulo de reporting usa concatenación directa de strings en 7 endpoints sin parametrizar.

ℹ Acción recomendada

Rotar inmediatamente todas las credenciales y reescribir el historial Git con git filter-repo antes de cualquier auditoría externa.

P0 — Módulo de Facturación Roto

Race condition en el procesamiento de pagos recurrentes — sin lock distribuido:

javascript
// PROBLEMA: No hay lock distribuido
async function processRecurringPayment(subscriptionId) {
  const sub = await Subscription.findById(subscriptionId);
  if (sub.status === 'active' && sub.nextBillingDate <= new Date()) {
    await chargeCustomer(sub.customerId, sub.amount); // puede ejecutarse 2x
    await sub.update({ nextBillingDate: addMonth(sub.nextBillingDate) });
  }
}

Esto ha causado cobros duplicados a 23 clientes en los últimos 6 meses (€4.200 en reembolsos).

P1 — Degradación de Base de Datos

PostgreSQL opera sin connection pooling. Bajo carga, se abren hasta 340 conexiones contra un límite de max_connections = 100:

MomentoConexiones picoResultado
Lunes 09:00340Caída 12 min
Viernes 18:00287Degradación 35 min
Fin de mes412Caída 28 min

Arquitectura Propuesta

La visión target elimina el acceso directo a base de datos y centraliza la autenticación:

ascii
┌─────────────────────────────────────────────────────┐
│                   CloudFront CDN                     │
└─────────────────────┬───────────────────────────────┘
                      │
┌─────────────────────▼───────────────────────────────┐
│              API Gateway (Kong)                      │
│  Rate limiting · Auth · Request validation           │
└──────┬──────────────┬──────────────┬────────────────┘
       │              │              │
┌──────▼──────┐ ┌─────▼──────┐ ┌───▼──────────┐
│   Auth SVC  │ │ Billing SVC│ │  Core API    │
│  (Keycloak) │ │  (Stripe)  │ │  (Node 20)   │
└──────┬──────┘ └─────┬──────┘ └───┬──────────┘
       │              │             │
┌──────▼──────────────▼─────────────▼────────┐
│           PostgreSQL + PgBouncer            │
│        Redis (con eviction LRU)             │
└─────────────────────────────────────────────┘

Cambios Clave

  1. Keycloak reemplaza el sistema JWT casero → SSO, MFA, gestión centralizada
  2. PgBouncer en modo transaction pooling → máx 20 conexiones reales
  3. Kong API Gateway → rate limiting por tenant, circuit breaker
  4. Node.js 20 LTS → soporte activo, 40% mejora de rendimiento V8
  5. Stripe Billing nativo → elimina race condition de facturación

Plan de Migración

Fase 1 — Seguridad (Semanas 1-2)

  • Rotar todas las credenciales (AWS, Stripe, JWT secrets)
  • Reescribir historial Git con git filter-repo
  • Actualizar jsonwebtoken a 9.0.2
  • Parametrizar los 7 endpoints vulnerables a SQL Injection
  • Activar WAF en CloudFront (managed ruleset OWASP)
💡 Tip

El proceso de rotación requiere ventana de mantenimiento de 2 horas. Recomendamos programarla para el próximo domingo entre 02:00-04:00 CET.

Fase 2 — Estabilización (Semanas 3-6)

  • Instalar y configurar PgBouncer (transaction mode, pool_size=15)
  • Migrar facturación recurrente a Stripe Billing con webhooks idempotentes
  • Subir Node.js de 16 a 20 LTS
  • Configurar Redis con eviction policy allkeys-lru y maxmemory 2GB

Fase 3 — Modernización (Semanas 7-14)

  • Desplegar Kong API Gateway en modo DB-less
  • Implementar Keycloak 24 con realm NovaSaaS
  • Migrar autenticación (feature flag por porcentaje de usuarios)
  • Actualizar React 17 → 18 + Vite (eliminar Webpack 4)
  • Implementar CI/CD con GitHub Actions + Terraform

Estimaciones

FaseHorasCoste (€)Duración
Fase 1 — Seguridad40h4.800 €2 semanas
Fase 2 — Estabilización80h9.600 €4 semanas
Fase 3 — Modernización160h19.200 €8 semanas
Total280h33.600 €14 semanas

ROI Estimado

Ahorro reembolsos
8.400 €
por año
Ahorro downtime
12.000 €
por año
Reducción soporte P0/P1
15.600 €
por año
Mejora conversión
28.000 €
por año
Ahorro total anual
64.000 €
Payback estimado: 6.3 meses

Riesgos

RiesgoProbabilidadImpactoMitigación
Regresión en migración JWT Media Alto Feature flag + rollback plan
Downtime en migración DB Baja Alto Blue-green deployment
Resistencia interna al cambio Alta Medio Workshops semanales con el equipo
Desvío de presupuesto >20% Baja Medio Sprints con entregables cerrados
ℹ Nota

Todos los cambios de Fase 1 son reversibles sin downtime usando feature flags. Las Fases 2 y 3 requieren ventanas de mantenimiento planificadas.

Conclusiones

NovaSaaS tiene una plataforma con fundamentos sólidos pero deuda técnica acumulada que representa un riesgo operativo y de seguridad significativo. La intervención en tres fases permite:

  1. Eliminar el riesgo de seguridad inmediato (Fase 1, 2 semanas)
  2. Estabilizar la plataforma y eliminar las caídas recurrentes (Fase 2, 4 semanas)
  3. Modernizar el stack para soportar el crecimiento futuro (Fase 3, 8 semanas)
Próximos pasos

1. Validar disponibilidad para ventana de mantenimiento Fase 1  ·  2. Firmar propuesta económica  ·  3. Kick-off con equipo técnico de NovaSaaS