Cross-tenant invoice access via predictable object IDs
Impact
Any authenticated user can read and modify invoices that belong to other organizations by changing the numeric invoice_id — exposing customer names, addresses and payment details across tenants.
Proof of concept
GET /api/v2/invoices/48213 HTTP/2
Host: app.example.com
Authorization: Bearer <tenant-A token>
HTTP/2 200 OK
{"id": 48213, "org": "tenant-B", "total": 12400, ...}
Remediation
Enforce object-level authorization on every request: resolve the invoice through the caller's organization and return 404 for anything outside it. Add per-role regression tests.