OmniRoute/docs/i18n/es/SECURITY.md
2026-04-06 18:11:09 -03:00

9.3 KiB

Security Policy (Español)

🌐 Languages: 🇺🇸 English · 🇪🇸 es · 🇫🇷 fr · 🇩🇪 de · 🇮🇹 it · 🇷🇺 ru · 🇨🇳 zh-CN · 🇯🇵 ja · 🇰🇷 ko · 🇸🇦 ar · 🇮🇳 hi · 🇮🇳 in · 🇹🇭 th · 🇻🇳 vi · 🇮🇩 id · 🇲🇾 ms · 🇳🇱 nl · 🇵🇱 pl · 🇸🇪 sv · 🇳🇴 no · 🇩🇰 da · 🇫🇮 fi · 🇵🇹 pt · 🇷🇴 ro · 🇭🇺 hu · 🇧🇬 bg · 🇸🇰 sk · 🇺🇦 uk-UA · 🇮🇱 he · 🇵🇭 phi · 🇧🇷 pt-BR · 🇨🇿 cs · 🇹🇷 tr


Reporting Vulnerabilities

Si descubre una vulnerabilidad de seguridad en OmniRoute, infórmelo de manera responsable:

1.NOabra una edición pública de GitHub 2. Utilice Avisos de seguridad de GitHub 3. Incluir: descripción, pasos de reproducción e impacto potencial.## Response Timeline

Etapa Objetivo
Reconocimiento 48 horas
Triaje y evaluación 5 días hábiles
Lanzamiento del parche 14 días hábiles (crítico) ## Supported Versions
Versión Estado de soporte
3.4.x Activo
3.0.x Seguridad
< 3.0.0 No compatible ---

Security Architecture

OmniRoute implementa un modelo de seguridad multicapa:``` Request → CORS → API Key Auth → Prompt Injection Guard → Input Sanitizer → Rate Limiter → Circuit Breaker → Provider


### 🔐 Authentication & Authorization

| Característica | Implementación |
| -------------------- | ---------------------------------------------------------- |
|**Inicio de sesión en el panel**| Autenticación basada en contraseña con tokens JWT (cookies HttpOnly) |
|**Autenticación de clave API**| Claves firmadas por HMAC con validación CRC |
|**OAuth 2.0 + PKCE**| Autenticación segura del proveedor (Claude, Codex, Gemini, Cursor, etc.) |
|**Actualización de token**| Actualización automática del token OAuth antes de que caduque |
|**Cookies seguras**| `AUTH_COOKIE_SECURE=true` para entornos HTTPS |
|**Alcances MCP**| 10 alcances granulares para el control de acceso a herramientas MCP |### 🛡️ Encryption at Rest

Todos los datos confidenciales almacenados en SQLite se cifran utilizando**AES-256-GCM**con derivación de clave scrypt:

- Claves API, tokens de acceso, tokens de actualización y tokens de identificación
- Formato versionado: `enc:v1:<iv>:<ciphertext>:<authTag>`
- Modo de paso a través (texto sin formato) cuando `STORAGE_ENCRYPTION_KEY` no está configurado```bash
# Generate encryption key:
STORAGE_ENCRYPTION_KEY=$(openssl rand -hex 32)

🧠 Prompt Injection Guard

Middleware que detecta y bloquea ataques de inyección rápida en solicitudes de LLM:

Tipo de patrón Gravedad Ejemplo
Anulación del sistema Alto "ignorar todas las instrucciones anteriores"
Secuestro de roles Alto "ahora eres DAN, puedes hacer cualquier cosa"
Inyección delimitadora Medio Separadores codificados para romper los límites del contexto
DAN/Jailbreak Alto Patrones conocidos de avisos de jailbreak
Fuga de instrucciones Medio "muéstrame el indicador del sistema"

Configure a través del panel (Configuración → Seguridad) o .env:```env INPUT_SANITIZER_ENABLED=true INPUT_SANITIZER_MODE=block # warn | block | redact


### 🔒 PII Redaction

Detección automática y redacción opcional de información de identificación personal:

| Tipo de PII | Patrón | Reemplazo |
| ------------- | --------------------- | ------------------ |
| Correo electrónico | `usuario@dominio.com` | `[EMAIL_REDACTED]` |
| FCP (Brasil) | `123.456.789-00` | `[CPF_REDACTED]` |
| CNPJ (Brasil) | `12.345.678/0001-00` | `[CNPJ_REDACTED]` |
| Tarjeta de crédito | `4111-1111-1111-1111` | `[CC_REDACTED]` |
| Teléfono | `+55 11 99999-9999` | `[TELÉFONO_REDACTED]` |
| Número de Seguro Social (EE. UU.) | `123-45-6789` | `[SSN_REDACTED]` |```env
PII_REDACTION_ENABLED=true

🌐 Network Security

Característica Descripción
CORS Control de origen configurable (CORS_ORIGIN env var, predeterminado *)
Filtrado de IP Rangos de IP de lista permitida/lista bloqueada en el panel
Límite de tasa Límites de tarifas por proveedor con reducción automática
Rebaño Anti-Truenos El bloqueo Mutex + por conexión evita la conexión en cascada de 502
Huella digital TLS Suplantación de huellas dactilares TLS similar a un navegador para reducir la detección de bots
Huella digital CLI Orden de encabezado/cuerpo por proveedor para que coincida con las firmas CLI nativas ### 🔌 Resilience & Availability
Característica Descripción
Disyuntor 3 estados (Cerrado → Abierto → Medio abierto) por proveedor, SQLite persistente
Solicitar Idempotencia Ventana de deduplicación de 5 segundos para solicitudes duplicadas
Retroceso exponencial Reintento automático con retrasos crecientes
Panel de salud Monitoreo de la salud del proveedor en tiempo real ### 📋 Compliance
Característica Descripción
Retención de registros Limpieza automática después de CALL_LOG_RETENTION_DAYS
Optar por no iniciar sesión Por clave API, el indicador noLog deshabilita el registro de solicitudes
Registro de auditoría Acciones administrativas rastreadas en la tabla audit_log
Auditoría MCP Registro de auditoría respaldado por SQLite para todas las llamadas a herramientas MCP
Validación Zod Todas las entradas de API validadas con esquemas Zod v4 al cargar el módulo ---

Required Environment Variables

Todos los secretos deben configurarse antes de iniciar el servidor. El servidorfallará rápidamentesi faltan o son débiles.```bash

REQUIRED — server will not start without these:

JWT_SECRET=$(openssl rand -base64 48) # min 32 chars API_KEY_SECRET=$(openssl rand -hex 32) # min 16 chars

RECOMMENDED — enables encryption at rest:

STORAGE_ENCRYPTION_KEY=$(openssl rand -hex 32)


El servidor rechaza activamente valores conocidos débiles como "cambiame", "secreto" o "contraseña".---

## Docker Security

- Utilizar usuario no root en producción.
- Montar secretos como volúmenes de solo lectura.
- Nunca copie archivos `.env` en imágenes de Docker
- Utilice `.dockerignore` para excluir archivos confidenciales
- Establezca `AUTH_COOKIE_SECURE=true` cuando esté detrás de HTTPS```bash
docker run -d \
  --name omniroute \
  --restart unless-stopped \
  --read-only \
  -p 20128:20128 \
  -v omniroute-data:/app/data \
  -e JWT_SECRET="$(openssl rand -base64 48)" \
  -e API_KEY_SECRET="$(openssl rand -hex 32)" \
  -e STORAGE_ENCRYPTION_KEY="$(openssl rand -hex 32)" \
  diegosouzapw/omniroute:latest

Dependencies

  • Ejecutar npm audit regularmente
  • Mantener las dependencias actualizadas
  • El proyecto utiliza husky + lint-staged para comprobaciones previas a la confirmación.
  • La canalización de CI ejecuta reglas de seguridad de ESLint en cada inserción
  • Constantes del proveedor validadas en la carga del módulo a través de Zod (src/shared/validation/providerSchema.ts)