Mass-Assignment-Schutz: Bankkarte/Adresse/Ausweis (Pentest R155)
Die create/update-Services reichten rohen req.body an Prisma durch, wodurch
customerId (Owner) und id (PK) per Update mutierbar waren - staff-only, kein
Cross-Tenant-Bruch, aber echte Integritaetsschwaeche; mit dem neuen
cardNumber-Feld liegt zudem Finanz-PII auf dieser Flaeche.
Fix: explizite Feld-Whitelist im Service (create+update) fuer BankCard,
Address und IdentityDocument - nur benannte Spalten gehen an Prisma, kein
...data/req.body-Spread mehr. Controller-Helper pickBankCardFields haelt
zusaetzlich die Audit-Logs sauber (keine Phantom-Eintraege injizierter Keys).
Verifiziert: updateBankCard mit {customerId:99999, id:88888, bogusField, ...}
-> id+customerId unveraendert, nur cardNumber gesetzt, Fremdfelder ignoriert.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -97,6 +97,17 @@ isolierte Instanz (keine Multi-Tenancy im Code), Provisioning + Abrechnung
|
||||
|
||||
## ✅ Erledigt
|
||||
|
||||
- [x] **🔒 Mass-Assignment-Schutz: Bankkarte/Adresse/Ausweis (Pentest R155)** (2026-08-13)
|
||||
- Controller reichten rohen `req.body` an Prisma durch → `customerId` (Owner)
|
||||
und `id` (PK) waren per Update mutierbar (staff-only, kein Cross-Tenant, aber
|
||||
Integritätsschwäche – und mit `cardNumber` liegt Finanz-PII drauf).
|
||||
- **Fix:** explizite Feld-Whitelist im Service (create+update) für **BankCard,
|
||||
Address, IdentityDocument** – nur benannte Felder gehen an Prisma, kein
|
||||
`...data`/`req.body`-Spread mehr. Zusätzlich Controller-`pickBankCardFields`
|
||||
für saubere Audit-Logs (keine Phantom-Einträge injizierter Keys).
|
||||
- Verifiziert: Update mit `{customerId:99999, id:88888, bogusField, cardNumber}`
|
||||
→ id+customerId **unverändert**, nur cardNumber gesetzt, Fremdfelder ignoriert.
|
||||
|
||||
- [x] **🪪 Bankkarte-/Ausweis-Details in Vertrag (Ansicht + Bearbeiten) + Kartennummer** (2026-08-13)
|
||||
- **Schema:** neues Feld `BankCard.cardNumber` (String?, optional). Migration
|
||||
`20260813100000_bank_card_number` (`ADD COLUMN IF NOT EXISTS`), auf Dev
|
||||
|
||||
Reference in New Issue
Block a user