Endpoints and functions without access checks
API routes and database functions anyone can call, relying on the frontend to keep them safe.
Where it shows up: API routes, Supabase Edge Functions and database (RPC) functions
Last updated
What it is
Every endpoint your frontend calls can also be called directly, without your app's UI. Hiding a button doesn't protect the action behind it.
AI tools often check permissions in the page ("only admins see this button") but not in the endpoint itself, so the endpoint trusts whoever calls it.
How often we see it
We ran Shippable's static checks on about 1,460 public GitHub repos built with five AI tools (October 2026). Each figure is the share of that builder's repos where the check fired at least once. A dash means it wasn't among that builder's most common findings. Full method and breakdown: Which AI builder ships the safest apps?

What an attacker sees
Someone reads your site's code, finds a route like /api/admin/export-users, and calls it directly. If the server doesn't check who is calling, it does what it's asked.
How to fix it
Paste this into your AI tool:
Review every API endpoint, edge function and database function my frontend calls. For each one, confirm the server checks that the caller is signed in and allowed to do that specific action on that specific data, before doing anything. Never rely on checks that only happen in the frontend. For database functions that shouldn't be public, revoke EXECUTE from the anon role.
Or by hand:
- List the endpoints from your Shippable report.
- In each handler, check the signed-in user and their permission for the specific record before acting.
- Revoke public EXECUTE on database functions that don't need to be callable by anyone.
Check your app
Shippable lists the endpoints and database functions your site's code refers to, so you can review each one. It never calls them, because that wouldn't be read-only. Testing them for real is what AI Red Team is for.
Scan your dev server before you push. No account needed:
Or scan your live app in the browser: