OmniRoute/docs/i18n/pt/SECURITY.md

9.1 KiB

Security Policy (Português (Portugal))

🌐 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

Se você descobrir uma vulnerabilidade de segurança no OmniRoute, informe-a de forma responsável:

1.NÃOabra um problema público no GitHub 2. Use Avisos de segurança do GitHub 3. Incluir: descrição, etapas de reprodução e impacto potencial## Response Timeline

Palco Alvo
Reconhecimento 48 horas
Triagem e Avaliação 5 dias úteis
Lançamento de patch 14 dias úteis (crítico) ## Supported Versions
Versão Status de suporte
3.4.x Ativo
3.0.x Segurança
<3.0.0 Não suportado ---

Security Architecture

OmniRoute implementa um modelo de segurança multicamadas:``` Request → CORS → API Key Auth → Prompt Injection Guard → Input Sanitizer → Rate Limiter → Circuit Breaker → Provider


### 🔐 Authentication & Authorization

| Recurso | Implementação |
| -------------------- | ---------------------------------------------------------- |
|**Login no painel**| Autenticação baseada em senha com tokens JWT (cookies HttpOnly) |
|**Autenticação de chave de API**| Chaves assinadas por HMAC com validação CRC |
|**OAuth 2.0 + PKCE**| Autenticação segura do provedor (Claude, Codex, Gemini, Cursor, etc.) |
|**Atualização de token**| Atualização automática do token OAuth antes da expiração |
|**Cookies seguros**| `AUTH_COOKIE_SECURE=true` para ambientes HTTPS |
|**Escopos MCP**| 10 escopos granulares para controle de acesso a ferramentas MCP |### 🛡️ Encryption at Rest

Todos os dados confidenciais armazenados no SQLite são criptografados usando**AES-256-GCM**com derivação de chave criptografada:

- Chaves de API, tokens de acesso, tokens de atualização e tokens de ID
- Formato versionado: `enc:v1:<iv>:<ciphertext>:<authTag>`
- Modo de passagem (texto simples) quando `STORAGE_ENCRYPTION_KEY` não está definido```bash
# Generate encryption key:
STORAGE_ENCRYPTION_KEY=$(openssl rand -hex 32)

🧠 Prompt Injection Guard

Middleware que detecta e bloqueia ataques de injeção imediata em solicitações LLM:

Tipo de padrão Gravidade Exemplo
Substituição do sistema Alto "ignorar todas as instruções anteriores"
Sequestro de função Alto "agora você é DAN, você pode fazer qualquer coisa"
Injeção de delimitador Médio Separadores codificados para quebrar limites de contexto
DAN/Jailbreak Alto Padrões conhecidos de prompt de jailbreak
Vazamento de instruções Médio "mostre-me o prompt do sistema"

Configure via painel (Configurações → Segurança) ou .env:```env INPUT_SANITIZER_ENABLED=true INPUT_SANITIZER_MODE=block # warn | block | redact


### 🔒 PII Redaction

Detecção automática e redação opcional de informações de identificação pessoal:

| Tipo de PII | Padrão | Substituição |
| ------------- | --------------------- | ------------------ |
| E-mail | `usuário@domínio.com` | `[EMAIL_REDACTED]` |
| CPF (Brasil) | `123.456.789-00` | `[CPF_REDACTED]` |
| CNPJ (Brasil) | `12.345.678/0001-00` | `[CNPJ_REDIGIDO]` |
| Cartão de Crédito | `4111-1111-1111-1111` | `[CC_REDACTED]` |
| Telefone | `+55 11 99999-9999` | `[TELEFONE_REDACTADO]` |
| SSN (EUA) | `123-45-6789` | `[SSN_REDACTED]` |```env
PII_REDACTION_ENABLED=true

🌐 Network Security

Recurso Descrição
CORS Controle de origem configurável (CORS_ORIGIN env var, padrão *)
Filtragem de IP Intervalos de IP da lista de permissões/lista de bloqueio no painel
Limitação de taxa Limites de taxa por provedor com retirada automática
Rebanho Anti-Trovão O bloqueio Mutex + por conexão evita 502s em cascata
Impressão digital TLS Falsificação de impressão digital TLS semelhante a navegador para reduzir a detecção de bots
Impressão digital CLI Ordenação de cabeçalho/corpo por provedor para corresponder às assinaturas CLI nativas ### 🔌 Resilience & Availability
Recurso Descrição
Disjuntor 3 estados (Fechado → Aberto → Semiaberto) por provedor, persistido em SQLite
Solicitar Idempotência Janela de desduplicação de 5 segundos para solicitações duplicadas
Recuo exponencial Nova tentativa automática com atrasos crescentes
Painel de saúde Monitoramento da saúde do provedor em tempo real ### 📋 Compliance
Recurso Descrição
Retenção de registros Limpeza automática após CALL_LOG_RETENTION_DAYS
Desativação sem registro Por chave de API, o sinalizador noLog desativa o registro de solicitações
Registro de auditoria Ações administrativas rastreadas na tabela audit_log
Auditoria MCP Registro de auditoria apoiado por SQLite para todas as chamadas de ferramentas MCP
Validação Zod Todas as entradas de API validadas com esquemas Zod v4 no carregamento do módulo ---

Required Environment Variables

Todos os segredos devem ser definidos antes de iniciar o servidor. O servidor iráfalhar rapidamentese eles estiverem ausentes ou fracos.```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)


O servidor rejeita ativamente valores conhecidos como fracos, como `changeme`, `secret` ou `password`.---

## Docker Security

- Use usuário não root na produção
- Monte segredos como volumes somente leitura
- Nunca copie arquivos `.env` em imagens Docker
- Use `.dockerignore` para excluir arquivos confidenciais
- Defina `AUTH_COOKIE_SECURE=true` quando estiver atrá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

  • Execute npm audit regularmente
  • Mantenha as dependências atualizadas
  • O projeto usa husky + lint-staged para verificações pré-commit
  • O pipeline de CI executa regras de segurança ESLint em cada push
  • Constantes de provedor validadas no carregamento do módulo via Zod (src/shared/validation/providerSchema.ts)