fix(security): consolidation & securite phase 1 (#84, BUG-021 a BUG-034)
CI / lint (push) Successful in 1m20s
CI / security (push) Successful in 47s
CI / test (push) Successful in 2m21s
CI / build (push) Successful in 43s
CI / e2e (push) Successful in 10m48s

- sanitizer XSS serveur (markdown + page de partage) [BUG-021/022]
- rate-limit/lockout MFA [BUG-023]
- isolation vaults par segments [BUG-024]
- caps regex ReDoS [BUG-025]
- SSRF webhooks + secrets externalises [BUG-026]
- rotation/revocation des jetons [BUG-027]
- politique de mot de passe + invalidation sessions [BUG-028]
- verrous users.json [BUG-029]
- IP reelle dans les audits [BUG-030]
- rate-limit par compte [BUG-031]
- symlinks hors vault ignores [BUG-032]
- recherche simple via inverted index [BUG-033]
- token en memoire + cookie HttpOnly, CSP durcie [BUG-034]

Tests: pytest 961 passed / 6 skipped, ruff 0, mypy 0, frontend vert.
This commit is contained in:
2026-09-13 10:51:42 -04:00
parent d47fcbf2be
commit 162a5b4acc
29 changed files with 1690 additions and 281 deletions
+25
View File
@@ -317,6 +317,31 @@
---
## #84 — Consolidation & sécurité (phase 1) ✅ TERMINÉ
Traitement des vulnérabilités de la revue statique du 2026-09-13 (BUG-021 → BUG-034).
- **Sanitizer XSS serveur** (`backend/services/sanitizer.py`, stdlib, liste blanche
de balises/attributs/schémas) appliqué au rendu markdown et à la page publique
`/s/{token}` (titre, frontmatter et JSON échappés, `</script>` neutralisé).
- **Auth durcie** : rate-limit IP + compte et verrouillage sur les endpoints MFA ;
rotation du refresh token et révocation de l'access token au logout ; politique de
mot de passe centralisée (8–128) ; `password_changed_at` invalide les jetons
antérieurs ; verrou `RLock` sur `users.json`.
- **Isolation & réseau** : `resolve_safe_path` compare par segments (`vault` ≠
`vault-evil`) ; webhooks protégés contre le SSRF (HTTPS, IP privées bloquées,
résolution vérifiée, redirections interdites, secret externalisé) ; IP client
réelle dans les audits.
- **Robustesse** : validation des regex (ReDoS), symlinks hors vault ignorés à
l'indexation, recherche simple et `search_fulltext` branchés sur l'inverted index.
- **Frontend** : token d'accès en mémoire + cookie `HttpOnly` (plus de
`sessionStorage`), CSP durcie (`object-src`, `base-uri`, `form-action`,
`frame-ancestors`).
- **Tests** : `tests/test_security_hardening.py` (30) ; suite backend 961 passed /
6 skipped ; ruff + mypy 0 ; suites frontend vertes.
---
## Grosses fonctionnalités — fiches dédiées
| # | Feature | Version | Fiche |