From 66fb5092fe99b6530d754db52faf043d8af7fab9 Mon Sep 17 00:00:00 2001 From: duffyduck Date: Fri, 17 Jul 2026 14:58:51 +0200 Subject: [PATCH] Audit: Portaldaten-Opt-out als eigenes CRITICAL-Event loggen MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Auf Wunsch des Pentesters (R117-Nachtrag). Das Umschalten des portalCredentialsNotRequired-Flags emittiert jetzt zusätzlich zum generischen Contract-Update-Diff ein dediziertes UPDATE-Event unter resourceType 'ContractPassword' – landet damit in derselben CRITICAL-Sensitivity-Reihe wie Klartext-Password-Reads. Motivation: das Setzen des Flags räumt server-seitig portalUsername, portalPasswordEncrypted und stressfreiEmailId auf NULL. Diese Löschung soll unabhängig vom generischen Diff sofort sichtbar sein. Rücknahme wird ebenfalls geloggt. Details enthält alte + neue Flag-Werte plus Bool-Marker, welche Anmeldedaten vor dem Opt-out belegt waren – keine Klartext- Leckage im Log. Co-Authored-By: Claude Opus 4.7 --- .../src/controllers/contract.controller.ts | 35 +++++++++++++++++++ docs/todo.md | 13 +++++++ 2 files changed, 48 insertions(+) diff --git a/backend/src/controllers/contract.controller.ts b/backend/src/controllers/contract.controller.ts index 1817c8b2..8c3d2ef0 100644 --- a/backend/src/controllers/contract.controller.ts +++ b/backend/src/controllers/contract.controller.ts @@ -235,6 +235,8 @@ export async function updateContract(req: AuthRequest, res: Response): Promise = { meterId: 'Zähler', maloId: 'MaLo-ID', annualConsumption: 'Jahresverbrauch', @@ -280,6 +282,39 @@ export async function updateContract(req: AuthRequest, res: Response): Promise