BreachProbeONE URL, READ-ONLY
MENU
Scan free1 CRITICAL OPEN
33 issue types32 written fixes30 tables per scan2 throwaway accountsnothing written$19 report · $39 with 30 nightly re-scans

BREACHPROBE / SOURCES

Sources

Paste a URL and find out whether the app you shipped leaks its database.

SECTIONS

15 CLAIMS· 14 SOURCES· 0 OF 15 RE-CHECKED AUTOMATICALLY

Every figure BreachProbe states about the world, rather than about itself, is listed here. Each one names the page it was read from and the day it was read. Nothing on this site retypes a number: a page renders a figure by asking this register for it, and asking for a claim that is not marked verified throws rather than printing something.

cve-2025-48757READ9.3 CRITICAL (CVSS 3.1 AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:L/A:N) — a SECONDARY metric supplied by the CNA cve@mitre.org, not an NVD primary score. Published 2025-05-30T03:15:20Z (displayed as 29 May 2025 in NVD’s Eastern-time web UI). Affects Lovable through 2025-04-15. vulnStatus "Deferred" and lastModified 2026-06-17T09:30:17Z — NVD does not plan to enrich it further. Still DISPUTED by the supplier.

CVE-2025-48757 — insufficient RLS policy in Lovable lets unauthenticated attackers read/write arbitrary tables of generated sites

Both pages quote the NVD description verbatim, carry the 9.3 score and the publication date, and state that Lovable disputes the entry. The dispute is part of the record and is not omitted. The prior register entry claimed '170+ apps / 303 endpoints' — NVD carries no such count, so it is gone from the pages.

NVD — CVE-2025-48757 Detail. Read 18 September 2026. Not yet re-checked automatically — this one is confirmed by reading it.
supabase-publishable-key-safe-with-rlsREADPublishable keys are "Safe to expose online: web page, mobile or desktop app, GitHub actions, CLIs, source code." Supabase explains the boundary as "Every key resolves to a built-in Postgres role, and that role is what your Row Level Security policies match on." Its client-code instruction says: "Row Level Security decides what this client can reach, so enable it on every table before you deploy." Secret keys "provide full access to your project's data, bypassing Row Level Security."

A Supabase publishable/anon key is safe to expose in a browser only because RLS, not the key, is the security boundary

Refetched 2026-09-10. The policy is unchanged, but both buyer pages now use the current role-mapping explanation and the direct instruction to enable RLS on every table before deployment. The publishable-key exposure statement and secret-key RLS-bypass statement remain present on the primary source.

Supabase Docs — API keys. Read 18 September 2026. Not yet re-checked automatically — this one is confirmed by reading it.
supabase-legacy-key-deprecationREADend of 2026, with no exact date named. Wording as read 6 September 2026: "Supabase is deprecating the anon and service_role keys by the end of 2026. Use the publishable (sb_publishable_xxx) and secret (sb_secret_xxx) keys instead."

Supabase legacy anon / service_role JWT keys are deprecated at the end of 2026 in favour of sb_publishable_ / sb_secret_

A live deadline inside the register's own horizon — recheck every rotation. When Supabase names an exact date, replace 'end of 2026' with it on the page and here. Refetched 2026-08-08: verbatim unchanged, 'They will be deprecated by the end of 2026, and you should now use the publishable (sb_publishable_xxx) and secret (sb_secret_xxx) keys instead.' STILL NAMES NO EXACT DATE, which the checkers guide says explicitly rather than leaving a reader to assume 31 December. The scan engine must recognise BOTH key formats until this passes; a detector that only knows the JWT shape will walk past an sb_secret_ key sitting in a client bundle. REFETCHED 2026-09-06 and the SENTENCE MOVED while the DEADLINE did not. Supabase now writes "Supabase is deprecating the anon and service_role keys by the end of 2026. Use the publishable (sb_publishable_xxx) and secret (sb_secret_xxx) keys instead." The prior wording, quoted verbatim on two guides and in a source comment since 2026-08-02, was "They will be deprecated by the end of 2026, and you should now use the publishable (sb_publishable_xxx) and secret (sb_secret_xxx) keys instead." Anyone following our citation would have found a sentence that was not the one in our quotation marks. All three sites corrected. EIGHTH STANDING RULE, and it is the seventh rule turned inward: A QUOTATION DECAYS SEPARATELY FROM THE FACT IT CARRIES. Re-reading a source to confirm the DEADLINE is not the same as re-reading it to confirm the SENTENCE, and a page in quotation marks is asserting the sentence. Check the string, not only the value. Still no exact date, which both guides continue to say explicitly.

