Skip to content

Batch transfers bypass the wallet destination allowlist that single transfers enforce; no server-side sanctions screening #674

Description

@resourcefulmind

Area: Payments / transfers + batches · Type: bug/enhancement (compliance)

Two related gaps on the money-movement path:

  1. Allowlist bypass. wallet-policy.ts:141 enforces a wallet's destination allowlist by default (enforceDestinationAllowlist !== false). Single transfers use the default (enforce); the batch handler passes enforceDestinationAllowlist: false (transfer-batches.ts:564), so a destination the allowlist would block on a single transfer can still be paid via a batch.
  2. No sanctions screening in the transfer path. policy-enforcement.service.ts is allowlist-only; there is no sanctions/AML screening before submit. Screening lives only on the separate caller-driven POST /v1/compliance/address-screenings.

Reproduce: code-confirmed (the default logic + the batch override). Live repro of (1) needs a wallet allowlist policy configured.

Impact: an operator relying on the destination allowlist as a control has it silently bypassed via batch; and an integrator who assumes the platform screens could pay a sanctioned address.
Suggested fix: make batch respect the allowlist by default (or require an explicit, logged opt-out); document that transfers are not sanctions-screened server-side and the caller must screen via /compliance/address-screenings.

Metadata

Metadata

Assignees

Labels

QA improvementsIssues surfaced during the payments QA pass: bugs, gaps, and DX improvements.bugSomething isn't workingenhancementNew feature or request

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions