Sicherheit: Mögliche Konten-Aufdeckung bei SMTP-Fehlern im Passwort-Reset #37
Labels
No labels
epic/katalog
epic/konto
epic/partien
epic/querschnitt
epic/sammlung
needs-clarification
prio/could
prio/must
prio/should
size/l
size/m
size/s
size/xl
status/in-progress
status/ready-for-merge
status/spec-review
type/bug
type/epic
type/story
type/tech
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: cschlaefke/Shuffle#37
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Kontext
Aus dem Review von PR #36 (KTO-01, 01c). Refs #1.
Problem (Verdacht, nicht nachgewiesen)
GoTrue liefert bei
POST /recoverfür unbekannte Adressen immer 200. Für bestehende Adressen wird tatsächlich eine Mail versendet. Schlägt der Versand fehl (SMTP-Ausfall, SMTP-Fehler), könnte GoTrue für bestehende Adressen einen Fehler (z. B. 500) liefern, für unbekannte aber weiterhin 200.Der
ForgotPasswordControllerbehandelt nurover_email_send_rate_limit(emailSendLimited, F12) wie Erfolg. Alle anderen Fehler laufen in dendefault-Zweig und zeigen ein Fehler-Banner. Dann wäre am Banner erkennbar, ob ein Konto zu der Adresse existiert (Konten-Enumeration). Dasselbe Muster ist beimsignUpals Restrisiko „SMTP-Ausfall“ bekannt (Spec, Risiken).Zu klären
recoverundsignupmit nicht erreichbarem/fehlerhaftem SMTP (Mailpit abschalten), jeweils bekannte vs. unbekannte Adresse: Statuscode und Body vergleichen.docs/auth-konfiguration.md.Betroffen
app/lib/features/auth/presentation/forgot_password/forgot_password_controller.dart(Falldefault),register_controller.dart,auth_failure_mapper.dart; ggf. Gateway/Betrieb (D1).Priorität
Sicherheitsrelevant (Enumeration-Schutz, KTO-01 Krit. 4). Vor dem Produktiv-Release zu klären.
Spike-Ergebnis (aus #38, GoTrue v2.197.0, SMTP-Port lehnt Verbindung ab)
Das Risiko ist bestätigt: Bei SMTP-Ausfall verrät die rohe API die Existenz eines Kontos. Antworten kamen jeweils in unter 60 ms, ein Zeit-Seitenkanal besteht nicht.
/recoverunexpected_failure/resend/signupFolgerung: Die App zeigt im Fall
defaultein Fehler-Banner, dadurch ist bei „Passwort vergessen“ und beim erneuten Senden erkennbar, ob ein Konto existiert. Bei der Registrierung kehrt sich das Muster um (neue Adresse = 500, bestätigte = 200).Offen: SMTP-Server, der die Verbindung annimmt, aber nicht antwortet (Timeout), z. B.
GOTRUE_SMTP_HOST=10.255.255.1. Siehedocs/auth-konfiguration.mdAbschnitt 7 (auf Branchfeature/38-auth-e2e).Entscheidung nötig (Chris): Option 1: Client zeigt bei jedem Nicht-Eingabefehler dieser Aufrufe die neutrale CheckEmail-Seite (Nutzer erfährt bei echtem SMTP-Ausfall nichts, Monitoring nötig). Option 2: Vereinheitlichen am Gateway. Option 3: Risiko akzeptieren und dokumentieren.