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

162 lines
5.7 KiB
Markdown

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