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.
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 initRun the app locally:
npm install
npm run dev # http://localhost:3000
npm test # scan-engine unit tests (vitest)
npm run buildCaveats
- 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-guardCLI.
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
Related in AppSec
Flowise MCP Security Bypass Enables RCE
Inside an Oracle Database SQL Injection Attack | Huntress
OASIS
