# 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

- ✅ **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`

### XSS Protection

- ✅ **KaTeX configuración segura**
  - `trust: false` - No permite HTML
  - `strict: true` - Modo estricto
  - `maxSize: 500` - Límite de tamaño
  - `maxExpand: 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:

1. **NO abras un issue público**
2. Envía email a: security@mathplatform.com
3. Incluye pasos para reproducir
4. Proporciona evaluación de impacto
5. Respuesta inicial en 48 horas

---

## Comandos de Verificación

```bash
# 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.
