210 lines
5.7 KiB
Markdown
210 lines
5.7 KiB
Markdown
# Análise de Segurança - BigPickle/General Bots
|
|
|
|
**Data:** 2026-03-11
|
|
**Escopo:** botserver, botlib, bottest
|
|
|
|
---
|
|
|
|
## 1. Resumo Executivo
|
|
|
|
| Categoria | Status | Severidade |
|
|
|-----------|--------|------------|
|
|
| **Execução de Comandos** | ⚠️ PARCIAL | ALTA |
|
|
| **Rate Limiting** | ✅ IMPLEMENTADO | - |
|
|
| **CSRF Protection** | ✅ IMPLEMENTADO | - |
|
|
| **Security Headers** | ✅ IMPLEMENTADO | - |
|
|
| **Error Handling** | ⚠️ PARCIAL | MÉDIA |
|
|
| **SQL Injection** | ✅ IMPLEMENTADO | - |
|
|
|
|
---
|
|
|
|
## 2. Execução de Comandos (IMP-02)
|
|
|
|
### 2.1 SafeCommand - Bom
|
|
O projeto implementa `SafeCommand` em `botserver/src/security/command_guard.rs`:
|
|
- Lista branca de comandos permitidos (ffmpeg, pdftotext, pandoc, etc.)
|
|
- Bloqueio de comandos perigosos (wget, nc, netcat, dd, mkfs)
|
|
- ~190 usos corretos no codebase
|
|
|
|
### 2.2 Command::new Direto - PROBLEMA
|
|
Encontrados **8 arquivos** com `Command::new` direto (sem SafeCommand):
|
|
|
|
| Arquivo | Linha | Comando | Risco |
|
|
|---------|-------|---------|-------|
|
|
| `core/bootstrap/bootstrap_utils.rs` | 39,53,76,99,112,126,133,161,176,211,231 | pkill, pgrep, sh, curl, nc, bash | ALTO |
|
|
| `auto_task/container_session.rs` | 27,52,117 | lxc | MÉDIO |
|
|
| `core/bootstrap/bootstrap_manager.rs` | 255 | caddy | MÉDIO |
|
|
| `llm/local.rs` | 434,530 | cmd_path (dinâmico) | ALTO |
|
|
| `botmodels/python_bridge.rs` | 198 | python_path (config) | MÉDIO |
|
|
| `monitoring/real_time.rs` | 595 | df | BAIXO |
|
|
| `core/package_manager/cli.rs` | 1136 | psql | MÉDIO |
|
|
|
|
**Recomendação:** Migrar todos para `SafeCommand` ou `AsyncCommand` (para async).
|
|
|
|
---
|
|
|
|
## 3. Rate Limiting (IMP-07)
|
|
|
|
### ✅ Implementado corretamente
|
|
- Usa crate `governor` com algoritmo token bucket
|
|
- Arquivos:
|
|
- `security/rate_limiter.rs` - Rate limiter HTTP global
|
|
- `core/rate_limit.rs` - Rate limiter combinado
|
|
- `llm/rate_limiter.rs` - Rate limiter LLM
|
|
- `core/bot/channels/whatsapp_rate_limiter.rs` - Rate limiter WhatsApp
|
|
|
|
### Limites configurados
|
|
| Tipo | Limite | Burst |
|
|
|------|--------|-------|
|
|
| Default | 100 req/s | 200 |
|
|
| Strict | 50 req/s | 100 |
|
|
| Relaxed | 500 req/s | 1000 |
|
|
| API | 100 req/s | 150 |
|
|
|
|
**Status:** ✅ CONFORME
|
|
|
|
---
|
|
|
|
## 4. CSRF Protection (IMP-08)
|
|
|
|
### ✅ Implementado corretamente
|
|
- Arquivo: `security/csrf.rs`
|
|
- Usa padrão Double-Submit Cookie
|
|
- Configurações:
|
|
- Token expiry: 60 minutos
|
|
- Cookie secure: true
|
|
- SameSite: Strict
|
|
- Exempt paths: /api/health, /api/version
|
|
- Exempt methods: GET, HEAD, OPTIONS
|
|
|
|
**Status:** ✅ CONFORME
|
|
|
|
---
|
|
|
|
## 5. Security Headers (IMP-09)
|
|
|
|
### ✅ Implementado corretamente
|
|
- Arquivo: `security/headers.rs`
|
|
|
|
| Header | Valor Padrão | Valor Strict |
|
|
|--------|--------------|--------------|
|
|
| Content-Security-Policy | `self` + inline | `self` apenas |
|
|
| X-Frame-Options | DENY | DENY |
|
|
| X-Content-Type-Options | nosniff | nosniff |
|
|
| Strict-Transport-Security | 1 ano | 2 anos + preload |
|
|
| Referrer-Policy | strict-origin-when-cross-origin | no-referrer |
|
|
| Permissions-Policy | Bloqueado | Bloqueado |
|
|
|
|
**Status:** ✅ CONFORME
|
|
|
|
---
|
|
|
|
## 6. Error Handling (IMP-01)
|
|
|
|
### 6.1 Error Sanitizer - Bom
|
|
Arquivo: `security/error_sanitizer.rs`
|
|
- 72 usos de `log_and_sanitize()` no codebase
|
|
- Remove informações sensíveis de logs
|
|
|
|
### 6.2 unwrap()/expect() - PROBLEMA
|
|
Encontrados **945 usos** de `.unwrap()` e `.expect()`:
|
|
- Concentrados em:
|
|
- `whatsapp/mod.rs` (~20)
|
|
- `llm/mod.rs` (~15)
|
|
- `security/jwt.rs` (~15)
|
|
- `attendance/mod.rs` (~10)
|
|
|
|
### 6.3 panic!/todo!/unimplemented! - BOM
|
|
Apenas **5 ocorrências**:
|
|
- 2 panic! (1 em WhatsApp - crítico, 1 em installer)
|
|
- 2 todo! (em bottest - aceitável)
|
|
- 1 panic! em teste
|
|
|
|
**Recomendação:** Substituir `.unwrap()` por tratamento adequado com `?`, `ok_or_else()`, ou `match`.
|
|
|
|
---
|
|
|
|
## 7. SQL Injection (IMP-04)
|
|
|
|
### ✅ Implementado corretamente
|
|
- Arquivo: `security/sql_guard.rs`
|
|
- 69 usos de `sanitize_identifier()` no codebase
|
|
- Previne SQL injection em operações de tabela
|
|
|
|
**Status:** ✅ CONFORME
|
|
|
|
---
|
|
|
|
## 8. Autenticação e Autorização
|
|
|
|
### 8.1 JWT
|
|
- Arquivo: `security/jwt.rs`
|
|
- Implementação robusta com tokens
|
|
|
|
### 8.2 RBAC
|
|
- Arquivo: `security/rbac_middleware.rs`
|
|
- Permissões baseadas em roles
|
|
|
|
### 8.3 Zitadel
|
|
- Arquivo: `security/zitadel_auth.rs`
|
|
- Integração com IdP externo
|
|
|
|
**Status:** ✅ CONFORME
|
|
|
|
---
|
|
|
|
## 9. Outras Vulnerabilidades
|
|
|
|
### 9.1 Secrets Management
|
|
- Arquivo: `security/secrets.rs`
|
|
- Integração com Vault
|
|
|
|
### 9.2 Password Security
|
|
- Arquivo: `security/password.rs`
|
|
- Hashing adequado
|
|
|
|
### 9.3 MFA/Passkey
|
|
- Arquivos: `security/mfa.rs`, `security/passkey.rs`, `security/passkey_service.rs`
|
|
|
|
### 9.4 DLP (Data Loss Prevention)
|
|
- Arquivo: `security/dlp.rs`
|
|
|
|
### 9.5 File Validation
|
|
- Arquivo: `security/file_validation.rs`
|
|
|
|
---
|
|
|
|
## 10. Recomendações Prioritárias
|
|
|
|
| # | Ação | Severidade | Esforço |
|
|
|---|------|------------|---------|
|
|
| 1 | Migrar Command::new de bootstrap_utils.rs para SafeCommand | ALTA | MÉDIO |
|
|
| 2 | Migrar Command::new de container_session.rs para AsyncCommand | ALTA | MÉDIO |
|
|
| 3 | Corrigir .unwrap() em whatsapp/mod.rs | ALTA | BAIXO |
|
|
| 4 | Migrar llm/local.rs (cmd_path dinâmico) para SafeCommand | ALTA | ALTO |
|
|
| 5 | Remover panic! em core/bot/channels/whatsapp.rs:65 | CRÍTICA | BAIXO |
|
|
|
|
---
|
|
|
|
## 11. Métricas
|
|
|
|
- **Linhas de código Rust:** ~150,000
|
|
- **Arquivos de segurança:** 30+
|
|
- **Testes de segurança:** Presentes
|
|
- **Cobertura de linting:** 0 warnings (clippy)
|
|
|
|
---
|
|
|
|
## 12. Conclusão
|
|
|
|
O projeto tem uma **base de segurança sólida** com:
|
|
- ✅ Rate limiting, CSRF, Headers implementados
|
|
- ✅ SQL guard implementado
|
|
- ✅ SafeCommand para maioria das execuções
|
|
|
|
**Pontos de atenção:**
|
|
- ~8 locais ainda usam Command::new direto
|
|
- ~945 .unwrap() que podem causar panics
|
|
- 1 panic! crítico em produção
|
|
|
|
**Recomendação:** Corrigir os itens de alta prioridade antes de push para produção.
|