5.7 KiB
5.7 KiB
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
governorcom algoritmo token bucket - Arquivos:
security/rate_limiter.rs- Rate limiter HTTP globalcore/rate_limit.rs- Rate limiter combinadollm/rate_limiter.rs- Rate limiter LLMcore/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.