Files
mcp-outline-postgresql/AUDIT-REQUEST.md
Emanuel Almeida 0329a1179a fix: corrigir bugs críticos de segurança e memory leaks (v1.2.4)
- fix(pagination): SQL injection em cursor pagination - validação de nomes de campos
- fix(transaction): substituir Math.random() por crypto.randomBytes() para jitter
- fix(monitoring): memory leak - adicionar .unref() ao setInterval
- docs: adicionar relatório completo de bugs (BUG-REPORT-2026-01-31.md)
- chore: actualizar versão para 1.2.4
2026-01-31 16:09:25 +00:00

5.7 KiB

Pedido de Auditoria de Segurança - MCP Outline PostgreSQL v1.2.3

Contexto

Este é um servidor MCP (Model Context Protocol) que fornece acesso directo via PostgreSQL à base de dados do Outline Wiki. Passou por múltiplas auditorias de segurança.

Versão actual: 1.2.3 (security hardened) Total de tools: 164 ferramentas em 33 módulos Security Score: 8.5/10

Correcções Aplicadas (v1.2.2)

SQL Injection Prevention

  • 21 vulnerabilidades corrigidas em analytics.ts, advanced-search.ts, search-queries.ts
  • Validação de UUIDs ANTES de construir strings SQL
  • Novas funções: validateDaysInterval(), isValidISODate(), validatePeriod()
  • Uso de make_interval(days => N) para intervalos seguros

Transacções Atómicas

  • bulk-operations.ts: 6 operações
  • desk-sync.ts: 2 operações
  • export-import.ts: 1 operação

Rate Limiting

  • Cleanup automático de entradas expiradas (cada 5 minutos)

Correcções Aplicadas (v1.2.3)

Cryptographic Random Generation

  • oauth.ts: OAuth secrets usam crypto.randomBytes() em vez de Math.random()
  • api-keys.ts: API keys usam geração criptográfica segura
  • shares.ts: Share URL IDs usam crypto.randomBytes()

API Key Security

  • API keys armazenam apenas hash SHA-256, nunca o secret plain text
  • Previne exposição em caso de breach da base de dados

URL Protocol Validation

  • Nova função isValidHttpUrl() rejeita protocolos perigosos (javascript:, data:, file:)
  • Aplicada em: emojis.ts, webhooks.ts, users.ts (avatar URLs)

Integer Validation

  • desk-sync.ts: Validação de desk_project_id e desk_task_id como inteiros positivos
  • Previne injection via parâmetros numéricos

Memory Leak Fix

  • Rate limiter com lifecycle management (startRateLimitCleanup, stopRateLimitCleanup)
  • unref() para permitir processo terminar
  • Graceful shutdown handler em index.ts

Code Quality

  • Adicionado radix 10 explícito a todos os parseInt() (5 ficheiros)
  • Substituído .substr() deprecated por abordagem moderna
  • sanitizeSavepointName() para prevenir SQL injection em savepoints

Pedido de Auditoria

Por favor, realiza uma auditoria de segurança completa ao código actual, focando em:

1. SQL Injection (Verificação)

  • Confirmar que todas as interpolações de strings foram eliminadas
  • Verificar se existem novos vectores de ataque
  • Validar que as funções de validação são suficientes

2. Transacções

  • Verificar se as transacções estão correctamente implementadas
  • Identificar operações que ainda possam beneficiar de transacções
  • Verificar tratamento de erros e rollback

3. Autenticação/Autorização

  • Verificar se existe controlo de acesso adequado
  • Analisar uso de "admin user" hardcoded em algumas operações

4. Validação de Input

  • Verificar sanitização de inputs em todas as tools
  • Identificar campos que podem ser explorados

5. Rate Limiting

  • Verificar eficácia do rate limiter actual
  • Sugerir melhorias se necessário

6. Logging e Auditoria

  • Verificar se operações sensíveis são registadas
  • Identificar lacunas em logging

7. Dependências

  • Verificar se existem dependências com vulnerabilidades conhecidas

Estrutura do Projecto

src/
├── index.ts              # MCP entry point (graceful shutdown v1.2.3)
├── pg-client.ts          # PostgreSQL client wrapper
├── config/database.ts    # DB configuration
├── utils/
│   ├── index.ts          # Export all utilities
│   ├── logger.ts
│   ├── security.ts       # Validações, rate limiting, URL validation (v1.2.3)
│   ├── transaction.ts    # Transaction helpers with retry
│   ├── query-builder.ts  # Safe parameterized queries
│   ├── validation.ts     # Zod-based validation
│   ├── audit.ts          # Audit logging
│   ├── monitoring.ts     # Pool health monitoring
│   └── pagination.ts     # Cursor-based pagination
└── tools/                # 33 módulos de tools
    ├── analytics.ts      # CORRIGIDO v1.2.2
    ├── advanced-search.ts # CORRIGIDO v1.2.2
    ├── search-queries.ts # CORRIGIDO v1.2.2
    ├── bulk-operations.ts # TRANSACÇÕES v1.2.2
    ├── desk-sync.ts      # TRANSACÇÕES v1.2.2 + INT VALIDATION v1.2.3
    ├── export-import.ts  # TRANSACÇÕES v1.2.2
    ├── oauth.ts          # CRYPTO v1.2.3
    ├── api-keys.ts       # CRYPTO + HASH-ONLY v1.2.3
    ├── shares.ts         # CRYPTO v1.2.3
    ├── emojis.ts         # URL VALIDATION v1.2.3
    ├── webhooks.ts       # URL VALIDATION v1.2.3
    ├── users.ts          # URL VALIDATION v1.2.3
    └── [outros 21 módulos]

Ficheiros Prioritários para Análise

  1. src/utils/security.ts - Funções de validação e rate limiting
  2. src/tools/analytics.ts - Maior quantidade de correcções
  3. src/tools/bulk-operations.ts - Operações críticas com transacções
  4. src/tools/documents.ts - CRUD principal
  5. src/tools/users.ts - Gestão de utilizadores

Output Esperado

  1. Score de segurança (0-10)
  2. Lista de vulnerabilidades encontradas (se houver)
  3. Confirmação das correcções - validar que v1.2.2 resolve os problemas anteriores
  4. Recomendações para próximas melhorias
  5. Priorização (P0 crítico, P1 alto, P2 médio, P3 baixo)

Comandos Úteis

# Ver estrutura
tree src/ -I node_modules

# Build
npm run build

# Verificar interpolações (deve retornar vazio)
grep -rn "INTERVAL '\${" src/tools/*.ts
grep -rn "= '\${" src/tools/*.ts

# Ver security.ts
cat src/utils/security.ts

# Ver ficheiros corrigidos
cat src/tools/analytics.ts
cat src/tools/bulk-operations.ts

MCP Outline PostgreSQL v1.2.3 | Descomplicar® | 2026-01-31