Docs

Auditoria SAST y Pentesting

Resultados del pentesting SAST (OWASP Top 10) del ecosistema Nvito: hallazgos, severidades, correcciones aplicadas y metodologia de analisis.

PublicadoMarzo 2026Equipo de desarrollo, arquitectos, CTO

Metodologia

Se realizo un analisis estático de seguridad (SAST) del código fuente de los 5 repositorios del ecosistema Nvito siguiendo la metodologia OWASP Top 10 (2025). El analisis cubrio:

  • Revision manual de cada controller, servicio y guard
  • Búsqueda automatizada de patrones vulnerables (regex)
  • Analisis de flujos de autenticación y autorización
  • Revision de lógica de negocio para detectar abusos
  • Auditoria de configuración de infraestructura

Categorías OWASP analizadas

A01 — Broken Access Control

Estado: SEGURO (post-remediacion)

Hallazgos corregidos:

  • Slugs de invitación con entropia baja (Math.random) → Corregido con crypto.randomBytes
  • Endpoints públicos sin rate limiting → Corregido con @Throttle

Protecciones activas verificadas:

  • ClerkAuthGuard valida JWT y usuario existe en BD
  • OrganizationResolverService centralizado para contexto de org
  • Tenant middleware inyecta filtro RLS en cada query
  • Soft delete con middleware automático (deletedAt: null)

A02 — Cryptographic Failures

Estado: EXCELENTE

  • AES-256-GCM para PII con IV único por operación
  • Key derivation con scrypt resistente a fuerza bruta
  • JWT con HS256 y secrets de 32+ caracteres obligatorios
  • timing-safe comparison para tokens de webhook

A03 — Injection

Estado: SEGURO

  • Todos los $queryRaw y $executeRaw usan tagged templates (parametrizados)
  • No se encontraron patrones de ejecución de comandos del sistema ni code injection
  • HtmlValidatorService detecta y rechaza patrones peligrosos en HTML de invitaciones externas
  • DOMPurify con whitelist estricta para renderizado de HTML

A04 — Insecure Design

Estado: SEGURO (post-remediacion)

Hallazgos corregidos:

  • Race condition en RSVP (validación + creación sin transacción) → Corregido con $transaction
  • Race condition en generación de slugs (TOCTOU) → Corregido con retry atomico
  • Stripe webhook aceptaba requests sin firma → Corregido con UnauthorizedException

Protecciones activas verificadas:

  • Check-in QR usa transacción atomica (preexistente)
  • Operaciones destructivas requieren SuperAdminGuard

A05 — Security Misconfiguration

Estado: SEGURO (post-remediacion)

Hallazgos corregidos:

  • Redis sin autenticación → Corregido con requirepass
  • MinIO templates público → Corregido (bucket privado)
  • Adminer expuesto por defecto → Corregido con profile debug
  • Twilio bypass configurable → Eliminado
  • Docker images sin versión pineada → Corregido con versión específica

Protecciones activas verificadas:

  • Helmet con CSP, HSTS, X-Frame-Options, Referrer-Policy
  • CORS restrictivo (sin wildcard en producción)
  • Swagger deshabilitado en producción
  • Stack traces nunca expuestos al cliente

A06 — Vulnerable and Outdated Components

Estado: REQUIERE ATENCION

Vulnerabilidades detectadas por npm audit:

  • undici (HTTP client de Node.js): múltiples CVEs de severidad moderate/high
  • next (PWA): CSRF bypass en Server Actions con null origin
  • Todas corregibles con npm audit fix

Ver sección de dependencias para politica completa.

A07 — Identification and Authentication Failures

Estado: SEGURO

  • Rate limiting en todos los endpoints de auth
  • JWT con expiración de 15 minutos + refresh de 30 dias
  • Clerk webhook con protección anti-replay (idempotencia + timestamp)
  • Logout invalida tokens via Clerk session management

A08 — Software and Data Integrity Failures

Estado: SEGURO

  • Stripe webhooks: validación de firma con rawBody
  • Clerk webhooks: Svix signature verification
  • Twilio webhooks: validateRequest sin bypass
  • ISR revalidation: timing-safe comparison de secret

A09 — Security Logging and Monitoring Failures

Estado: PARCIAL

Implementado:

  • Winston logger con sanitizacion de PII (35 claves sensibles redactadas)
  • ActivityLog en BD para acciones sensitivas
  • Endpoint /health/pinning-report para telemetria de certificate pinning
  • CertificateSchedulerService para alertas proactivas

Pendiente:

  • SIEM centralizado para correlación de eventos
  • Alertas automáticas de intentos de auth fallidos
  • Dashboard de metricas de seguridad en tiempo real

A10 — Server-Side Request Forgery (SSRF)

Estado: SEGURO

  • CDN URL validator con whitelist estricta (cdn.nvito.mx, r2.dev)
  • No se encontraron llamadas HTTP con URLs de usuario sin validación
  • IPs privadas permitidas solo en desarrollo

Hallazgos descartados (falsos positivos)

Hallazgo reportadoRazon de descarte
.env en git historyVerificado: .env nunca fue committeado. Solo templates con placeholders
Preview tokens vulnerable a timing attackUsan JWT verify (criptografico), no comparacion de strings
Secrets en código fuenteSolo en archivos .env locales (gitignored)
Patrones peligrosos en html-validatorEs regex de DETECCION para rechazar HTML malicioso, no ejecución

Recomendaciones para proxima auditoria

  1. Ejecutar DAST (Dynamic Application Security Testing) contra ambientes DEV/TEST
  2. Contratar pentesting profesional externo antes del lanzamiento a producción
  3. Implementar scanning automatizado de dependencias (Snyk o Dependabot)
  4. Agregar pre-commit hooks para detección de secrets (git-secrets + husky)
Esta pagina fue util?