docs(audit): sync 6c status — 6c-1/2/3/9 done, 6c-4 moot, order table + verdict
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+26
-22
@@ -182,12 +182,12 @@ stricte ; incohérence de **format** pré-existante (serveur `'yyyy-mm-dd
|
||||
hh:nn:ss'` vs export JS `toISOString()` avec `T…Z`) sur les rares rows sans
|
||||
`created_at`.
|
||||
|
||||
> ⚠️ **MAJ 2026-07-16 — « Tout est désormais UTC » était inexact.** La passe de
|
||||
> substitution a couvert les sites d'écriture *d'entries/attachments*, mais a
|
||||
> raté **`PM.Session.CreateSession`** (`FormatDateTime(..., IncHour(Now, 24))`,
|
||||
> heure locale), qui reste à ce jour le dernier `FormatDateTime(..., Now)` du
|
||||
> backend. Conséquence réelle sur les fuseaux négatifs. Détail + correctif en
|
||||
> **§6c-2**.
|
||||
> ⚠️ **MAJ 2026-07-16 — « Tout est désormais UTC » était inexact, puis corrigé.**
|
||||
> La passe de substitution avait raté **`PM.Session.CreateSession`**
|
||||
> (`FormatDateTime(..., IncHour(Now, 24))`, heure locale). ✅ **Corrigé en
|
||||
> §6c-2** (`IncHour(NowUTC, 24)` + `Authenticate` sur `NowUTC`). C'était le
|
||||
> dernier `FormatDateTime(..., Now)` du backend → §2.2 est maintenant réellement
|
||||
> clos.
|
||||
|
||||
### 2.3 🟡 `catch (_) {}` silencieux en cascade
|
||||
|
||||
@@ -729,6 +729,12 @@ l'a déjà fait (et après **6c-2** les deux sont sur la même base de temps).
|
||||
|
||||
### 6c-4. 🟡 `/migrate-kdf` rétrograderait un compte `-v2` (verrouillage définitif)
|
||||
|
||||
> ⛔ **SANS OBJET depuis 6c-1 (2026-07-16).** Le chemin migrate-kdf est
|
||||
> désactivé côté client (fonction `runKdfMigration` supprimée, triggers
|
||||
> retirés). L'endpoint reste inerte (rien ne l'appelle) → ce scénario de brick
|
||||
> n'est plus atteignable. Garde à ré-ajouter uniquement si migrate-kdf revenait
|
||||
> un jour.
|
||||
|
||||
Le garde d'idempotence ([Auth.pas:722](delphi-backend/Handlers/PM.Handler.Auth.pas:722))
|
||||
ne court-circuite que si l'algo vaut `pbkdf2-sha256`. Un compte `argon2id-v2` ou
|
||||
`pbkdf2-sha256-v2` **passe au travers** et se fait réécrire en
|
||||
@@ -938,15 +944,15 @@ Le second est correct **dans les deux cas** (no-op si c'était déjà le défaut
|
||||
|
||||
### Ordre d'application suggéré
|
||||
|
||||
| # | Sévérité | Effort | Note |
|
||||
| # | Sévérité | Effort | État (2026-07-16) |
|
||||
|---|---|---|---|
|
||||
| **6c-1** | 🔴 | Élevé | Le seul à pouvoir détruire des données. Faire l'extraction + les tests. |
|
||||
| **6c-2** | 🟠 | Trivial | 2 lignes. Ferme aussi le trou de §2.2. |
|
||||
| **6c-3** | 🟡 | Faible | Signature inchangée, aucun call-site touché. |
|
||||
| **6c-9** | ❓ | Trivial | 1 ligne, correcte dans tous les cas. |
|
||||
| **6c-4** | 🟡 | Trivial | 4 lignes, garde local. |
|
||||
| **6c-5** | 🔵 | Trivial | 5 lignes × 2 endroits. |
|
||||
| **6c-6/7/8** | 🔵 | Faible | Cohérence / hygiène, aucune urgence. |
|
||||
| **6c-1** | 🔴 | — | ✅ **Fait** — chemin migrate-kdf désactivé (option ultra) au lieu de réparé. |
|
||||
| **6c-2** | 🟠 | — | ✅ **Fait** — `expires_at` en UTC. Ferme §2.2. |
|
||||
| **6c-3** | 🟡 | — | ✅ **Fait** — CSRF lié à la session présentée (token_hash). |
|
||||
| **6c-9** | ❓ | — | ✅ **Fait** — `ForeignKeys=On` explicite. |
|
||||
| **6c-4** | 🟡 | — | ⛔ **Sans objet** — l'endpoint migrate-kdf est inatteignable depuis 6c-1. |
|
||||
| **6c-5** | 🔵 | Trivial | À faire — 5 lignes × 2 endroits (fail-fast params Argon2). |
|
||||
| **6c-6/7/8** | 🔵 | Faible | À faire — cohérence / hygiène, aucune urgence. |
|
||||
|
||||
Rappel build : tout edit JS impose `delphi-backend\assets\BuildAssets.cmd` **puis**
|
||||
le build Delphi, sinon l'exe garde les anciens assets.
|
||||
@@ -971,11 +977,9 @@ fuit ».
|
||||
|
||||
**MAJ 2026-07-16** : la revue backend Delphi (**§6c**) ne remet pas en cause ce
|
||||
verdict sur le **durcissement** — aucune injection, autorisation scopée partout,
|
||||
routes non authentifiées correctes, crypto saine. Elle sort en revanche un
|
||||
**🔴 de perte de données** resté invisible parce qu'il ne vit sur aucun des axes
|
||||
suivis : `/migrate-kdf` change la clé AES mais ne re-chiffre qu'un blob sur huit
|
||||
(**§6c-1**) — nouvelle instance de la classe §3.3, sur un call-site que la
|
||||
checklist « Entry payload » du CLAUDE.md ne liste pas. Elle corrige aussi une
|
||||
affirmation de **§2.2** (« Tout est désormais UTC ») : `PM.Session` avait été
|
||||
raté par la substitution (**§6c-2**). À traiter avant de considérer §2.2 comme
|
||||
clos.
|
||||
routes non authentifiées correctes, crypto saine. Le **🔴 de perte de données**
|
||||
(`/migrate-kdf` re-chiffrait 1 blob sur 8, **§6c-1**) est **traité** : chemin
|
||||
désactivé (les 2 comptes étaient déjà à 600k, jamais mordu). Faits aussi :
|
||||
expiry session UTC (**§6c-2**, clôt §2.2), CSRF lié à la bonne session
|
||||
(**§6c-3**), `foreign_keys` explicite (**§6c-9**). Reste du confort/hygiène
|
||||
(**§6c-5/6/7/8**), sans urgence.
|
||||
|
||||
Reference in New Issue
Block a user