Abbi Labs

Breach breakdowns

Breakdown: Crissy Field found thousands of Lovable apps with open Supabase tables

By Pritesh Ghodge, security engineer · Published 6 November 2026

Is your Supabase data readable by anyone?

The Abbi Labs quick check tests your live app as an anonymous visitor: Supabase tables readable with your public key, secret keys in your JavaScript, exposed .env and .git files. No sign-up.

No sign-up. Read-only GET requests to what your site already serves publicly. Scan only sites you own or are allowed to test.

Weekly AI-app security checklist

One short email a week: a practical check for apps built with Supabase, Next.js and AI tools (RLS, leaked keys, headers and more). Unsubscribe anytime.

In early November 2026, German security firm Crissy Field GmbH published research (with Handelsblatt) on apps built with Lovable. Using Common Crawl, they examined 159,041 Lovable projects and found many cases where personal and confidential information was reachable without logging in. This is a plain-English breakdown of what they reported, what the numbers do and don't mean, and how to check your own app.

Timeline

What the researchers found

From Common Crawl they identified 159,041 Lovable projects (Dec 2025–Sep 2026). Of those, 34,545 used Supabase.

24,664 of the sites sent Supabase records as soon as the page loaded, with no login. Crissy Field is clear that this alone is not automatically a leak: the data may be intentional public content.

With extra read-only requests using the same public API key, they found email-bearing records in 10,560 tables across 7,403 of those 24,664 sites (30%).

Caveats they stress (read these before quoting the 30%):

Serious examples they describe (organisation types only, as in the reporting):

They focused on Supabase as the most common database integration. Lovable's own late-2025 database features were not examined.

Root cause

Same class of miss as CVE-2025-48757 (the smaller 2025 Lovable Launched scan), on a much larger sample.

The Supabase anon / publishable key is meant to be public. Access depends on Row Level Security (RLS). When RLS is missing, or policies are overly broad (for example using (true) for anonymous reads), anyone who can see the key in the browser can read those tables.

That matches what Crissy Field describes: records reachable with the same public API key the page already uses, without logging in.

How to check your own app

Only test projects you own.

  1. Open your live site, then DevTools → Network. Filter for supabase.co (or your database host).
  2. Copy the project URL and the apikey header value (the anon or sb_publishable_ key).
  3. For each table you see, run:
curl "https://YOUR-PROJECT.supabase.co/rest/v1/TABLE?select=*&limit=1" \
  -H "apikey: YOUR_ANON_KEY" \
  -H "Authorization: Bearer YOUR_ANON_KEY"
  1. In the Supabase SQL editor, list every policy:
select tablename, policyname, roles, cmd, qual, with_check
from pg_policies
where schemaname = 'public';

Anything with qual = 'true' for anon or public deserves a second look. Also open Database → Security Advisor and clear the warnings before you ship.

The free Supabase RLS policy checker reads pg_policies for you in your browser.

Rather not curl every table by hand?

Paste your URL and Abbi Labs runs the anonymous checks for you (one row max per table, nothing stored).

Run a free scan

Fix steps

  1. Turn on RLS for every table in public:
alter table public.profiles enable row level security;
  1. Replace "allow everyone" policies with owner-only ones:
drop policy if exists "Enable read access for all users" on public.profiles;

create policy "own rows"
  on public.profiles for select
  to authenticated
  using ((select auth.uid()) = user_id);

Add matching insert, update and delete policies with with check clauses.

  1. Keep genuinely public data public on purpose (a published blog list is fine). Do not put emails, phones, ticket codes, IDs or internal summaries in tables the anon role can select.
  2. Re-test signed out after every big AI-generated change. Agents that hit a permission error often "fix" it by loosening a policy.
  3. Run Security Advisor and the curl test above before you put real customer data in.

The takeaway

Crissy Field's sample is larger than the 2025 Lovable Launched scan behind CVE-2025-48757, and the pattern is the same: the public anon key isn't the bug — missing or overly broad RLS is. Treat their 30% as a finding inside a specific subsample with clear caveats, not a platform-wide leak rate. Then spend ten minutes testing your app from the outside, as an anonymous visitor.

Abbi Labs runs these anonymous checks for you (one row max per table, nothing stored), and the free Supabase RLS policy checker reads your policies. Or use the curl test above.

Scan your app free

Sources

Related

Weekly AI-app security checklist

One short email a week: a practical check for apps built with Supabase, Next.js and AI tools (RLS, leaked keys, headers and more). Unsubscribe anytime.