Reporting endpoint returned data across customer accounts
HighRemediated 17 Feb, retested 18 Feb
- What it means
- The practice reporting endpoint filtered results by date and practice name, but not by the account making the request. A user of one veterinary practice could retrieve appointment data belonging to another practice by supplying that practice's name.
- What could have happened
- A customer, or anyone with a customer's credentials, could have read appointment records including animal names, owner names and contact details for practices other than their own. In a product sold to competing practices in the same town, this is the finding most likely to end a customer relationship.
- What I did about it
- The endpoint now derives the account from the authenticated session and ignores any account identifier supplied by the caller. An equivalent check was added at the database level so the rule holds independently of the application code. A test covering cross-account access was added to the build.
- Whether anyone used it
- Application logs retained for 90 days were reviewed. All requests to this endpoint in that period supplied the caller's own practice name. Records before that period are not retained and cannot be checked.
What I sawGET /api/reports?practice=<other account> returned 214 appointment records belonging to a different account