LAUNCH CHECK · FIXED PRICE · RETEST INCLUDED

Your AI built the app.
I check if it's safe to launch.

Built with Lovable, Bolt, Cursor, v0 or Replit? Scanners and AI pentests are great at breadth. I go deep on the parts that need human judgment: who can reach whose data, what happens when someone tampers with your checkout, and whether your RLS policies actually hold. By hand, by one OSCP-certified tester.

Bigger app or multiple roles? Get a fixed-price quote for a full audit →

OSCP · eWPTxv2 · MSc Cyber Security ✓ Signed, verifiable reports ✓ Retest included
Cursor Bolt.new Lovable v0 Replit Agent Claude Code Windsurf + any AI-generated stack
1,645
showcase apps scanned
170
readable with the public key
303
vulnerable endpoints
CVE-2025-48757

This isn't hypothetical.

In 2025 researchers scanned 1,645 apps from Lovable's public showcase. 170 of them exposed data that anyone could read with just the public key, because their row-level security wasn't set up properly (CVE-2025-48757). Lovable has added security tooling since. But RLS policies that exist and still leak across users are exactly what I test for.

Read the original research →
Who it's for

When a Launch Check is worth it.

  • You're about to take real payments.
  • Your first business customer sent you a security questionnaire.
  • An investor asked how you handle security.
  • Your app stores other people's personal data.
  • You're an agency handing an AI-built app to a client.

Hobby project with no users and no data? Run the free checklist instead and keep your money.

The problem

AI writes working code. Not secure code.

AI coding tools are trained on the entire internet's worth of public code, which, on average, is not security-hardened. They optimize for "what makes the user say yes" and "what looks like it works." Those are not security objectives.

Worse: when you describe a feature in natural language ("let users edit their profile"), the AI infers an implementation. It rarely infers the right authorization model, the right input validation, or the right secret-handling strategy, because you didn't say so explicitly.

The result is a predictable pattern. The same classes of vulnerability appear in almost every vibe-coded app I review. Below: the actual list.

Important, this is not anti-AI

AI coding tools are extraordinary. They compress months of work into days. The point isn't to stop using them, it's to recognize that shipped functionality ≠ shipped security, and to close the gap before someone else finds it.

What I test

The vibe-coded vulnerability pattern.

These are the issues found again and again in AI-generated apps. Most of them are logic flaws, invisible to automated scanners, but obvious to a human attacker probing endpoint by endpoint.

Missing authorization on endpoints

The AI generates a "/api/users/:id" endpoint. Authentication is required. Authorization, checking whether you're allowed to view that specific user, is forgotten. Any logged-in user can read everyone's data.

Why AI misses it: "Add auth" was the prompt. Object-level access control wasn't mentioned, so it wasn't built.

IDOR (Insecure Direct Object Reference)

Resources are exposed by sequential or guessable IDs. Change ?order=1042 to ?order=1041 and you see someone else's purchase. The classic vibe-coded breach.

Why AI misses it: The DB schema uses auto-increment IDs. The AI uses them in URLs. Nobody asked for UUIDs or ownership checks.

Hardcoded secrets & exposed API keys

Stripe keys in client-side bundles. OpenAI tokens in .env.local files committed to git. Database URLs in client-rendered Next.js pages. Public Supabase service-role keys.

Why AI misses it: The AI puts the key "where it works first try." That's often the wrong side of the network boundary.

SQL/NoSQL injection & unsafe queries

Especially when the AI generates dynamic queries based on user input that wasn't supposed to reach the DB. Common in filter, sort, and search features.

Why AI misses it: The AI usually uses an ORM correctly, but sometimes falls back to concatenating strings, especially in "advanced filter" features.

Overly permissive CORS

Access-Control-Allow-Origin: * with credentials enabled. Lets any website read your authenticated user's data via the browser.

Why AI misses it: "Fix the CORS error" prompt → AI returns "the most permissive config that makes the error go away."

Exposed admin routes

Admin dashboards reachable at predictable URLs (/admin, /dashboard) protected only by client-side React route guards, easily bypassed by hitting the API directly.

Why AI misses it: Auth UX was the brief. Server-side route protection was assumed, never implemented.

Unsafe file uploads

Avatar uploads that accept any MIME type and execute server-side. Path traversal via filename. Direct uploads to public S3 buckets with read access for anyone.

Why AI misses it: Upload "just works." Validation, type checks, and bucket policies are out of scope of the visible feature.

Prompt injection & AI-feature abuse

If your app calls an LLM with user input, that's an attack surface. Users can hijack the system prompt, extract data from your context, or call tools you didn't intend to expose.

Why AI misses it: The model has no concept of "this user input is hostile." You have to architect defenses explicitly, they're not the default.

Business logic & payment flaws

Race conditions in checkout. Price set client-side and trusted by server. Discount codes reusable in parallel. Inventory going negative. Subscriptions cancellable without ownership check.

Why AI misses it: The AI implements the happy path. Concurrent and adversarial usage requires explicit thinking, and you didn't prompt for it.

Database row-level security gaps

Especially in Supabase/Firebase apps: tables created without RLS policies, or with policies that look correct but allow cross-tenant reads via clever filter chains.

Why AI misses it: RLS is "off by default." The AI creates working tables. Nobody enables policies until someone asks.

See a sample Launch Check report →

Why automated scanners miss this

SAST tools don't speak vibe-coded.

The standard advice is "run Snyk / Semgrep / Dependabot." Useful for known CVE patterns and library vulnerabilities. But the vibe-coded vulnerability pattern is almost entirely about logic, authorization, and architecture. Those are:

  • Not pattern-matchable, they depend on the data model and intended access rules
  • Not in any signature database, they're business logic, not library bugs
  • Specific to your app, a scanner doesn't know who should see what
  • Often spread across multiple files, an attacker chains three small flaws into one breach

The only way to find them is for a human to think like an attacker while exercising your actual application. That's exactly what I do.

Independent vulnerability researchA Zip Slip in xslweb's unzip function that I found and reported (fixed by the maintainer), and a write-up on why SameSite=Lax doesn't stop CSRF for the first 2 minutes.

Scanner vs AI pentest vs human

Scanner, AI pentest or a human? Use the right one.

Free scanner AI penteste.g. built into your platform Launch Check
What it is Automated tool, e.g. OWASP ZAP AI agents probing your app One OSCP-certified pentester, by hand
Cost Free Low per-test fee €1,099 excl. VAT, fixed
Strong at Known CVEs, headers, misconfigurations Breadth: common vulnerability classes, fast Depth: authorization logic, chained flaws, payment & business logic, RLS policies that exist but still leak
You get Raw output Auto-generated findings Signed, verifiable report + one retest
Best moment Every deploy Every big release Before launch, first B2B customer, investor due diligence

My honest advice: use all three. Run a scanner on every deploy, an AI pentest when you ship big changes, and bring in a human when real money, real data or a real customer is on the line.

The audit

Need more depth? The full vibe-coded app audit.

VIBE-CODED APP AUDIT

Fixed price · retest included

Manual penetration test built for AI-generated apps. Pricing depends on scope (number of features, integrations, AI surface area), quote within one business day after intake.

Manual probing of every authenticated endpoint
Authorization model review per resource type
Secret/key exposure scan (client, repo, infra)
Injection, IDOR, business-logic testing
Prompt injection & AI-feature abuse (if applicable)
Supabase/Firebase RLS & bucket policy review
Written report (English) with reproduction steps
30-min walkthrough call with you and your team
Retest after fixes, included
NDA standard

Fixed price based on scope, from €2,500 excl. VAT · retest included.

Get a fixed-price quote →

Deciding between this review and the Launch Check? The Launch Check is a shorter fixed-scope pentest, bookable online, for small AI-built apps just before launch. This security review is broader: it includes an intake and a review of your Supabase/Firebase rules and bucket policies.

Free resource

The Vibe Coding Security Checklist.

Before you ship, or before you book an audit, run through this. If you can confidently check every box, you've already closed the most common vibe-coded vulnerability patterns.

Self-audit checklist (top 12)

Tick boxes are for browser-side use only, nothing is sent anywhere. Use it as a pre-launch gate.

This checklist also has its own page, to bookmark or share.

FAQ

Common questions from founders.

I have ~3 paying users. Is it too early for an audit?
If you're charging real money, handling personally identifiable information, or about to land a customer who'll do diligence, no, it's not too early. The cost of fixing a breach with 3 users is reputational and existential; the cost of fixing it later with 3,000 is also legal. The cheapest moment to harden is right now.
We use Supabase / Firebase. Doesn't that handle security?
Partially. Supabase and Firebase give you the tools (RLS, security rules), but they're off by default and easy to misconfigure. The most common breach pattern in apps using these is RLS policies that compile and run, but allow filter-based extraction across tenants. We specifically check this.
Can we just run a vulnerability scanner instead?
Run one anyway, it catches the easy stuff. But scanners don't find IDOR, missing authorization, business logic flaws, or prompt injection. A scanner alone gives false confidence.
What does an audit cost?
Fixed price based on scope, typically the size of your app, number of integrations, and whether AI features are in play. We send a written quote within one business day after a short intake call. No hourly billing, no surprise invoices.
Do you sign NDAs?
Yes, an NDA is standard.
We're based outside the Netherlands. Does that matter?
No. All work is remote. The report is in English.

You shipped in days. Now make sure it's safe.

Book online and hear within ~2 working days whether your app fits. If it does, the test is scheduled within a week, with the report and one retest included. Not accepted? Full refund.

Book a Launch Check · €1,099 excl. VAT → Get a quote for a full audit
✓ Fixed price ✓ Retest included ✓ Full refund if not accepted
Book a Launch Check · €1,099 →