PD-276 — Revue Sécurité¶
Résumé¶
| Critère | Statut |
|---|---|
| Forbidden patterns | ⅚ conformes (1 réserve) |
| Timing attacks | Partiellement conforme |
| Zero-knowledge | Non conforme (ambiguïté architecturale majeure) |
| Key material safety | Partiellement conforme |
| Validation | Non conforme |
Verdict : NON_CONFORME
Audit des forbidden patterns¶
| Pattern interdit | Recherché | Trouvé |
|---|---|---|
| Dépendance argon2 native | Imports/usage natif | Non trouvé dans extraits |
Import crypto.hash/pbkdf2 | pbkdf2, crypto.hash | Non trouvé |
Buffer.equals() pour tags | Comparaison tags | Non trouvé (timingSafeEqual utilisé) |
K_master_user clé HMAC directe | createHmac(..., kMasterUser) | Non trouvé (HKDF intermédiaire) |
Logger de K_binding/metadata_tag | Logs sensibles | Non trouvé |
Math.random() | Génération aléa | Non trouvé |
| Injection log via metadata (pattern risqué connexe) | Interpolation champs non-sanitized | Trouvé (verifyTagOrThrow) |
Tentatives de bypass¶
| Attaque | Résultat | Commentaire |
|---|---|---|
| Timing attack | Réussite partielle (oracle) | timingSafeEqual est bon, mais retour anticipé si longueur tag ≠ 32 (false immédiat) crée un oracle de format/longueur. |
| Bypass validation Argon2id | Réussite | validateParams ne vérifie pas type numérique entier/safe integer. NaN, chaînes non numériques, voire valeurs exotiques peuvent contourner </> (comparaisons fausses). |
Fuite K_binding | Échec | Bonne pratique: kBinding.fill(0) dans finally. |
| Canonical confusion | Réussite conditionnelle | Séparateur NUL seul: si un champ contient |