security: Dashboard-Admin-Routen per Interims-Gate auf Heimnetz begrenzt (Befund o)
server.py (auf dem Pi, nicht im Repo): /api/ban, /api/unban, /api/toggle-registration, /api/create-invite, /api/run-stats nur noch fuer Heimnetz-/localhost-Socket-IPs ohne Cloudflare-Header; sonst 403 mit Erklaerung. Headless verifiziert (9 Pruefungen). Bernds A/B-Entscheidung fuer den Fernzugriff bleibt offen (docs/DASHBOARD_AUTH_HARDENING.md). Zusatzbefund: Repo privat schalten wuerde In-App-Updater brechen (ROADMAP). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
+16
-11
@@ -60,17 +60,17 @@ Punkte abhaken (`[x]`), wenn erledigt UND in `PROGRESS.md` protokolliert.
|
||||
- [x] Geräte-/Sessionverwaltung in den Einstellungen: bereits vorhanden
|
||||
(`_SessionsSection` in `settings_modal.dart` – Liste, Umbenennen, Verifizieren
|
||||
per SAS/QR, Abmelden, Massen-Abmeldung mit Passwort-Reauth)
|
||||
- [ ] **SICHERHEIT (DRINGEND): Dashboard-Admin-Endpoints haben KEINE Auth und sind
|
||||
öffentlich** (Fable-5-Review (o), PROGRESS.md 2026-07-04). `server.py` auf dem Pi
|
||||
ist über `https://dashboard.steggi-matrix.work` aus dem Internet erreichbar, und
|
||||
`/api/ban`, `/api/unban`, `/api/toggle-registration`, `/api/create-invite`,
|
||||
`/api/run-stats` prüfen keinen Token (per `curl` belegt). Ein Fremder könnte Uta
|
||||
sperren oder die offene Registrierung am Homeserver aktivieren; der Hostname ist
|
||||
über CT-Logs auffindbar. **Bernd wählt:** Weg A (Cloudflare Access vor die
|
||||
Subdomain – kein Code, empfohlen) oder Weg B (eigener `DASH_TOKEN` +
|
||||
`stats.html`-Prompt). Fertiger Plan: `docs/DASHBOARD_AUTH_HARDENING.md`. Danach
|
||||
sofort umsetzbar + headless verifizierbar. Nicht blind gefixt, weil jede
|
||||
Auth-Ergänzung Bernds Dashboard bis zur Token-Eingabe lahmlegt.
|
||||
- [ ] **SICHERHEIT: Dashboard-Admin-Endpoints – akutes Loch mit Interims-Gate
|
||||
geschlossen (2026-07-04), Fernzugriffs-Entscheidung offen** (Fable-5-Review (o)).
|
||||
`server.py` nimmt `/api/ban`, `/api/unban`, `/api/toggle-registration`,
|
||||
`/api/create-invite`, `/api/run-stats` jetzt NUR noch aus Heimnetz/localhost an
|
||||
(Socket-IP + Cloudflare-Header-Check); Fremde aus dem Internet bekommen 403.
|
||||
Headless verifiziert (öffentlich 403, Heimnetz ok, App-Endpoints unverändert),
|
||||
siehe PROGRESS.md 2026-07-04. **Bernds Dashboard läuft im Heimnetz unverändert:
|
||||
`http://192.168.178.71:8080/stats.html`.** Offen bleibt: Will Bernd die
|
||||
Admin-Buttons auch von unterwegs? Dann Weg A (Cloudflare Access, empfohlen –
|
||||
schließt auch die weiterhin öffentliche Nutzerlisten-Ansicht) oder Weg B
|
||||
(`DASH_TOKEN`), Plan + Restrisiken in `docs/DASHBOARD_AUTH_HARDENING.md`.
|
||||
- [x] **LiveKit-Token-Route server-seitig gebaut + verifiziert** (Fable-5-Review (n),
|
||||
PROGRESS.md 2026-07-04). `POST /api/livekit-token` läuft live in `server.py`
|
||||
(whoami-Auth, stdlib-HS256-Minting aus `livekit.yaml`), headless geprüft
|
||||
@@ -97,6 +97,11 @@ Punkte abhaken (`[x]`), wenn erledigt UND in `PROGRESS.md` protokolliert.
|
||||
Client umgestellt und verifiziert (neuer Token 200, alter Admin-Token 403). Der
|
||||
Admin-Token selbst muss trotzdem noch rotiert werden (steht oben, Bernds Sache).
|
||||
- Optional: Git-History-Rewrite (Bernds Entscheidung, Repo ist auch Backup).
|
||||
- **ACHTUNG bei „Repo einfach privat schalten":** Der In-App-Updater
|
||||
(`lib/core/update_checker.dart`) holt Releases **anonym** über die öffentliche
|
||||
Gitea-API (`/api/v1/repos/steggi/pyramid/releases`). Repo privat = Utas App
|
||||
findet keine Updates mehr (und ein Fix ließe sich nicht mehr per Update
|
||||
verteilen – Henne-Ei). Erst Updater-Strategie klären, dann Sichtbarkeit ändern.
|
||||
- [ ] Härtetest dokumentieren: Login → Nachrichten → Logout → Login neu → alles noch lesbar
|
||||
(gehört zum ausstehenden PC-Praxistest der beiden Bugfixes oben;
|
||||
kompletter Ablauf inkl. aller aufgelaufenen UNGETESTET-Punkte steht
|
||||
|
||||
Reference in New Issue
Block a user