fix(securite): lock down the two unauthenticated emergency endpoints

- POST /api/emergency-admin-reset accepted a fallback secret hardcoded in
  the repository, letting anyone who read the source reset the production
  admin account to admin/admin (EMERGENCY_SECRET is not set in the shipped
  docker-compose, so the fallback was live). The route now returns 404
  unless EMERGENCY_SECRET is explicitly configured, and invalid attempts
  are logged.
- POST /api/admin/emergency-migration ran database migrations with no
  authentication at all; it now requires an authenticated admin.

A sweep of the remaining API surface found no other unauthenticated
mutation or read routes beyond /api/health. .env.example documents
EMERGENCY_SECRET and ENCRYPTION_KEY.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FHdE9nEh8zHhQNGpCgrtYe
This commit is contained in:
Claude committed 2026-08-14 16:21:40 +00:00
1 parent 37a8d2b40c
commit 0a816fa881
3 files changed
+28 -7

No files matched your search

+9 -1
View File
@@ -21,4 +21,12 @@ POSTGRES_PORT=5434
# Note de sécurité:
# Les identifiants sont préconfigurés pour simplifier le déploiement.
# En production, vous pouvez les modifier si nécessaire.
# En production, vous pouvez les modifier si nécessaire.
# Chiffrement des secrets en base (mots de passe SMTP, jetons NocoDB).
# Repli sur SESSION_SECRET si absent. ATTENTION : changer cette clé rend
# les secrets déjà chiffrés illisibles.
ENCRYPTION_KEY=
# Route de secours POST /api/emergency-admin-reset : désactivée si vide.
# Ne définir qu'en cas de besoin, puis retirer.
EMERGENCY_SECRET=