// SECURITY AUDIT

Relatório de auditoria de segurança

Confia, mas verifica — cada conclusão da auditoria é publicada aqui.

Resumo da auditoria

3.ª ronda de revisão · 2026-08-18
📅 Datas da auditoria: 2026-08-16 / 17 / 18 (três rondas)📄 Âmbito: os 279 ficheiros .dart de lib/ · android/ (serviço de gravação de ecrã revisto na íntegra) · docs/ · test/ (351 executados)🔬 Método: verificação cruzada + leitura linha a linha + Semgrep SAST (634 regras / 510 ficheiros) + verificações dinâmicas
0
Alto · tudo corrigido
0
Médio · tudo corrigido
0
Baixo · tudo corrigido
0
Info · confirmado
0
Conceções seguras

Veredito: convergência após três rondas — superfície de ataque a zero. Cifragem de envelope, verificações de rede salto a salto, sandbox com permissões e migração segura contra falhas mantiveram-se sólidos nas três rondas; as novas zonas auditadas (gravação / fluxos / tradução / empacotador / voz) sem altos nem médios; Semgrep SAST: zero correspondências em lib/. Pronto para lançamento.

🔧
Três rondas, tudo corrigido: ronda 1 a 08-16 (secções A–T, as 20) → auditoria cruzada 08-17 → reverificação 08-18. No total 2 altos / 14 médios / 9 baixos + 4 informativos — todos os altos/médios fechados, os baixos restantes corrigidos no mesmo dia. Detalhes no registo de alterações.

Percurso da auditoria e correções

Ronda 1 · 2026-08-16 (secções A–T, as 20)

Alto · corrigido
Pedidos de IA seguiam redirecionamentos — uma cadeia sequestrada podia alterar respostas. Correção: followRedirects=false explícito + exceção em 3xx (ai_task_client.dart:27-54).
Alto · corrigido
Área de transferência sem proteção para dados sensíveis — qualquer ferramenta podia ler. Correção: protegida por predefinição, exige verificação do centro de segurança.
Médio · corrigido
Contorno de SSRF por variantes — IPs octais / curtas / hexadecimais contornavam o bloqueio de redes privadas. Correção: resolveIpLiteral analisa todas as variantes + 6 testes unitários (http_safe.dart:72-127).
Médio · corrigido
Ponte de plugins sem limite de tamanho — um plugin malicioso podia esgotar a memória. Correção: 10 MB armazenamento / 50 MB ficheiro.
Médio · corrigido
Escrita na área de transferência durante a restauração — podia contaminar dados novos. Correção: mutex restorePaused (backup_service.dart).
Médio · corrigido
Copiar ficheiros grandes bloqueava o thread principal — risco de ANR. Correção: thread em segundo plano + @Volatile (MainActivity.kt:1331-1343).
Baixo · corrigido
6 achados baixos — resíduos de palavra-passe antes do bloqueio, URL em notificações, registos redundantes; todos corrigidos.

Ronda 2 · 2026-08-17 (auditoria cruzada)

Alto · corrigido
Cadeia de injeção HTML na tradução (H1) — traduções sem escape direto para o WebView. Correção: escape HTML + CSP meta script-src 'none'.
Alto · mitigado
tool_keys em claro (H2) — chaves de plugins em Hive sem cifrar. Mitigado: cifragem externa com palavra-passe de backup + guia de exportação forçada.
Médio · corrigido
Endpoints IA http não-loopback — pontos de acesso em claro configuráveis. Correção: isAllowedEndpoint aplicado a nível global, de projeto e de pedido.
Médio · corrigido
Importação externa sobrescrevia dados existentes — grave risco de perda. Correção: importação combinada + substituição atómica.
Médio · corrigido
Entradas em claro restantes (WebDAV / ponte) — todas convertidas em HTTPS obrigatório ou lista branca de loopback.

Ronda 3 · 2026-08-18 (reverificação + novas zonas)

Superado
Novas zonas sem altos/médios — serviço de gravação / ações de fluxo / cadeia de tradução / empacotador APK / assistente de voz, tudo limpo.
Baixo · corrigido
3 achados baixos corrigidos no mesmo dia — atraso de fluxo ilimitado (limitado a 10 min), redirecionamentos de tradução (_postNoRedirect), fuga de URL em notificações (só host).
Superado
Scan Semgrep SAST — 634 regras / 510 ficheiros, zero correspondências em lib/.
Superado
Verificação em dispositivo: 10/10 — arranque / configuração de palavra-passe / reinício após kill / bloqueio da área de transferência / rebloqueio do AppLock / confirmação de partilha.
Superado
Verificações dinâmicas — flutter analyze 0 erros · 351/351 testes superados · compilação release OK.

Designs confirmados como seguros

Os seguintes mecanismos passaram a verificação cruzada entre ficheiros e estão confirmados como seguros e eficazes:

#MecanismoVia de verificaçãoEstado
1Proteção por hardware das chaves de cifragem HiveFlutterSecureStorage → Android Keystore / iOS Keychain
27/7 caixas sensíveis cifradasverificado em main.dart; as caixas sensíveis abrem todas com cipher
3Backups forçosamente cifradossem palavra-passe → UnencryptedBackupException
4Algoritmo de cifragem de backupsPBKDF2 (300k rondas) + AES-256-GCM
5Zero sobrecarga de registo em releasetodas as saídas de log dentro de kDebugMode
6WebDAV com HTTPS forçadoconfigurações HTTP rejeitadas diretamente
7eval / Function desativados no sandboxcobertura total com Object.defineProperty
8Injeção de CSP no sandboxmeta tag + cabeçalho HTTP, dupla via
9Proteção anti path traversalverificações de segurança na importação de plugins e restauração de backups
10Outros pontos confirmadoscifra de backups v3, fluxo de restauração atómico, FLAG_SECURE em páginas sensíveis, etc.
🔬
O relatório completo (com localizações de código e correções) está em docs/security_audit_report_2026-08-18_ZCode.md do projeto.A segurança é o nosso alicerce — informe qualquer problema através de feedback.
MODO MATRIX: LIGADO — repita ou prima ESC para sair