fix(security): Resolve 21 SQL injection vulnerabilities and add transactions
Security fixes (v1.2.2): - Fix SQL injection in analytics.ts (16 occurrences) - Fix SQL injection in advanced-search.ts (1 occurrence) - Fix SQL injection in search-queries.ts (1 occurrence) - Add validateDaysInterval(), isValidISODate(), validatePeriod() to security.ts - Use make_interval(days => N) for safe PostgreSQL intervals - Validate UUIDs BEFORE string construction Transaction support: - bulk-operations.ts: 6 atomic operations with withTransaction() - desk-sync.ts: 2 operations with transactions - export-import.ts: 1 operation with transaction Rate limiting: - Add automatic cleanup of expired entries (every 5 minutes) Audit: - Archive previous audit docs to docs/audits/2026-01-31-v1.2.1/ - Create new AUDIT-REQUEST.md for v1.2.2 verification Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
209
AUDIT-REQUEST.md
209
AUDIT-REQUEST.md
@@ -1,145 +1,118 @@
|
||||
# Pedido de Auditoria Externa - MCP Outline PostgreSQL
|
||||
# Pedido de Auditoria de Segurança - MCP Outline PostgreSQL v1.2.2
|
||||
|
||||
## Resumo do Projecto
|
||||
## Contexto
|
||||
|
||||
**Nome:** MCP Outline PostgreSQL
|
||||
**Versão:** 1.2.1
|
||||
**Repositório:** https://git.descomplicar.pt/ealmeida/mcp-outline-postgresql
|
||||
**Tecnologia:** TypeScript, Node.js, PostgreSQL
|
||||
**Protocolo:** Model Context Protocol (MCP) v1.0.0
|
||||
Este é um servidor MCP (Model Context Protocol) que fornece acesso directo via PostgreSQL à base de dados do Outline Wiki. A versão anterior (v1.2.1) passou por uma auditoria que identificou vulnerabilidades de SQL injection e falta de transacções em operações bulk.
|
||||
|
||||
### Descrição
|
||||
**Versão actual:** 1.2.2 (após correcções de segurança)
|
||||
**Total de tools:** 164 ferramentas em 33 módulos
|
||||
|
||||
Servidor MCP que fornece acesso directo à base de dados PostgreSQL do Outline Wiki. Implementa 164 tools em 33 módulos para operações CRUD, pesquisa, analytics, gestão de permissões e integração com Desk CRM.
|
||||
## Correcções Aplicadas (v1.2.2)
|
||||
|
||||
**Arquitectura:** Claude Code → MCP Server (stdio) → PostgreSQL (Outline DB)
|
||||
### 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
|
||||
|
||||
## Âmbito da Auditoria
|
||||
### Rate Limiting
|
||||
- Cleanup automático de entradas expiradas (cada 5 minutos)
|
||||
|
||||
### 1. Segurança (Prioridade Alta)
|
||||
## Pedido de Auditoria
|
||||
|
||||
- [ ] **SQL Injection** - Validação de queries parametrizadas em todos os 160 handlers
|
||||
- [ ] **Input Validation** - Verificação de sanitização de inputs (UUIDs, strings, arrays)
|
||||
- [ ] **Rate Limiting** - Eficácia da implementação actual
|
||||
- [ ] **Autenticação** - Validação de acesso à base de dados
|
||||
- [ ] **Exposição de Dados** - Verificar se há fuga de informação sensível nas respostas
|
||||
- [ ] **Permissões** - Validar que operações respeitam modelo de permissões do Outline
|
||||
Por favor, realiza uma auditoria de segurança completa ao código actual, focando em:
|
||||
|
||||
### 2. Qualidade de Código (Prioridade Média)
|
||||
### 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
|
||||
|
||||
- [ ] **TypeScript** - Type safety, uso correcto de tipos
|
||||
- [ ] **Error Handling** - Tratamento de erros consistente
|
||||
- [ ] **Padrões** - Consistência entre módulos
|
||||
- [ ] **Code Smells** - Duplicação, complexidade ciclomática
|
||||
- [ ] **Manutenibilidade** - Facilidade de extensão e manutenção
|
||||
### 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. Performance (Prioridade Média)
|
||||
### 3. Autenticação/Autorização
|
||||
- Verificar se existe controlo de acesso adequado
|
||||
- Analisar uso de "admin user" hardcoded em algumas operações
|
||||
|
||||
- [ ] **Queries SQL** - Optimização, uso de índices
|
||||
- [ ] **Connection Pooling** - Configuração adequada
|
||||
- [ ] **Memory Leaks** - Potenciais fugas de memória
|
||||
- [ ] **Pagination** - Implementação eficiente em listagens
|
||||
### 4. Validação de Input
|
||||
- Verificar sanitização de inputs em todas as tools
|
||||
- Identificar campos que podem ser explorados
|
||||
|
||||
### 4. Compatibilidade (Prioridade Baixa)
|
||||
### 5. Rate Limiting
|
||||
- Verificar eficácia do rate limiter actual
|
||||
- Sugerir melhorias se necessário
|
||||
|
||||
- [ ] **Schema Outline** - Compatibilidade com Outline v0.78+
|
||||
- [ ] **MCP Protocol** - Conformidade com especificação MCP
|
||||
- [ ] **Node.js** - Compatibilidade com versões LTS
|
||||
### 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
|
||||
|
||||
## Ficheiros Críticos para Revisão
|
||||
## Estrutura do Projecto
|
||||
|
||||
| Ficheiro | Descrição | Prioridade |
|
||||
|----------|-----------|------------|
|
||||
| `src/utils/security.ts` | Funções de segurança e validação | **Alta** |
|
||||
| `src/pg-client.ts` | Cliente PostgreSQL e pooling | **Alta** |
|
||||
| `src/tools/documents.ts` | 19 tools - maior módulo | **Alta** |
|
||||
| `src/tools/users.ts` | Gestão de utilizadores | **Alta** |
|
||||
| `src/tools/bulk-operations.ts` | Operações em lote | **Alta** |
|
||||
| `src/tools/advanced-search.ts` | Pesquisa full-text | Média |
|
||||
| `src/tools/analytics.ts` | Queries analíticas | Média |
|
||||
| `src/tools/export-import.ts` | Export/Import Markdown | Média |
|
||||
| `src/tools/desk-sync.ts` | Integração Desk CRM | Média |
|
||||
| `src/index.ts` | Entry point MCP | Média |
|
||||
```
|
||||
src/
|
||||
├── index.ts # MCP entry point
|
||||
├── pg-client.ts # PostgreSQL client wrapper
|
||||
├── config/database.ts # DB configuration
|
||||
├── utils/
|
||||
│ ├── logger.ts
|
||||
│ └── security.ts # Validações, rate limiting
|
||||
└── 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
|
||||
├── export-import.ts # TRANSACÇÕES v1.2.2
|
||||
└── [outros 27 módulos]
|
||||
```
|
||||
|
||||
---
|
||||
## Ficheiros Prioritários para Análise
|
||||
|
||||
## Métricas do Projecto
|
||||
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
|
||||
|
||||
| Métrica | Valor |
|
||||
|---------|-------|
|
||||
| Total de Tools | 164 |
|
||||
| Módulos | 33 |
|
||||
| Linhas de Código (estimado) | ~6500 |
|
||||
| Ficheiros TypeScript | 37 |
|
||||
| Dependências Runtime | 4 |
|
||||
## Output Esperado
|
||||
|
||||
### Dependências
|
||||
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)
|
||||
|
||||
```json
|
||||
{
|
||||
"@modelcontextprotocol/sdk": "^1.0.0",
|
||||
"pg": "^8.11.0",
|
||||
"dotenv": "^16.0.0",
|
||||
"uuid": "^9.0.0"
|
||||
}
|
||||
## 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
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Contexto de Uso
|
||||
|
||||
O MCP será utilizado por:
|
||||
- Claude Code (Anthropic) para gestão de documentação interna
|
||||
- Automações via N8N para sincronização de conteúdo
|
||||
- Integrações com outros sistemas internos
|
||||
|
||||
**Dados expostos:** Documentos, utilizadores, colecções, comentários, permissões do Outline Wiki.
|
||||
|
||||
---
|
||||
|
||||
## Entregáveis Esperados
|
||||
|
||||
1. **Relatório de Segurança**
|
||||
- Vulnerabilidades encontradas (críticas, altas, médias, baixas)
|
||||
- Recomendações de mitigação
|
||||
- Código de exemplo para correcções
|
||||
|
||||
2. **Relatório de Qualidade**
|
||||
- Análise estática de código
|
||||
- Sugestões de melhoria
|
||||
- Áreas de refactoring prioritário
|
||||
|
||||
3. **Relatório de Performance**
|
||||
- Queries problemáticas identificadas
|
||||
- Sugestões de optimização
|
||||
- Benchmarks se aplicável
|
||||
|
||||
4. **Sumário Executivo**
|
||||
- Avaliação geral do projecto
|
||||
- Riscos principais
|
||||
- Roadmap de correcções sugerido
|
||||
|
||||
---
|
||||
|
||||
## Informações de Contacto
|
||||
|
||||
**Solicitante:** Descomplicar®
|
||||
**Email:** emanuel@descomplicar.pt
|
||||
**Website:** https://descomplicar.pt
|
||||
|
||||
---
|
||||
|
||||
## Anexos
|
||||
|
||||
- `SPEC-MCP-OUTLINE.md` - Especificação técnica completa
|
||||
- `CLAUDE.md` - Documentação do projecto
|
||||
- `CHANGELOG.md` - Histórico de versões
|
||||
|
||||
---
|
||||
|
||||
*Documento gerado em 2026-01-31*
|
||||
*MCP Outline PostgreSQL v1.2.0*
|
||||
*MCP Outline PostgreSQL v1.2.2 | Descomplicar® | 2026-01-31*
|
||||
|
||||
Reference in New Issue
Block a user