// SECURITY AUDIT

Relatório de auditoria de segurança

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

Resumo da auditoria

Publicado
📅 Data da auditoria: 2026-06-01📄 Âmbito: os 159 ficheiros .dart de lib/ · 14 plugins .html em plugins/ · configuração de android/🔬 Método: verificação cruzada entre ficheiros + auditoria em camadas de baixo para cima
0
Crítico
0
Elevado
0
Médio
0
Baixo
0
Confirmado seguro

Veredicto geral: a postura de segurança do projeto é sólida. Os mecanismos centrais estão bem implementados: cifragem de dados sensíveis em Hive, isolamento em sandbox, HTTPS forçado. Os principais problemas concentram-se na gestão de chaves da máquina de build Android, algumas caixas Hive fora do âmbito de cifragem e a inserção de palavras-passe na camada de plugins.

🔧
Progresso das correções desde a publicação: versões posteriores já corrigiram vários pontos — chaves de API por fornecedor em compartimentos cifrados (v1.7.0), cifragem falsa do gestor de palavras-passe reescrita como AES-256-GCM real (v1.7.0), persistência 2FA (v1.7.0), verificação SSL rigorosa no kit de rede (v1.7.0), filtragem de campos sensíveis no clipboard (v1.7.0), recifragem automática ao mudar a palavra-passe mestra (v1.1.0). Correções recentes: ver o registo de alterações.

Problemas reais confirmados

🔴 Crítico

Crítico
#1 Palavra-passe da chave de assinatura Android em texto simples — a frase secreta da chave de assinatura está em claro na configuração da máquina de build; comprometer a máquina equivale a comprometer a chave de assinatura.

🟠 Elevado

Elevado
#2 A caixa ai_plugin_projects guarda aiApiKey sem cifragem — as chaves de IA ao nível de projeto são persistidas em claro em Hive, fora do âmbito de cifragem.
Elevado
#3 Chave de licença de teste codificada no mercado de plugins — credenciais de teste não devem constar em builds de lançamento.
Elevado
#4 Permissão REQUEST_INSTALL_PACKAGES — a app pede instalação a partir de fontes desconhecidas; o caso de uso deve ser minimizado.

🟡 Médio

Médio
#5 Chave de API do Baidu Translate transmitida por parâmetro GET na URL — a chave pode aparecer em registos de acesso / histórico.
Médio
#6 Os plugins inserem palavras-passe de cifragem via prompt() — a inserção de palavras-passe no sandbox deve usar o canal de teclado seguro do anfitrião.
Médio
#7 Palavra-passe do backup automático WebDAV guardada em Hive — é preciso confirmar que está dentro de uma caixa cifrada.
Médio
#8 Permissão RECORD_AUDIO — deve ser pedida só a pedido para gravação, não permanentemente.

🟢 Baixo

Baixo
#9 A caixa sticky_notes guarda notas de utilizador sem cifragem
Baixo
#10 O plugin de contabilidade guarda dados financeiros em claro
Baixo
#11 Indicador requestLegacyExternalStorage — deve ser removido com a subida do targetSdk
Baixo
#12 O plugin de marcadores permite URLs http:// — páginas em claro devem mostrar um aviso de rebaixamento por defeito
Baixo
#13 A exportação de registos de erro pode expor caminhos internos — os stack traces contêm caminhos de ficheiro e estrutura do código

⚪ Problemas suspeitos (confirmação manual necessária)

Suspeito
S1 Uso generalizado de innerHTML em plugins (13/14 plugins) — a maioria já faz escape com escapeHtml(), e a CSP do sandbox limita scripts externos, mas qualquer escape em falta é um possível XSS de DOM.
Suspeito
S2 Chamadas console.log / console.error em plugins — a saída vai para logcat; o conteúdo são objetos de erro sem dados de utilizador, risco baixo.

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 recomendações de correção por ponto) será publicado com o repositório de código aberto. Esta é a versão resumida. A segurança é o nosso fundamento — qualquer achado é bem-vindo via feedback.
MODO MATRIX: LIGADO — repita ou prima ESC para sair