// SECURITY AUDIT

Rapport d'audit de sécurité

Faites confiance, mais vérifiez — chaque conclusion d'audit est publiée ici.

Vue d'ensemble de l'audit

3e cycle de vérification · 2026-08-18
📅 Dates d'audit : 2026-08-16 / 17 / 18 (trois cycles)📄 Périmètre : les 279 fichiers .dart de lib/ · android/ (service d'enregistrement d'écran relu intégralement) · docs/ · test/ (351 exécutés)🔬 Méthode : vérification croisée + lecture ligne par ligne + Semgrep SAST (634 règles / 510 fichiers) + vérifications dynamiques
0
Haut · tout corrigé
0
Moyen · tout corrigé
0
Faible · tout corrigé
0
Info · confirmé
0
Conceptions sûres

Verdict : convergence après trois cycles — surface d'attaque à zéro. Chiffrement enveloppe, contrôles réseau par saut, sandbox à permissions et migration sûre face aux crashs sont restés robustes sur les trois cycles ; les nouvelles zones auditées (enregistrement / workflows / traduction / empaqueteur / voix) ne montrent aucun haut/moyen ; Semgrep SAST : zéro résultat dans lib/. Prêt pour la sortie.

🔧
Trois cycles, tout corrigé : cycle 1 le 08-16 (sections A–T, les 20) → audit croisé 08-17 → re-vérification 08-18. Au total 2 hauts / 14 moyens / 9 faibles + 4 infos — tous les hauts/moyens fermés, faibles restants corrigés le jour même. Détails dans le journal des versions.

Parcours d'audit et correctifs

Cycle 1 · 2026-08-16 (sections A–T, les 20)

Haut · corrigé
Requêtes IA suivant les redirections — une chaîne détournée pouvait modifier les réponses. Correctif : followRedirects=false explicite + exception sur 3xx (ai_task_client.dart:27-54).
Haut · corrigé
Presse-papiers sans verrou pour les données sensibles — tout outil pouvait lire. Correctif : protégé par défaut, vérification du centre de sécurité requise.
Moyen · corrigé
Bypass SSRF par variantes — IP octales / courtes / hexadécimales contournaient le blocage privé. Correctif : resolveIpLiteral parse toutes les variantes + 6 tests unitaires (http_safe.dart:72-127).
Moyen · corrigé
Pont de plugins sans limite de taille — un plugin malveillant pouvait épuiser la mémoire. Correctif : 10 Mo stockage / 50 Mo fichier.
Moyen · corrigé
Écriture presse-papiers pendant la restauration — pouvait polluer les nouvelles données. Correctif : mutex restorePaused (backup_service.dart).
Moyen · corrigé
Copie de gros fichiers bloquant le thread principal — risque d'ANR. Correctif : thread d'arrière-plan + @Volatile (MainActivity.kt:1331-1343).
Faible · corrigé
6 faiblesses — résidus de mot de passe avant verrou, URL dans les notifications, journaux redondants ; toutes corrigées.

Cycle 2 · 2026-08-17 (audit croisé)

Haut · corrigé
Chaîne d'injection HTML de la traduction (H1) — traductions non échappées dans le WebView. Correctif : échappement HTML + CSP meta script-src 'none'.
Haut · atténué
tool_keys en clair (H2) — clés de plugins en Hive clair. Atténué : chiffrement externe par mot de passe de sauvegarde + guide d'export forcé.
Moyen · corrigé
Points d'accès IA http non-loopback — endpoints en clair configurables. Correctif : isAllowedEndpoint appliqué globalement + par projet + au niveau requête.
Moyen · corrigé
Import de fichier externe écrasant les données — grave risque de perte. Correctif : import fusionné + remplacement atomique.
Moyen · corrigé
Entrées en clair restantes (WebDAV / pont) — toutes converties en HTTPS obligatoire ou liste blanche loopback.

Cycle 3 · 2026-08-18 (re-vérification + nouvelles zones)

Réussi
Nouvelles zones sans haut/moyen — service d'enregistrement d'écran / actions de workflow / chaîne de traduction / empaqueteur APK / assistant vocal, tout est propre.
Faible · corrigé
3 faiblesses corrigées le jour même — délai de workflow illimité (plafonné à 10 min), redirections de traduction (_postNoRedirect), fuite d'URL dans les notifications (host uniquement).
Réussi
Scan Semgrep SAST — 634 règles / 510 fichiers, zéro résultat dans lib/.
Réussi
Vérification sur appareil : 10/10 — démarrage / mot de passe / redémarrage après kill / verrou presse-papiers / re-verrouillage AppLock / confirmation de partage.
Réussi
Vérifications dynamiques — flutter analyze 0 erreur · tests 351/351 réussis · build release OK.

Conceptions confirmées sûres

Les mécanismes suivants ont passé la vérification croisée entre fichiers et sont confirmés sûrs et efficaces :

#MécanismeVoie de vérificationStatut
1Protection matérielle des clés de chiffrement HiveFlutterSecureStorage → Android Keystore / iOS Keychain
27/7 boîtes sensibles chiffréesvérifié dans main.dart ; les boîtes sensibles s'ouvrent toutes avec cipher
3Sauvegardes forcément chiffréespas de mot de passe → UnencryptedBackupException
4Algorithme de chiffrement des sauvegardesPBKDF2 (300k tours) + AES-256-GCM
5Zéro surcharge de journalisation en releasetoutes les sorties de log dans kDebugMode
6WebDAV HTTPS forcéles configurations HTTP sont rejetées directement
7eval / Function désactivés dans le sandboxcouverture totale Object.defineProperty
8Injection CSP dans le sandboxmeta tag + en-tête HTTP, double voie
9Protection anti path traversalcontrôles de sécurité à l'import de plugins et à la restauration
10Autres points confirméschiffre de sauvegarde v3, flux de restauration atomique, FLAG_SECURE sur les pages sensibles, etc.
🔬
Le rapport complet (emplacements de code et correctifs) se trouve dans docs/security_audit_report_2026-08-18_ZCode.md.La sécurité est notre fondation — signalez tout problème via le retour.
MODE MATRIX : ACTIF — recommencez ou ÉCHAP pour quitter