Skip to content

fix(account-merge): notify master account when a merge is confirmed via e-mail code#3872

Draft
TaprootFreak wants to merge 1 commit into
developfrom
fix/notify-master-on-merge-confirmation
Draft

fix(account-merge): notify master account when a merge is confirmed via e-mail code#3872
TaprootFreak wants to merge 1 commit into
developfrom
fix/notify-master-on-merge-confirmation

Conversation

@TaprootFreak

Copy link
Copy Markdown
Collaborator

Hintergrund

Aus dem branch-weiten Security-Review (High-Finding Account-Merge): GET /auth/mail/confirm gibt nach einem Merge master.kycHash + ein Account-Token an den Code-Inhaber heraus. Im IDENT_DOCUMENT-Flow (sendToSlave=true) wird der Bestätigungscode an den slave gemailt, nicht an den master — d.h. ausgerechnet der einzige Merge-Pfad, den ein Externer auslösen kann, lief bisher ohne jede Benachrichtigung des betroffenen Master-Kontos ab.

Verifiziert: Der Merge-Trigger identDocumentId stammt ausschliesslich aus verifizierten Ident-Provider-Daten (Sumsub/IdNow/manuell), nicht aus user-eingegebenen Formulardaten (kyc-step.entity.ts) — der Angriff ist also stark gated (echte biometrische Dokument-Kollision nötig). Die Token-Ausgabe selbst ist zugleich der legitime Re-Registrierungs-Pfad; sie hart zu beschneiden würde echte Kunden treffen. Deshalb hier die nebenwirkungsfreie Härtung statt eines Auth-Eingriffs.

Fix

Der Benachrichtigungs-Mechanismus existiert bereits (userDataAddedAddressInfo / userDataChangedMailInfo an master.mail), war aber für den Bestätigungs-Flow abgeschaltet: executeMerge rief mergeUserData(...) ohne notifyUser auf (Default false). Die anderen beiden Aufrufer setzen true:

  • aml.service.ts:162 (automatischer AML-Merge) → true
  • user-data.controller.ts:107 (Admin/Support-Merge) → true
  • account-merge.service.ts (Mail-Bestätigung) → fehlte

Diese PR setzt notifyUser=true auch im Bestätigungs-Pfad. Das Master-Konto erhält damit die bereits vorhandene, übersetzte Added-Address-/Changed-Mail-Benachrichtigung und kann reagieren, falls der Merge nicht legitim war.

Keine Änderung an der Token-/Auth-Logik — der Re-Registrierungs-Flow bleibt unangetastet.

Tests

Neuer executeMerge-Test prüft, dass mergeUserData mit notifyUser=true aufgerufen wird. format:check, type-check, lint sauber; account-merge-Suite 13/13 grün.

Nicht in dieser PR

Die theoretische Token-/kycHash-Bindung (Fallback generateAccountToken an Nicht-Master-Adressen) bleibt offen — das ist ein Auth-/UX-Designentscheid mit Kundenimpact und gehört in Abstimmung mit dem Auth-Flow-Owner separat behandelt.

…ia e-mail code

executeMerge called mergeUserData without notifyUser, so the master
account (the one being merged into) was never told. For IDENT_DOCUMENT
merges the confirmation code is mailed to the slave, not the master —
i.e. the one merge path an outside party can drive is also the only one
that left the affected account unaware. The AML and admin merge callers
already pass notifyUser=true; align the e-mail-confirmation path with
them so the master receives the added-address / changed-mail
notification and can react if the merge was not legitimate.

No change to the token/auth logic — the re-registration flow is
untouched. Added an executeMerge test asserting notifyUser=true.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant