Pentest R110: Mass-Assignment-Whitelist auf 7 Katalog-Endpunkten

MEDIUM: PUT /api/stressfrei-emails/:id und 6 weitere Update-
Endpunkte (platform, tariff, contractCategory, cancellationPeriod,
contractDuration, email-providers) reichten req.body ungefiltert
an Prisma. Gleiche Bug-Klasse wie das gefixte M1-Finding, sieben
Stellen mehr. Nachgewiesen via provisionError-Feld ausserhalb des
TS-Types.

Fix: sieben Whitelists + pickXxxUpdate()-Helper in sanitize.ts,
in den jeweiligen Controllern eingehängt. Reuse der bewährten
pick()-Infrastruktur (Customer/User seit Runde 7).

EmailProvider bewusst OHNE stripHtmlFromStrings, weil Passwörter
und API-Keys legitim Sonderzeichen enthalten dürfen.

Doku: SECURITY-HARDENING.md § Runde 110 + docs/todo.md.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-07-11 16:16:49 +02:00
co-authored by Claude Opus 4.7
parent dc7dcfb5f3
commit da3ae282fc
10 changed files with 185 additions and 7 deletions
+13
View File
@@ -97,6 +97,19 @@ isolierte Instanz (keine Multi-Tenancy im Code), Provisioning + Abrechnung
## ✅ Erledigt
- [x] **🔒 Pentest R110 Mass-Assignment-Whitelist auf 7 Update-Endpunkten**
- MEDIUM-Finding: `PUT /api/stressfrei-emails/:id` und 6 weitere Update-
Endpunkte (`platform`, `tariff`, `contractCategory`,
`cancellationPeriod`, `contractDuration`, `email-providers`) reichten
`req.body` ungefiltert an Prisma gleiche Bug-Klasse wie M1
(Settings Mass Assignment). Nachgewiesen war es via
`provisionError`-Feld ausserhalb des TS-Types.
- Fix: sieben Whitelists + `pickXxxUpdate()`-Helper in `sanitize.ts`,
in den jeweiligen Controllern eingehängt. Nur die vom Service-
Interface deklarierten Felder passieren.
- EmailProvider: bewusst ohne `stripHtmlFromStrings`, weil das
Passwörter/API-Keys mit Sonderzeichen mutiliert hätte.
- [x] **🐞 Kündigungsdatum: Cursor sprang beim Tippen aus dem Feld**
- `<input type=date>` feuerte `onChange` bei jedem Tastendruck; sobald
z.B. `18.08.0002` ein gültiges Datum ergab, feuerte die PUT-Mutation,