#6 of 10Depends

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?

FindingBoltLovableCursorReplitv0
Admin-rights DB function anyone can call35.6%15.3%–––
Edge function with no access check25.1%12.2%–––

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:

Paste the prompt below into your vibecoding 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:

  1. List the endpoints from your Shippable report.
  2. In each handler, check the signed-in user and their permission for the specific record before acting.
  3. 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:

Terminal
npx shippable-dev scan localhost:5173

Or scan your live app in the browser:

Related questions