Supabase Docs — API keys. Read 18 September 2026. Not yet re-checked automatically — this one is confirmed by reading it.
supabase-security-advisor-rls-lintsREADDescribed as a check of "your database for issues such as missing indexes and improperly set-up RLS policies" (the page heading is separately "Check your database for performance and security issues"); runs automatically and can be manually re-run. The SIX RLS-related lints named on 2026-08-09 were all still listed on 2026-08-31: 0007_policy_exists_rls_disabled, 0008_rls_enabled_no_policy, 0012_auth_allow_anonymous_sign_ins, 0013_rls_disabled_in_public, 0015_rls_references_user_metadata, 0024_permissive_rls_policy. The docs now render these ids space-separated ("0024 permissive rls policy") and the Available-checks list has grown to 0029. The page describes no test that simulates a specific authenticated user or compares two users.

What Supabase's own Security Advisor checks, and every RLS lint it names

DRIFT CORRECTED 2026-08-09, and it is the LaunchGuard failure repeated against a FIRST-party tool. The 2026-08-06 version of this claim recorded three lints (0007/0008/0013) and the page turned that count into an argument: that the advisor "cannot see ... that a permissive clause left over from a debugging session is now shipping". 0024_permissive_rls_policy is exactly that lint and it was already there — its IDENTIFIER alone would have contradicted the sentence, and nobody opened it. Two of the six read policy CONTENT (0015, 0024), so "it reads structure, not behaviour" was wrong and wrong in this product's favour. FIFTH STANDING RULE: A CAPABILITY LIST IS A SNAPSHOT, NOT A DEFINITION. An enumeration read once ("the three lints") silently hardens into a negative claim ("only three"), and vendors add to lists — so record the count WITH the date it was counted, and never phrase it so that the competitor growing makes our page wrong in our favour. Corollary of the title-vs-body rule: a lint identifier is a title; open the lint page. What SURVIVES, stated narrowly on the page: a policy scoped to the wrong column (using auth.uid() = created_by where you meant user_id) is well-formed, restrictive, references nothing user-editable, and passes all six lints. That is the gap, and it is much narrower than this page claimed for three days.

Supabase Docs — Database Advisors (+ per-lint pages 0024, 0015). Read 18 September 2026. Not yet re-checked automatically — this one is confirmed by reading it.
pgtap-rls-assertionsREAD"A unit testing extension for Postgres." policies_are() "tests that all of the policies on the named table are only the policies that should be on that table"; policy_roles_are() and policy_cmd_is() cover a policy's roles and command. The documented RLS assertions verify policies by name, role and command; the page carries NO example that switches role or sets auth.uid() to test access as a specific user.

What pgTAP's RLS assertions actually test

The absence of a role-switching example is the load-bearing part of this claim and it is an ABSENCE, so it decays differently from a quotation: if Supabase adds a two-user RLS example to this page, the comparison page's pgTAP row becomes wrong. Rechecked 2026-08-08 for an auth.uid() / request.jwt.claims / set-role example specifically, not just for the quoted sentences — still none.

Supabase Docs — pgTAP: Unit Testing. Read 31 August 2026. Not yet re-checked automatically — this one is confirmed by reading it.
launchguard-scanner-scopeREADRLS method, verbatim: "We hit every table we can find with the anon key and count the rows that come back." Also walks storage buckets, scans shipped JS bundles for Supabase keys, tests public RPC functions spotted in app requests, and checks auth configuration. The SCANNER page describes an outside-only posture: "We work entirely from the outside, with nothing but what's already public. Same tools an attacker has. No key, no account, no access to your project." The PRICING page lists, in the FREE plan, "Logged-in tests included: we sign in as a real user, not just a stranger", and "The free scan needs no login at all. For a logged-in test, Pro holds your test logins safely." NEITHER page states that it signs in as two separate users and compares what each can read.

What LaunchGuard tests, the access it works from, and whether it authenticates

