Skip to content

Back to the catalog

vibecheck
github.comrepo

vibecheck

vibecheck is a free, open-source, client-side scanner that checks apps built with AI code generators (Lovable, Bolt, v0, Cursor, Claude Code) for common security holes: exposed Supabase Row Level Security / Firebase rules, secrets embedded in the client bundle (Stripe/AWS/DB keys), missing security headers, exposed .env/.git/source maps, unauthenticated LLM proxy or MCP endpoints, and email/TLS misconfigurations. It also scans public repos for cross-tenant IDOR patterns, committed secrets, an OSV.dev supply-chain check, a Dockerfile lint, and generates a CycloneDX SBOM; a companion CLI (tenant-guard) adds a live Postgres cross-tenant isolation test as a CI gate. The project cites CVE-2025-48757 (170+ Lovable apps found with RLS disabled) as motivation.

TL;DR Open-source, browser-side scanner that flags the RLS/secrets/IDOR misconfigurations common in AI-generated (Lovable/Bolt/v0/Cursor) apps, plus an SBOM/OSV supply-chain check and a CI-based tenant-isolation test.
Document

What it is

vibecheck (MIT, by Federico Sciuca) is an outside-in scanner for AI-generated apps. Beyond the checks the summary lists, the page adds two operationally important things: a third input mode (mobile .apk/.ipa) and a hard scope constraint — it is self-scan only.

How it works

Three entry points:

  • Live app — paste a URL. The database check runs in your browser, using the anon/public key the app already ships, to mirror exactly what any visitor can read. It never sends your database or key to a server ("a mirror, not an exploit"). Also checks security headers, exposed .env/.git/source maps, admin/debug routes, unauthenticated LLM proxies (credit-drain) and anonymous MCP tool lists, SPF/DMARC, TLS/subdomain-takeover, plus GDPR + AI Act Article 50 chatbot-disclosure signals and crawler/LLM readability.
  • Public repo — IDOR patterns, committed secrets, OSV.dev supply-chain check, Dockerfile lint, downloadable CycloneDX SBOM.
  • Mobile app — drop an .apk/.ipa; it unzips and scans the JS bundle for the same leaks, entirely client-side, file never leaves the device.

Every failing check ships with a fix you can paste into Lovable, Cursor, v0 or Claude. The scan engine lives in lib/scan/ as pure dependency-injected functions (fetch injected), so rules are unit-tested (vitest) without a live target.

Preconditions / Affected

Relevant to apps built by AI code generators (Lovable, Bolt, v0, Cursor, Claude Code), especially those on Supabase/Firebase where Row Level Security may be off. The named exemplar is CVE-2025-48757: 170+ Lovable projects had RLS disabled, so anyone with the public anon key (shipped in the frontend) could read their tables — invisible externally unless probed.

What to do

For private repos, run the same checks plus a live Postgres proof that one tenant cannot read another, as CI tests that fail the build:

npx tenant-guard init

Run the app locally:

npm install
npm run dev      # http://localhost:3000
npm test         # scan-engine unit tests (vitest)
npm run build

Caveats

  • Self-scan only. No active injection testing — the author states it won't be pointed at other people's apps. It's an outside-in observation, "never a legal conclusion," not a pentest.
  • No native-binary decompilation.
  • For a private repo, the source-level checks are not in the browser tool — they live in the separate tenant-guard CLI.

CVEs named here

Technologies named here

Techniques named here

  • Row Level Security disabled / public-read database exposure
  • Secrets in client bundle
  • Exposed source/config artifacts
  • Admin & debug route exposure
  • Unauthenticated AI/MCP endpoints
  • Email spoofing
  • Subdomain takeover
  • Cross-tenant IDOR
  • Committed secrets
  • IDOR