If you are using Supabase (especially if you vibe coded your app), there is a good chance your RLS policies have gaps. I see it constantly: tables with RLS disabled, storage buckets wide open, service_role keys hardcoded in frontend code.
I built Ship Safe, an open-source security scanner with a dedicated Supabase RLS Agent.
npx ship-safe audit .
What the Supabase agent checks:
It also scans for general issues that affect Supabase apps:
The scanner runs locally, so no data leaves your machine. No account needed.
Quick example of what it catches:
// this is in your frontend code
const supabase = createClient(
'https://xxx.supabase.co',
'eyJhbGciOiJIUzI1NiIs...' // ← ship-safe flags this immediately
)
// table without RLS
create table user_data (
id uuid primary key,
email text,
ssn text -- ← no RLS = public read/write
);
DiscussionHealthy802 introduces 'Ship Safe', an open-source security scanner designed to identify common Supabase RLS and security issues. The tool checks for disabled RLS, missing policies, exposed service role keys, and open storage buckets. It also addresses general security concerns like hardcoded secrets and injection vulnerabilities. The scanner runs locally, ensuring no data leaves the user's machine.
Awesome. What a great idea.
Thank you! Let me know if you have any feedback
!remind me 18 hours
Other useful commands:
npx ship-safe scan . # just check for leaked keys
npx ship-safe remediate . # auto-move secrets to .env + update .gitignore
npx ship-safe score . # 0-100 security health score
npx ship-safe init # add security configs to your project
If you already pushed your service_role key:
npx ship-safe rotate . # walks you through revoking and rotating keys
Website: https://shipsafecli.com
Curious what other Supabase-specific checks would be useful. What security mistakes have you seen (or made) with Supabase?