DRIFT CORRECTED 2026-08-08, and it is the lesson of this rotation. The 2026-08-06 version of this claim read 'Cross-user check is the usual IDOR tricks' and 'Runs from outside with no credentials', sourced entirely from /supabase-scanner — so the comparison page asserted LaunchGuard becomes nobody. Its /pricing page, never read, puts logged-in testing in the FREE plan. The two LaunchGuard surfaces genuinely pull against each other and the page now quotes both rather than keeping the flattering one. NEW STANDING RULE, alongside the price rule, the capability rule and the title-vs-body rule: A CLAIM THAT A NAMED COMPETITOR CANNOT DO SOMETHING MUST BE CHECKED AGAINST THAT VENDOR'S PRICING / PLAN PAGE AS WELL AS THE PAGE MARKETING THE SINGLE TOOL. A tool page sells the tool; the plan page is where the vendor enumerates capability, and it is where a negative claim goes to die. What survives as this product's differentiator is narrower and is stated narrowly on the page: signing in as ONE user is not comparing TWO. If LaunchGuard ever states a two-user cross-read, the guide's central claim is gone and the table must be rewritten, not patched.

LaunchGuard — Free Supabase Security Scanner (+ /pricing). Read 18 September 2026. Not yet re-checked automatically — this one is confirmed by reading it.
launchguard-pricingREADFree plan: "$0 forever". Pro plan: "$29 / month" (rendered with spaces on the page; $29 per month). Pro adds, in LaunchGuard's words, "Pro adds the part a free scan can't: it re-checks your app on every deploy and remembers every result, so you never re-answer the same question twice." Free plan is capped at "Save up to 2 guards (a test we save and can run again)"; Pro holds test logins so you "never paste passwords".

LaunchGuard's published plan prices and what Pro adds over the free scan

Added 2026-08-08. The comparison table previously showed LaunchGuard's cost as a flat 'Free' beside this product's 'Free scan / $49', which read as a favourable comparison built on an unchecked cell. Both prices here are quoted from LaunchGuard's own pricing page per the standing rule the rescue-page episode established. This is a competitor's list price and is among the faster movers in the register — recheck whenever the checkers guide is touched.

LaunchGuard — Pricing. Read 18 September 2026. Not yet re-checked automatically — this one is confirmed by reading it.
securifyai-extension-scopeREAD"Detect Supabase instances on web pages and scan for Row Level Security (RLS) vulnerabilities." Tests whether tables are readable without authentication (anon role) and rates exposed RPC functions for risk. Free. Publisher SecurifyAI. Last updated 3 May 2026 (unchanged); 21 users listed (was 12 on 2026-08-08).

What SecurifyAI's Supabase RLS Security Scanner Chrome extension tests, and its maturity signals

The user count and update date are the fastest-moving figures in this register. The count moved from 14 on 2026-08-06 to 12 on 2026-08-08, then to 21 on 2026-09-08; it cannot be treated as a ratchet. The update date (3 May 2026) has not moved. They are on the page because 'early software' is a fair and checkable thing to say with a dated number and an unfair thing to say without one; the page dates the count in-sentence rather than stating it as a standing fact. If either figure cannot be re-read, cut the sentence rather than soften it. Stated neutrally: the page does not use the count to dismiss the tool. The Chrome Web Store listing is NOT the whole vendor — see securifyai-open-source-scanner-scope.

Chrome Web Store — Supabase RLS Security Scanner (SecurifyAI). Read 8 September 2026. Not yet re-checked automatically — this one is confirmed by reading it.
pragmatic-coders-rescue-pricingREADNo rate card. "First consultation" FREE; "Code assessment" "From $0*" with "*Depending on codebase size". Service name: "Vibe Coding Rescue Services".

What Pragmatic Coders publicly states about the cost of its vibe-code rescue service

Refetched 2026-08-07: unchanged — still no rate card, still 'FREE' consultation and 'From $0*' code assessment with the same asterisk. This claim is an ABSENCE ('publishes no rate card'), so it flips the moment the agency publishes one; recheck it on the same footing as a live deadline. Replaces the invented 'Project-based, typically mid-four to five figures' that sat in this provider's pricing cell until 2026-08-03. Attributing a price band to a named, identifiable company on no source is the most expensive kind of claim this site could carry. The row now links to the service page itself rather than the agency homepage.

Pragmatic Coders — Vibe Coding Rescue Services. Read 8 September 2026. Not yet re-checked automatically — this one is confirmed by reading it.
redwerk-cleanup-pricingREADNo rate card. FAQ: "The cost depends on the project's size, tech stack, and required SLAs." Service name: "Vibe Code Cleanup for AI-Generated Apps".

What Redwerk publicly states about the cost of its vibe-code cleanup service

