Endpoints that trust the ID in the URL
The most common serious flaw in AI-built CRUD apps.
What it looks like
GET /api/orders/41 returns order 41. The endpoint checks that you are logged in, but not that order 41 is yours. Change 41 to 42 and you are reading someone else’s order.
Nothing breaks visibly when this check is missing, which is exactly why it is missing so often. The app works perfectly for every honest user.
The fix
After loading the record by ID, verify it belongs to the requesting user before returning it. Return 404 rather than 403 when it does not, so the endpoint does not confirm that the record exists.
Apply it to every endpoint that takes an ID, including update and delete — a read-only leak is bad; a delete-anyone’s-record endpoint is worse.
Then make it unguessable too
Switch sequential integer IDs to UUIDs. This is defence in depth, not the fix — an endpoint without an ownership check is still broken with UUIDs, just harder to walk. Do the ownership check first.
Not sure whether this applies to you?
Give us the address and we will tell you. No code, no access, no install — and every finding we have is shown in full, including on the free trial.
Check a site