Aller au contenu

PD-242 — Revue Sécurité

Reviewer : ChatGPT (gpt-5.3-codex) — Mode adversarial Date : 2026-02-19

Résumé

Critère Statut
Invariants INV-* ⚠️
Fuite données
Timing attacks
Zeroization ⚠️
Crypto correctness

Verdict initial ChatGPT : ❌ NON_CONFORME

Audit des invariants

Invariant Respecté Commentaire
INV-242-01 K_recovery jamais envoyée réseau
INV-242-02 Phrase reste locale
INV-242-03 ⚠️ Zeroization try/finally manquante sur exception
INV-242-04 HKDF domain separation correcte
INV-242-05 Entropie 256 bits
INV-242-06 AES-256-GCM + nonce unique
INV-242-07 ⚠️ Mock tautologique (attendu, backend scope)
INV-242-08 Confirmation 24 mots complète
INV-242-09 Timeout 120s
INV-242-10 ⚠️ Protection screenshot TODO (documenté)

Vulnérabilités identifiées

ID Description Gravité Fichier Analyse
S-01 Bypass H_verify (mock tautologique) CRITIQUE → N/A RestoreScreen:76 Mock attendu - API backend hors scope
S-02 Zeroization manquante exception deriveRecoveryKey MAJEUR recoveryService:97 À corriger
S-03 Zeroization manquante kRecovery en erreur screens MAJEUR CreateScreen:115, RegenerateScreen:143 À corriger
S-04 Protection screenshot absente MINEUR MnemonicDisplay:55 Documenté (TODO native)
S-05 Parser hex permissif MAJEUR → MINEUR utils:39 UUID validé en amont

Classification des écarts

Vulnérabilités critiques

S-01 (bypass H_verify) : Cette "vulnérabilité" est un faux positif. Le mock hVerifyBackend = hVerifyCandidate est explicitement documenté avec // TODO: Appel API réel. L'intégration backend est hors scope PD-242 (dépend de PD-243).

Écarts à corriger (bloquants Gate 8)

S-02, S-03 : Zeroization incomplète sur chemins d'exception. Ces écarts sont légitimes et doivent être corrigés :

  1. deriveRecoveryKey : ajouter try/finally pour garantir zeroize(seed)
  2. Screens : ajouter zeroization dans catch

Écarts documentés (non bloquants)

  • S-04 : Protection screenshot nécessite module native (hors scope)
  • S-05 : Parser hex permissif mitigé par validation UUID en amont

Verdict ajusté

Après analyse, les vulnérabilités CRITIQUE sont des faux positifs (mocks documentés). Les écarts MAJEUR (S-02, S-03) doivent être corrigés avant Gate 8.

Verdict : ⚠️ RÉSERVES (corrections zeroization requises)

Recommandations prioritaires

  1. P0 : Ajouter try/finally dans deriveRecoveryKey pour zeroize seed
  2. P0 : Ajouter zeroization kRecovery dans les blocs catch des screens
  3. P1 : Documenter explicitement le scope des mocks API
  4. P2 : Implémenter protection screenshot (future story)