Refetched 2026-08-07: unchanged — the FAQ sentence is verbatim identical and there is still no rate card. Same absence-flips-on-publication caveat as the Pragmatic Coders row. The register previously pointed at redwerk.com (the homepage); the actual service page is /services/vibe-code-cleanup/ and the row now deep-links to it. Exact service name corrected from 'Vibe Code Cleanup' to the page's own 'Vibe Code Cleanup for AI-Generated Apps'.

Redwerk — Vibe Code Cleanup for AI-Generated Apps. Read 8 September 2026. Not yet re-checked automatically — this one is confirmed by reading it.
securifyai-open-source-scanner-scopeREAD"This Supabase RLS scanner is open source and free to use." Its "What the Tool Checks" list: "Too Permissive RLS Policies", "Public or Exposed Storage Buckets", "Weak Authentication Settings", "Overly Permissive service_role", "Supabase API Exposure Risks", "Insecure Access Paths". The page is SILENT on whether it authenticates, on whether it is anon-role only, and it does not state that it signs in as two users and compares what each can read.

What SecurifyAI's own site says its open-source Supabase RLS scanner checks (a separate tool from the Chrome extension)

Found by applying the 2026-08-08 rule (check the vendor, not just the tool page) to the one row where it had never been applied. This is a DIFFERENT tool from the Chrome extension and the page must not conflate them — the extension row still quotes the store listing, and this scanner gets its own paragraph. Its checklist is wider than the extension's and includes storage buckets, which the page had credited to LaunchGuard alone. IMPORTANT on the negative claim: the site does not DENY authenticating, it is silent. Silence is not a denial, and the page says so rather than reading absence as a limitation. If SecurifyAI ever states a two-user cross-read, this product's central differentiator narrows again and the table must be rewritten, not patched.

SecurifyAI — Supabase RLS Scanner (open-source audit tool). Read 18 September 2026. Not yet re-checked automatically — this one is confirmed by reading it.
suparbase-pricingREADFree plan: "$0 forever" — "Up to 3 Supabase connections", "Solo workspace (1 user)", "AES-256-GCM credential vault", "30-day audit log retention", "No credit card. No time limit." Hosted plan: "$12 per user / month" — "Unlimited connections", "Team workspace (editor / viewer roles)", "Background workers", "90-day audit log retention", "Agent Sentry continuous scans", "Email support, 1 business day". A third "Team" tier is priced "Custom" and adds "SAML / OIDC SSO" and "Single-tenant deployment (dedicated host)".

Suparbase's published plan prices and what the paid tier adds over the free one

Added 2026-08-26 when Suparbase became the fourth competitor in src/data/competitors.json. ENFORCEMENT LIVES IN competitors.json, NOT HERE: every figure below is also a cell there with a literal `probe` string, and ops/qa/compare-gate.mjs --verify re-fetches the page and fails the build when the probe is gone. This register entry exists so the claim is discoverable from the product's own fact list; it must never become a second place where the number is edited. Change competitors.json, re-run the gate, then mirror here. Continuous scanning is a PAID line item — 'Agent Sentry continuous scans' appears only on Hosted — and the comparison pages must not imply the free tier watches anything on a schedule.

Suparbase — Pricing. Read 18 September 2026. Not yet re-checked automatically — this one is confirmed by reading it.
suparbase-scanner-scopeREADThe free Security Scanner is described as the ANONYMOUS view: "See what a stranger can read from your Supabase project", and "The Security Scanner tells you which of your tables an anonymous visitor can read right now." It needs no account — "There is no sign-up, no email wall, and no trial timer" — and "the security scanner is stateless, so nothing you enter is stored." Roles are handled elsewhere, inside the paid admin: the "RLS debugger" lets you "Browse pg_policies, then simulate SELECT/INSERT/UPDATE/DELETE as any role with custom JWT claims. All rolled back." Agent Sentry, on the Hosted tier, is a "Continuous anon-key probe + per-AI-agent session attribution + one-click undo." The site does NOT state anywhere that it signs up two accounts and compares what each can read.

What Suparbase's own site says its Security Scanner and RLS debugger test — specifically whether either signs in as a real user

