Security: JWT Secret Validation bei Startup erzwingen #40

Open
opened 2026-03-30 19:54:41 +00:00 by David · 0 comments
Collaborator

Beschreibung

Der JWT SECRET_KEY hat einen Default-Wert "bruno-secret-change-me" im Code. Wenn die .env nicht gesetzt ist, kann jeder JWT-Tokens fälschen. Startup muss abbrechen wenn der Secret nicht explizit konfiguriert wurde.

Hintergrund

auth_service.py:9 setzt SECRET_KEY = "bruno-secret-change-me". Dieser Wert ist im Source Code öffentlich sichtbar. Wenn ein Deployment ohne .env gestartet wird, sind alle Auth-Endpoints kompromittiert — jeder kann sich Admin-Tokens generieren.

Akzeptanzkriterien

  • Startup schlägt fehl wenn JWT_SECRET_KEY nicht in der Umgebung gesetzt ist (kein Default)
  • Startup schlägt fehl wenn JWT_SECRET_KEY kürzer als 32 Zeichen ist
  • Klare Fehlermeldung: "JWT_SECRET_KEY must be set in environment. Generate with: python -c 'import secrets; print(secrets.token_hex(32))'"
  • .env.example enthält Generierungs-Hinweis
  • Test: App startet nicht mit Default-Secret

Technische Hinweise

  • Fix in: backend/services/auth_service.py — Default entfernen
  • Fix in: backend/main.py oder backend/config.py — Validation bei Startup
  • Migration nötig: nein

Aufwand: S

## Beschreibung Der JWT SECRET_KEY hat einen Default-Wert `"bruno-secret-change-me"` im Code. Wenn die `.env` nicht gesetzt ist, kann jeder JWT-Tokens fälschen. Startup muss abbrechen wenn der Secret nicht explizit konfiguriert wurde. ## Hintergrund `auth_service.py:9` setzt `SECRET_KEY = "bruno-secret-change-me"`. Dieser Wert ist im Source Code öffentlich sichtbar. Wenn ein Deployment ohne `.env` gestartet wird, sind alle Auth-Endpoints kompromittiert — jeder kann sich Admin-Tokens generieren. ## Akzeptanzkriterien - [ ] Startup schlägt fehl wenn `JWT_SECRET_KEY` nicht in der Umgebung gesetzt ist (kein Default) - [ ] Startup schlägt fehl wenn `JWT_SECRET_KEY` kürzer als 32 Zeichen ist - [ ] Klare Fehlermeldung: "JWT_SECRET_KEY must be set in environment. Generate with: python -c 'import secrets; print(secrets.token_hex(32))'" - [ ] `.env.example` enthält Generierungs-Hinweis - [ ] Test: App startet nicht mit Default-Secret ## Technische Hinweise - Fix in: `backend/services/auth_service.py` — Default entfernen - Fix in: `backend/main.py` oder `backend/config.py` — Validation bei Startup - Migration nötig: nein ## Aufwand: S
Sign in to join this conversation.
No description provided.