CreaRack-SL

Auditoria 2026-07 Fase 1: Seguridad, Rendimiento y Calidad

Contexto

Se inicia auditoria formal 2026-07 con Fase 0 (verificación estática) y Fase 1 (implementación de correcciones). Objetivo: diagnosticar y remediar brechas de seguridad, rendimiento y calidad arquitectónica del backend y frontend.

Hallazgos Críticos — FASE 0

Seguridad (CRÍTICO)

Vulnerabilidades identificadas:

  1. IDOR en admin.py (línea 275): endpoint revoke sin validación de org. Corrección aplicada en el commit.
  2. Cross-org attachment en ClientProject: falta validación de org al adjuntar proyectos. Verificado.
  3. WebSocket sin filtro de org (sentinel_ingest.py): broadcast de métricas sin row-level-security. Severidad ALTA.
  4. RLS-gap en 3 tablas nuevas: AIInsight, AIInsightAuditLog, y tabla de ingestión de VictoriaMetrics. No tienen RLS configurado. Véase [[incident—20260710—rls-gap-tablas-nuevas]].
  5. Refresh token en WS (consumers.py): WebSocket acepta refresh tokens sin validar tiempo de vida. Severidad MEDIA.

Superficies nuevas auditadas:

  • vsdx (XML parsing): sin defusedxml (zip-bomb, XXE). Corrección: aplicar defusedxml.
  • scrapli (shell commands): sin sanitización de args. Evaluación: bajo riesgo (CLI local only), pero documentar.
  • rate-limit por tenant: ya corregido en código anterior. Hash salteado OK, pero ventana no es atómica (race condition BAJA).

Rendimiento (MEDIO-ALTO)

N+1 queries: hot path de racks limpio. Grueso del bloque requiere medición con CaptureQueries/silk (decisión tooling de Edu en FASE 2).

Valkey (in-memory cache):

  • Configuración: timeout=None bajo política allkeys-lru → riesgo de evicción arbitraria.
  • Cola Huey en la misma instancia → contención de memoria.
  • Recomendación: separar instancia o ajustar políticas.

Huey (task queue):

  • Cero retries configurados.
  • Sin dead-letter queue.
  • Recomendación: configurar retry logic + DLQ en FASE 2.

VictoriaMetrics:

  • Cardinalidad sana.
  • Hallazgo: ingest escribe nombres de agentes crudos sin allowlist → cardinalidad futura alta.

Calidad Arquitectónica (MEDIO)

Cobertura: 106 tests con buena cobertura de seguridad.

Ciclomatic complexity: 0 ciclos, god-nodes sanos. Ningún módulo >1000 LOC.

Hallazgos:

  1. Sin mypy: análisis de tipos estático ausente. Severidad: MEDIO (requiere setup inicial bajo). Corrección: activado en CI .github/workflows/ci.yml con modo laxo (baseline 0).
  2. Frontend Vite huerfano:
    • No se sirve desde Django.
    • 132 nodos muertos.
    • Konva duplicado.
    • Severidad: ALTO (dead code, UX desconocida).
    • Recomendación: FASE 1.5 remover o integrar.

Stack:

  • Backend: correcto sin migración justificada.
  • Dependencias: daphne 4.2.1 con 2 CVEs críticas (véase [[incident—20260710—daphne-cves-pysec-2026-213-214]]).

Decisiones Implementadas — FASE 1

Seguridad

  • ✅ IDOR en admin.py: corrección aplicada.
  • ✅ ClientProject cross-org: validación agregada.
  • ✅ mypy en CI: modo laxo, baseline 0 (no bloquea CI, es advisory).
  • ⏳ RLS en 3 tablas nuevas: en roadmap de FASE 1a (AIInsight et al.).
  • ⏳ WS sin filtro org: refactor en FASE 1b.
  • ⏳ VictoriaMetrics allowlist: FASE 1c.

Infra

  • ✅ Daphne bump 4.2.1 → 4.2.2: remedia PYSEC-2026-213 (DoS) y PYSEC-2026-214 (header-injection).

Calidad

  • ✅ pip-audit: daphne CVEs corregidas.
  • ✅ npm audit: limpio (frontend npm).
  • ⏳ Vite dead-code: FASE 1.5.

Plan — FASE 2 y adelante

FaseTemaOwnerDeadline
1aRLS en AIInsight + ingestiónEdu2026-07-15
1bWS filtrado por org + refresh-tokenMarcos2026-07-17
1cVictoriaMetrics allowlist agentesEdu2026-07-20
1.5Frontend Vite: remover o integrarEsquembri2026-07-25
2Medición N+1 (silk/CaptureQueries)Edu2026-08-01
2Valkey/Huey tuningInfra2026-08-05

Documentación

Documento maestro: AUDIT.md (en el repo).

Incidentes relacionados:

  • [[incident—20260710—rls-gap-tablas-nuevas]]
  • [[incident—20260710—daphne-cves-pysec-2026-213-214]]

Decisión previa (multi-tenancy y RLS):

  • [[decision—20260403—multi-tenancy-rls]]

Concepto:

  • [[concept—saas—multi-tenancy]]

Véase también

  • [[decision—20260403—multi-tenancy-rls]]
  • [[concept—saas—multi-tenancy]]
  • [[incident—20260710—rls-gap-tablas-nuevas]]
  • [[incident—20260710—daphne-cves-pysec-2026-213-214]]