Added 2026-08-26 when Suparbase became the fourth competitor in src/data/competitors.json. ENFORCEMENT LIVES IN competitors.json, NOT HERE: every figure below is also a cell there with a literal `probe` string, and ops/qa/compare-gate.mjs --verify re-fetches the page and fails the build when the probe is gone. This register entry exists so the claim is discoverable from the product's own fact list; it must never become a second place where the number is edited. Change competitors.json, re-run the gate, then mirror here. IMPORTANT on the negative claim, same rule as securifyai-open-source-scanner-scope: the site does not DENY a two-account test, it is silent on one, and every page here says 'does not publish' rather than 'cannot'. The distinction the comparison rests on is real and narrow — their probe is anon-key, their role coverage is a rolled-back SIMULATION against your own connection driven query by query, and neither is a request made by a signed-up account. If Suparbase ever ships an authenticated cross-user probe, this product's central differentiator narrows and /vs/suparbase must be rewritten rather than patched.

Suparbase — managed admin for any Supabase. Read 26 August 2026. Not yet re-checked automatically — this one is confirmed by reading it.
defencecore-scanner-scopeREADFree scanner, verbatim: "Run a read-only scan for unsafe RLS policies, exposed database tables, and public Supabase Storage buckets." Its three named checks are "Find tables without Row Level Security, API grants on unprotected tables, missing applicable policies, and policies that allow every row"; "Identify public Storage buckets whose objects can be served without an authenticated download request"; and a "Read-only Supabase Postgres scan". Access: "Connect through Supabase OAuth, choose a project, and Defencecore runs fixed, read-only catalogue checks", and "Defencecore uses read-only Supabase OAuth and never asks for a service-role key, database password, personal access token, or SQL from your browser." ISOLATION, and this is the load-bearing part: "The scanner inspects Postgres catalogue and Storage metadata using a server-owned read-only query. It does not select application rows or write migrations, policies, or settings." No page states that it signs in as two users and compares what each can read, and its stated design excludes it.

What Defencecore's free Supabase scanner tests, the access it needs, and whether it can test tenant isolation

The isolation claim here is stronger than the one made about SecurifyAI or Suparbase, and deliberately so: for those two the vendor is SILENT on a two-account cross-read and silence is not a denial, whereas Defencecore states positively that it does not select application rows, which excludes the test as a matter of design rather than of omission. Do not soften that distinction and do not extend it: it applies to the SCANNER. The monitor reads logs, which is a different surface, and it is credited separately. Fifth standing rule applies: this checklist is a snapshot counted 6 September 2026, not a definition.

Defencecore, "Free Supabase Scanner". Read 6 September 2026. Not yet re-checked automatically — this one is confirmed by reading it.
defencecore-monitor-scope-and-priceREAD"Defencecore watches Supabase platform logs across authentication, API traffic, Postgres, Storage, Realtime, and Edge Functions, and runs detection rules over all of them together." Read-only: "Can Defencecore change my production database? No. It is read-only." Price, verbatim: "Defencecore is $29 per month with a 7-day trial, covering one monitored Supabase project." The plan lists "One production Supabase project", "Continuous security monitoring", "Seven-day incident history", "Every incident with full evidence", "Row Level Security and key-exposure rules". The published detection library names THREE detections as of this date: repeated Supabase authentication failures, brute-force attempts against a Supabase database, and "Supabase Row Level Security policy violations". Defencecore describes itself as "an AI-native security operator for production backends" and says of the EDR analogy: "No, EDR is the closest analogy, not the category."

What Defencecore's paid monitor watches, what it detects, and what it costs

Read 2026-09-06 because the search loop reported defencecore.com cited for this product's buyer queries on 4 of the last 7 days across 3 engines, and nothing on this host named it. It is a real competing vendor, not a regulator or a primary source, so the competitor-gap was genuine. NOTE THE PATHS: /pricing and /free-scanner both 404. The nav labels say Pricing and Free scanner but the real routes are the landing's own pricing section and /scan. Pricing was read off the landing, not off a pricing page, because there is no pricing page. The page's argument turns on a distinction that must not be flattened: a LOGGED RLS VIOLATION is a request Postgres REFUSED, which is the healthy case, while the failure this product tests for produces a SUCCESSFUL read by the wrong customer and therefore no log line at all. A monitor reading refusals cannot see a permission wrongly granted. Fourth standing rule was applied and is why the price is quoted from the vendor's own FAQ sentence rather than from the plan card alone.

Defencecore, landing page and detection library. Read 6 September 2026. Not yet re-checked automatically — this one is confirmed by reading it.

BreachProbe is built and run by Compound Labs. This register is a file in this product's repository and the re-check is a build gate: there is no flag to skip it and no list of known exceptions, because either one is a supported way to record that a claim stopped being true and publish it anyway. Where a source could not be read at all, the claim is kept with no value and the page it would have appeared on says so instead of guessing.