Pentest R91: NaN-Bypass auf accountId-Query-Param
R91.1 LOW: parseInt('abc') = NaN → der Ternary gab NaN an den
Service, if (NaN) ist falsy → Postfach-Filter fiel weg. Portal-
User mit ungültigem accountId sah Mails aus allen Postfächern
des Kunden für seinen Vertrag (canAccessContract greift weiter,
kein Cross-Customer-Leak).
Fix: zentraler parsePositiveIntParam(), akzeptiert nur positive
Ganzzahlen aus Query-Strings. Eingesetzt auf allen 5 Endpunkten,
die accountId/contractId aus Query lesen – auch da, wo der
Pentester nicht getestet hat (Customer-Inbox, Trash-Count),
weil derselbe Pattern überall stand.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -97,6 +97,21 @@ isolierte Instanz (keine Multi-Tenancy im Code), Provisioning + Abrechnung
|
||||
|
||||
## ✅ Erledigt
|
||||
|
||||
- [x] **🔒 Pentest R91 – NaN-Bypass auf accountId-Query-Param**
|
||||
- R91.1 (LOW): `accountId=abc` → `parseInt('abc')` = `NaN` → der
|
||||
Ternary im Controller gab `NaN` an den Service, `if (NaN)` ist
|
||||
falsy → der Postfach-Filter fiel weg. Folge: ein Portal-User mit
|
||||
ungültigem `accountId` sah alle Mailbox-Mails für seinen Vertrag
|
||||
statt nur die aus dem gewählten Postfach (kein Cross-Customer-
|
||||
Leak — `canAccessContract` greift weiter).
|
||||
- Fix: zentraler `parsePositiveIntParam()` im `cachedEmail.controller.ts`,
|
||||
der nur positive Ganzzahlen aus dem Query-String akzeptiert und
|
||||
alles andere zu `undefined` macht. Eingesetzt in allen 5
|
||||
Endpunkten, die `accountId`/`contractId` aus Query nehmen
|
||||
(Contract-Emails, Contract-Folder-Counts, Customer-Emails,
|
||||
Trash, Trash-Count) – auch da, wo der Pentester nicht getestet
|
||||
hat, weil derselbe Pattern überall stand.
|
||||
|
||||
- [x] **🐞 E-Mail-Ansicht: Postfach-Filter griff in Trash/Sent nicht**
|
||||
- Bug-Bericht 2026-06-21: im Vertrags-Tab (Gesendet/Gelöscht) und im
|
||||
Kunden-Haupt-Postfach (Gelöscht) wurden E-Mails aus ALLEN Postfächern
|
||||
|
||||
Reference in New Issue
Block a user