Changing an invoice ID in the API returns another customer's billing data
What we found
The billing API took an invoice ID from the request and returned the invoice without checking that it belonged to the caller's account. IDs were sequential, so any signed-in user could step through them and download other customers' invoices, including names, addresses and billing details.
Impact
Any customer could read every other customer's billing history.
How to fix it
Check ownership on the server for every object request, using the account from the session rather than the request. Use non-sequential identifiers as defense in depth, and add an automated test for cross-account access.








