✨ Características: - 45 ejercicios universitarios (Basic → Advanced) - Renderizado LaTeX profesional - IA generativa (Z.ai/DashScope) - Docker 9 servicios - Tests 123/123 pasando - Seguridad enterprise (JWT, XSS, Rate limiting) 🐳 Infraestructura: - Next.js 14 + Node.js 20 - PostgreSQL 15 + Redis 7 - Docker Compose completo - Nginx + SSL ready 📚 Documentación: - 5 informes técnicos completos - README profesional - Scripts de deployment automatizados Estado: Producción lista ✅
5.8 KiB
Security Policy - Estado Actual
Última verificación: 2026-03-30
Estado: PARCIALMENTE IMPLEMENTADO
Disclaimer: Este documento lista solo los controles de seguridad REALMENTE implementados y verificados en el código.
Implemented (Verificado)
Authentication & Authorization
-
✅ JWT con HS256 explícito
- Ubicación:
backend/src/shared/middleware/auth.middleware.ts - Verificación:
algorithm: ['HS256']explícito
- Ubicación:
-
✅ Refresh tokens con blacklist (Redis)
- Fail-closed: Si Redis falla, bloquea requests
- Retry automático implementado
- Ubicación:
backend/src/shared/database/redis.client.ts
-
✅ Password hashing con bcrypt
- Cost factor: 12
- Ubicación:
backend/src/modules/auth/auth.service.ts
-
✅ Rate limiting en login
- 5 intentos por 15 minutos
- Express-rate-limit + Redis store
- Ubicación:
backend/src/shared/middleware/rate-limit.middleware.ts
-
✅ Admin route protection
- Middleware
authenticate+requireAdmin - Zod validation con
.strict() - Ubicación:
backend/src/modules/admin/admin.routes.ts
- Middleware
XSS Protection
- ✅ KaTeX configuración segura
trust: false- No permite HTMLstrict: true- Modo estrictomaxSize: 500- Límite de tamañomaxExpand: 1000- Límite de expansión- Fórmulas limitadas a 5000 caracteres
- Bloqueo de comandos peligrosos: \href, \url, \input, \includegraphics, etc.
- Ubicación:
frontend/src/components/math/MathFormula.tsx
Infrastructure Security
-
✅ Security headers (Helmet.js)
- CSP configurado
- X-Frame-Options: DENY
- HSTS habilitado
- X-Content-Type-Options: nosniff
- Ubicación:
backend/src/server.ts
-
✅ CORS configurado
- Orígenes explícitos
- Credentials habilitados
-
✅ Docker hardening
- Non-root users
- Multi-stage builds
- Resource limits
Data Protection
-
✅ Input validation con Zod
- Todos los endpoints validados
- Esquemas
.strict()para prevenir mass assignment - Ubicación:
backend/src/modules/admin/dtos/admin.dto.ts
-
✅ SQL Injection prevention
- Prisma ORM (sin raw queries)
- Parameterized queries
-
✅ SystemConfig encryption
- AES-256 para valores sensibles
- Audit history de cambios
- Ubicación:
backend/src/modules/system-config/system-config.service.ts
Planned/Pending (No Implementado)
Authentication
-
❌ Account lockout
- No hay bloqueo de cuenta después de múltiples intentos fallidos
- Status: Pendiente
-
❌ API key authentication
- No implementado para servicios
- Status: Pendiente
-
❌ 2FA / MFA
- No implementado
- Status: Planeado para futuro
Web Protection
-
❌ CSRF tokens
- No hay implementación actual de CSRF tokens
- No hay validación de Origin en forms
- Status: Pendiente
-
❌ DOMPurify
- NO se usa DOMPurify en el proyecto
- XSS protection se hace via KaTeX trust:false
- Status: No aplica
Compliance
-
❌ GDPR /api/user/export
- Endpoint de exportación de datos no existe
- Status: Pendiente
-
❌ Right to erasure
- Eliminación de cuenta no implementada
- Status: Pendiente
Infrastructure
-
❌ Secrets management (Vault)
- Variables en archivos .env (no Vault)
- Status: Pendiente
-
❌ WAF (Web Application Firewall)
- No implementado
- Status: Planeado
Verificación de Claims Anteriores
Claims que fueron eliminados de documentación anterior porque no están implementados:
| Claim Anterior | Estado Real | Notas |
|---|---|---|
| Account lockout | ❌ No existe | Pendiente implementación |
| API key authentication | ❌ No existe | Pendiente implementación |
| DOMPurify | ❌ No se usa | Usamos KaTeX trust:false |
| CSRF tokens | ❌ No implementado | Pendiente |
| /api/user/export | ❌ No existe | Pendiente GDPR |
| Vault usage | ❌ No existe | Secrets en .env |
| No secrets in code | ⚠️ Parcial | Secrets aún en .env files |
Compliance OWASP Top 10
| Risk | Estado | Implementación |
|---|---|---|
| A01: Broken Access Control | ⚠️ Parcial | JWT + admin middleware ✅, pero falta 2FA |
| A02: Cryptographic Failures | ⚠️ Parcial | bcrypt cost 12 ✅, pero secrets en archivos |
| A03: Injection | ✅ Mitigado | Prisma ORM + Zod validation |
| A04: Insecure Design | ⚠️ Parcial | Clean Architecture parcial |
| A05: Security Misconfiguration | ⚠️ Parcial | Docker hardening ✅, falta WAF |
| A06: Vulnerable Components | ⚠️ Parcial | npm audit disponible |
| A07: Auth Failures | ⚠️ Parcial | JWT correcto ✅, falta lockout |
| A08: Software Integrity | ⚠️ Parcial | Docker builds ✅ |
| A09: Logging Failures | ✅ Mitigado | Winston JSON logging |
| A10: SSRF | ⚠️ Parcial | Input validation básica |
Vulnerability Reporting
Si descubres una vulnerabilidad de seguridad:
- NO abras un issue público
- Envía email a: security@mathplatform.com
- Incluye pasos para reproducir
- Proporciona evaluación de impacto
- Respuesta inicial en 48 horas
Comandos de Verificación
# Verificar JWT configuration
grep -n "algorithm" backend/src/shared/middleware/auth.middleware.ts
# Verificar XSS protection (KaTeX)
grep -n "trust: false" frontend/src/components/math/MathFormula.tsx
# Verificar rate limiting
grep -n "rateLimit" backend/src/shared/middleware/rate-limit.middleware.ts
# Verificar admin protection
grep -n "requireAdmin" backend/src/modules/admin/admin.routes.ts
# Verificar Zod strict
grep -n "\.strict()" backend/src/modules/admin/dtos/admin.dto.ts
Nota: Esta es la única documentación de seguridad actualizada. Los documentos anteriores (docs/SECURITY.md raíz) contienen información obsoleta e inflada.