Portal-Passwort: Reveal/Send prueft Konsistenz gegen Login-Hash
Pentester-Hinweis: bcrypt-Hash (Login) und verschluesseltes Reveal-Feld
koennen out-of-sync sein -> Support liest ein Passwort vor, das beim
Login scheitert.
Analyse: alle aktuellen Schreibpfade sind konsistent (beide Felder
zusammen, oder encrypted=null, oder Rehash desselben Passworts) - der
Code erzeugt keinen Desync. Ursache = Altlast/manueller DB-Eingriff.
Fix (defensiv, unabhaengig von der Ursache):
- getCustomerPortalPassword liefert {status: ok|none|desync} und prueft
den entschluesselten Klartext per bcrypt.compare gegen den Login-Hash.
- Bei desync (oder Entschluesselungsfehler) geben WEDER Reveal NOCH
Send-Credentials das Passwort aus -> 409 'Dateninkonsistenz, bitte
neu setzen'. Reveal-Read wird mit Status auditiert.
- Neues Diagnose-Script scripts/check-portal-password-sync.ts scannt
alle Portal-Kunden auf Desync (nur Diagnose, aendert nichts) - fuer
Prod, da der Pentester keinen FS-Zugriff hat.
Verifiziert: desync -> nicht ausgegeben; konsistent -> ok; kein PW ->
none. Scan laeuft (0 Desync auf Dev).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -97,6 +97,22 @@ isolierte Instanz (keine Multi-Tenancy im Code), Provisioning + Abrechnung
|
||||
|
||||
## ✅ Erledigt
|
||||
|
||||
- [x] **🔐 Portal-Passwort: Reveal/Send prüft Konsistenz (kein „falsches" PW)** (2026-08-11)
|
||||
- Pentester-Hinweis: Bei einem Kunden waren bcrypt-Hash (Login) und
|
||||
verschlüsseltes Reveal-Feld out-of-sync → Support hätte ein Passwort
|
||||
vorgelesen, das beim Login scheitert.
|
||||
- **Analyse:** Alle aktuellen Schreibpfade sind konsistent (beide Felder
|
||||
zusammen ODER encrypted=null ODER Rehash desselben Passworts) – der aktuelle
|
||||
Code erzeugt keinen Desync. Ursache war Altlast/manueller DB-Eingriff.
|
||||
- **Fix (Belt-and-Suspenders):** `getCustomerPortalPassword` liefert jetzt
|
||||
`{status: ok|none|desync}` und prüft den entschlüsselten Klartext per
|
||||
`bcrypt.compare` gegen den Login-Hash. Bei `desync` (oder Entschlüsselungs-
|
||||
fehler) geben **weder Reveal noch Send-Credentials** das Passwort aus,
|
||||
sondern 409 „Dateninkonsistenz – bitte neu setzen". Reveal-Read wird mit
|
||||
Status auditiert.
|
||||
- **Diagnose-Script** `scripts/check-portal-password-sync.ts`: scannt alle
|
||||
Portal-Kunden auf Hash-vs-Encrypted-Desync (nur Diagnose) – für Prod, da
|
||||
der Pentester kein FS-Zugriff hat. Verifiziert (desync/ok/none-Fälle).
|
||||
- [x] **🎁 Gutschrift: Sachwert ohne Betrag = keine Rechnung** (2026-08-09)
|
||||
- Eine Sachwert-Gutschrift darf jetzt **betragslos** sein (Betrag leer/0):
|
||||
dann findet **keine Rechnungsstellung** statt – der Kunde hat den
|
||||
|
||||
Reference in New Issue
Block a user