VIBE CODE SCANNER

Multi-platform scanner for AI-generated web apps — whatever tool you built with. Detects exposed keys, missing auth, and open databases in under two minutes.

SCAN YOUR VIBE-CODED APP NOW

Lovable, Bolt, v0, Cursor, Claude Code, Replit, Windsurf — enter your deployed URL and we probe for the failure modes specific to AI-generated apps.

What is a vibe code scanner?

A vibe code scanner is an automated security tool that probes a live AI-generated web app for the specific failure modes that AI coding tools tend to ship: exposed API keys in the browser bundle, missing Row Level Security on Supabase and Firebase tables, admin routes without auth checks, and open storage buckets. It runs against your deployed URL, no source code required, and returns findings in under two minutes.

This scanner covers apps built with Lovable, Bolt.new, Cursor, Claude Code, v0, Replit, Base44, Figma Make, and Windsurf — the full family of AI-generated-app tools — and everything they typically deploy onto (Vercel, Netlify, Railway, Render, Fly.io).

Traditional SAST assumes you have a clean checkout and that security lives in source. Vibe-coded products often fail in configuration and runtime: dashboard toggles, build-time env inlining, host defaults. A vibe code scanner starts where the attacker starts — the public URL.

The vibe-coded app security checklist

AI coding tools have a family of recurring gaps. This scanner tests all of them in one pass:

  • Missing Row Level Security on Supabase or Firebase tables
  • Exposed API keys in the frontend bundle (Stripe secret, Firebase service account, OpenAI, Anthropic, AWS)
  • Auth flows that check the user but skip role or permission checks
  • CORS set to * on endpoints that return sensitive data
  • Debug routes and admin panels that shipped to production
  • Public storage buckets with no ACL
  • Inline scripts that force an unsafe Content Security Policy
  • Webhooks with no signature verification
  • eval() or remote-code execution of user input
  • BOLA/IDOR on generated CRUD
  • Preview or staging hosts that share production secrets

Map these to OWASP language on OWASP Top 10 for AI Code.

What the scanner detects

EXPOSED CREDENTIALS

API keys, OAuth secrets, JWT secrets, webhook secrets loaded into the frontend.

MISSING AUTH

Admin or privileged routes reachable without a session or role check.

OPEN DATABASES

Supabase tables, Firestore collections, and Mongo endpoints readable or writable anonymously.

BROKEN CORS

Cross-origin policies that allow any origin to read authenticated responses.

OPEN STORAGE

Public buckets on S3, Supabase Storage, or Firebase Storage with no access rules.

BOLA / IDOR

Change an ID in a request and read another user's data — the classic vibe-coded bug.

Deep agent mode extends the surface pass with multi-step role testing, richer API mapping, and fix prompts tuned for your stack.

How to use

  1. Paste the URL of your deployed app into the scanner at the top of this page.
  2. Wait ~2 minutes — the scanner loads the app, captures every request, and probes common attack surfaces.
  3. Review findings by severity: Critical, High, Medium, Low. Each includes evidence (which URL, header, or bundle triggered the detection).
  4. Copy the fix prompt into Claude Code, Cursor, or Lovable to patch the issue.
  5. Rescan to confirm the fix before you ship.

Optional for deep scans: provide two test logins so cross-user checks can run without guessing. Never paste production admin passwords into tools you do not trust — use dedicated staging users.

Which AI coding tools have the most common issues?

Tool Primary stack Most common finding
Lovable React + Supabase Missing Row Level Security
Bolt Vite + any backend Hardcoded API keys in bundle
v0 Next.js + any backend Server actions with no auth
Cursor Any Generated code lacks input validation
Claude Code Any Missing rate limiting and authorization
Replit Full-stack Public databases and exposed .env
Windsurf Any Hardcoded secrets in frontend
Base44 Managed full-stack Entity permissions left public / auth
Firebase Firestore Open or test-mode Security Rules

Hosts matter too: Vercel previews, Railway public DB proxies, and Netlify redirect mistakes show up as environment misconfiguration on top of AI code gaps.

Why runtime beats source-only for vibe code

AI apps often have correct-looking source and broken configuration:

  • RLS policies only exist in the Supabase dashboard (or not at all).
  • Firebase rules never left the console “test mode” toggle.
  • Env vars are injected at build time and only appear in the shipped bundle.
  • Preview hosts skip middleware because of a matcher bug.
  • Storage buckets are public in the cloud console, not in git.

A repo SAST pass can be green while the live URL dumps every orders row. This scanner works from the outside — the same vantage as a real attacker — so configuration drift shows up.

That does not mean you should skip SAST. Use both: Semgrep/ESLint in CI, vibe scan on deploy. See Between SAST and Pentest.

Surface scan vs deep agent

Surface (free) Deep agent
Time ~2 minutes Longer, multi-step
Keys in bundle Yes Yes
Obvious open endpoints Yes Yes
RLS / cross-user data Limited Full probes
BOLA across roles No Yes
Webhook trust Heuristic Signature / replay tests
Fix prompts Basic Detailed paste-back prompts

Start free. Graduate to deep when you handle real user data or payments.

Interpreting severity

  • Critical: secret keys in the bundle; anonymous full-table reads; service_role exposure; unpaid → paid without verification.
  • High: BOLA on primary objects; open admin routes; public private documents in storage.
  • Medium: missing headers, open redirects, verbose errors, overly broad CORS without obvious data loss yet.
  • Low: informational hardening gaps.

Ship blockers are Critical and High on production with real users. Mediums become highs when chained (open redirect + token in query string).

How to verify a fix

  1. Apply the fix (or paste the finding prompt into Cursor / Lovable / Claude Code).
  2. Deploy to the same environment you scanned (preview or prod).
  3. Rescan the same URL.
  4. Confirm the finding is gone and no new criticals appeared.
  5. For RLS fixes, also run the Supabase RLS Checker as a second opinion.
  6. For key leaks, rotate the key first — rescan alone is not enough if the old key still works.
  7. For BOLA, re-run two-account manual confirmation on the fixed route.

Common mistakes when using a vibe scanner

  • Scanning localhost only and never the production domain (CDN, env, and headers differ).
  • Ignoring Medium findings that are open redirects or missing headers — attackers chain them.
  • Fixing the UI auth check but not the API/RLS layer the scanner actually hit.
  • Leaving preview URLs open after a clean production scan.
  • Not rotating keys the scanner found — bots may already have them.
  • Treating one green scan as forever — the next AI prompt can re-open a table.
  • Scanning only marketing domains while the app lives on app. subdomain.
  • Sharing deep-scan credentials that are also production admin accounts.

What to scan on every release

  • Production canonical URL (custom domain).
  • Staging / preview if it shares production data or keys (ideally it does not).
  • Marketing site only if it embeds the same Supabase/Firebase project as the app.

Integrate the deep scan as a CI step against preview deploys when your host supports stable preview URLs (Vercel, Netlify, Railway).

# Conceptual CI step after preview deploy
- name: VibeEval preview scan
  run: vibeeval scan --url "$PREVIEW_URL" --fail-on high

Fit in a broader program

Layer Role
Prompt rules / secure practices Fewer bad first drafts
PR review of agent diffs Catch logic and deletions
SAST + SCA in CI Code patterns + CVEs
Vibe code scanner Live AI-shaped gaps
Annual pentest Business logic depth

None replaces the others. Velocity without the live layer is how “we use Snyk” still ships open RLS.

Logging, monitoring, and abuse (1)

Log authentication failures, authorization denials, and high-cost endpoints with request ids. Alert on spikes. Rate limit auth and AI proxy routes. For vibe-code-scanner, define what ‘abnormal’ looks like before an attacker teaches you under load.

# smoke verification sketch for vibe-code-scanner
curl -s -o /dev/null -w '%{http_code}\n' "$PREVIEW_URL/healthz"

Dependency and supply chain (2)

Lockfiles, immutable CI installs, pinned GitHub Actions, and verification of packages the model suggests. Hallucinated package names are a real path. On vibe-code-scanner changes that touch package manifests, require a human to open the registry page once.

// deny-by-default sketch used near vibe-code-scanner
export function assertOwner(userId: string, ownerId: string) {
  if (userId !== ownerId) throw new Error('forbidden');
}

Human process and training (3)

New engineers should break a demo app on purpose, fix it, and rescan. That training beats a PDF policy. For vibe-code-scanner, keep one golden path example of a secure change and one of a rejected insecure change in internal docs.

Operational checklist for vibe-code-scanner (4)

Treat vibe-code-scanner as a production surface with an owner, a review cadence, and a verification step after every AI-assisted change. Write the owner name in the repo SECURITY.md. Schedule a monthly re-read of controls that touch authentication, secrets, and data access. When an agent opens a PR against this area, require dual-user tests and a preview scan before merge. Keep a short incident appendix: which keys to rotate, which dashboards to check, who communicates with users.

# smoke verification sketch for vibe-code-scanner
curl -s -o /dev/null -w '%{http_code}\n' "$PREVIEW_URL/healthz"

Common AI-generator mistakes on vibe-code-scanner (5)

Generators optimize for demos: open data paths, client-trusted roles, missing rate limits, and secrets in env files that ship to browsers. On vibe-code-scanner, re-check those classes after every feature prompt. Search diffs for deleted middleware, new admin routes, and dependency adds. Reject ’temporarily disable auth’ comments without a tracking ticket and expiry.

Verification commands and proofs (6)

Proof beats intention. For vibe-code-scanner, keep a script or checklist that demonstrates deny paths: anonymous access fails, user A cannot read user B, webhooks reject bad signatures, and bundles lack server secrets. Store the last run date next to the checklist. If the date is older than your release cadence, you are flying blind.

// deny-by-default sketch used near vibe-code-scanner
export function assertOwner(userId: string, ownerId: string) {
  if (userId !== ownerId) throw new Error('forbidden');
}

CI and release gates (7)

Encode the minimum bar in CI so humans do not renegotiate under launch pressure: secret scan, dependency audit, unit tests including authz negatives, preview deploy, live security scan failing on criticals. For vibe-code-scanner-related paths, add CODEOWNERS so reviews land on people who understand the threat model.

# smoke verification sketch for vibe-code-scanner
curl -s -o /dev/null -w '%{http_code}\n' "$PREVIEW_URL/healthz"

Environment separation (8)

Production credentials must not appear in previews or local agent sandboxes. Separate projects or branches for data stores, separate OAuth redirect allowlists, and separate Stripe test vs live keys. Document the matrix where coding agents can read it so ‘make preview work’ does not copy prod secrets again.

Logging, monitoring, and abuse (9)

Log authentication failures, authorization denials, and high-cost endpoints with request ids. Alert on spikes. Rate limit auth and AI proxy routes. For vibe-code-scanner, define what ‘abnormal’ looks like before an attacker teaches you under load.

Dependency and supply chain (10)

Lockfiles, immutable CI installs, pinned GitHub Actions, and verification of packages the model suggests. Hallucinated package names are a real path. On vibe-code-scanner changes that touch package manifests, require a human to open the registry page once.

# smoke verification sketch for vibe-code-scanner
curl -s -o /dev/null -w '%{http_code}\n' "$PREVIEW_URL/healthz"
// deny-by-default sketch used near vibe-code-scanner
export function assertOwner(userId: string, ownerId: string) {
  if (userId !== ownerId) throw new Error('forbidden');
}

Human process and training (11)

New engineers should break a demo app on purpose, fix it, and rescan. That training beats a PDF policy. For vibe-code-scanner, keep one golden path example of a secure change and one of a rejected insecure change in internal docs.

Operational checklist for vibe-code-scanner (12)

Treat vibe-code-scanner as a production surface with an owner, a review cadence, and a verification step after every AI-assisted change. Write the owner name in the repo SECURITY.md. Schedule a monthly re-read of controls that touch authentication, secrets, and data access. When an agent opens a PR against this area, require dual-user tests and a preview scan before merge. Keep a short incident appendix: which keys to rotate, which dashboards to check, who communicates with users.

Common AI-generator mistakes on vibe-code-scanner (13)

Generators optimize for demos: open data paths, client-trusted roles, missing rate limits, and secrets in env files that ship to browsers. On vibe-code-scanner, re-check those classes after every feature prompt. Search diffs for deleted middleware, new admin routes, and dependency adds. Reject ’temporarily disable auth’ comments without a tracking ticket and expiry.

# smoke verification sketch for vibe-code-scanner
curl -s -o /dev/null -w '%{http_code}\n' "$PREVIEW_URL/healthz"

Verification commands and proofs (14)

Proof beats intention. For vibe-code-scanner, keep a script or checklist that demonstrates deny paths: anonymous access fails, user A cannot read user B, webhooks reject bad signatures, and bundles lack server secrets. Store the last run date next to the checklist. If the date is older than your release cadence, you are flying blind.

// deny-by-default sketch used near vibe-code-scanner
export function assertOwner(userId: string, ownerId: string) {
  if (userId !== ownerId) throw new Error('forbidden');
}

CI and release gates (15)

Encode the minimum bar in CI so humans do not renegotiate under launch pressure: secret scan, dependency audit, unit tests including authz negatives, preview deploy, live security scan failing on criticals. For vibe-code-scanner-related paths, add CODEOWNERS so reviews land on people who understand the threat model.

Environment separation (16)

Production credentials must not appear in previews or local agent sandboxes. Separate projects or branches for data stores, separate OAuth redirect allowlists, and separate Stripe test vs live keys. Document the matrix where coding agents can read it so ‘make preview work’ does not copy prod secrets again.

# smoke verification sketch for vibe-code-scanner
curl -s -o /dev/null -w '%{http_code}\n' "$PREVIEW_URL/healthz"

COMMON QUESTIONS

01
What is a vibe code scanner?
A vibe code scanner is an automated security tool that probes a deployed AI-generated web app for the specific failure modes that AI coding tools tend to ship: exposed API keys in the frontend bundle, missing Row Level Security on Supabase and Firebase tables, admin routes without auth checks, and open storage buckets. It runs against the live URL, no source code required.
Q&A
02
What platforms does this cover?
Lovable, Bolt.new, Cursor-built apps, Claude Code projects, v0, Replit, Base44, Figma Make, and Windsurf. Any web app deployed on Vercel, Netlify, Railway, Render, Fly.io, or standalone hosting.
Q&A
03
What does 'vibe coding' mean?
Vibe coding is building software primarily through natural-language prompts to AI tools like Lovable, Cursor, Bolt, Claude Code, or v0 — iterating quickly and not reading most of the generated code. The term was coined by Andrej Karpathy in early 2025. The security trade-off is that AI-generated code ships with a predictable set of gaps that the builder usually hasn't audited.
Q&A
04
How is this different from a traditional pentest?
A pentest is a human-driven, usually week-long engagement that covers any vulnerability class. This scanner is a minutes-long automated probe focused on the specific failure patterns of AI-generated apps. Start with the scanner for coverage, then engage a pentest if you hold regulated data.
Q&A
05
Does this replace platform-specific scanners?
No — it complements them. Use this first for breadth across your stack, then the platform-specific scanner (Lovable, Firebase, Supabase RLS) for depth on your primary layer.
Q&A
06
Is the scan safe to run on production?
Yes. The scanner only fetches the same URL a normal visitor would load, inspects the frontend, and probes public endpoints for default exposure. It does not attempt destructive actions, credential stuffing, or DoS. You can run it as often as you like.
Q&A
07
What do I do with the findings?
Each finding includes severity, evidence, and a fix prompt you can paste back into Claude Code, Cursor, or Lovable. Critical findings (exposed secret keys, anon-readable user tables) should be fixed before any other work. The rescan button verifies the fix in place.
Q&A
08
Is the tool free?
The surface scan is free and unlimited. The deep agent scan — which tests RLS policies, auth bypasses, and API authorization — is part of the paid VibeEval product with a 14-day trial and no credit card required.
Q&A
09
Do I need source code access?
No. Paste a public URL. The scanner exercises the same surface users and attackers already have. Private staging can be scanned if the URL is reachable and you accept that findings reflect that environment's config.
Q&A
10
How often should I scan?
After every production deploy that includes AI-generated changes, and at least weekly if you iterate daily. RLS and keys regress when new tables and integrations are prompted in.
Q&A

GO DEEPER THAN THE SURFACE SCAN

The free surface pass finds keys and obvious exposure. The full agent tests RLS, auth bypass, BOLA across roles, and every API route on the same URL.

14-day free trial · No credit card · Cancel anytime

START DEEP SCAN