The mistakes AI makes reliably, in code that looks completely fine.
Traditional scanners look for known CVEs and malware signatures. None of these are either. They’re architectural mistakes in syntactically perfect code that does exactly what you asked for, which is precisely why they survive review and reach production.
Every one below is a check that runs on the free tier today. There are seven because there are seven; we’d rather publish what ships than round up to a nicer number.
01
It hands a secret across the server/client boundary
CWE-200CRIT
What the AI does
A Server Component reads a key from the environment and passes it to a Client Component as a prop, because that's the natural way to share a value between two components.
Why it survives review
The code is correct React. The secret never appears in any .js file, so bundle scanners see nothing. It's serialised into the HTML for hydration instead.
How Flare.ai catches it
We reassemble the React Server Component flight stream from your HTML and scan the decoded payload, which also catches values split across streaming chunks and secrets serialised under a quoted prop name.
seen inNext.jsReactRemixNuxtAstro
02
It renames a variable to NEXT_PUBLIC_ to fix a build error
CWE-522CRIT
What the AI does
You hit “process.env is undefined on the client.” The assistant's fix is to add the NEXT_PUBLIC_ prefix, and the error goes away.
Why it survives review
The build passes and the feature works. The prefix is exactly what Next.js documents. Nothing signals that it also inlines the value into every browser bundle.
How Flare.ai catches it
We parse public env vars out of your bundles and cross-reference their values against real credential formats, while allowlisting the ones that are genuinely public by design so anon keys and analytics tokens don't cry wolf.
seen inNext.jsViteAstroSvelteKitExpoNuxt
03
It builds an LLM proxy and forgets the auth check
CWE-306HIGH
What the AI does
You ask for a chat endpoint. You get /api/chat wired to OpenAI, working perfectly on the first try.
Why it survives review
You never asked for authentication, so it wasn't built. The endpoint does exactly what you requested, and the bill arrives later.
How Flare.ai catches it
We enumerate your API routes, identify the ones that look like model proxies, and send a minimal unauthenticated POST. A 200 means anyone can bill your account.
billed toOpenAIAnthropicGroqReplicateMistralHugging Face
04
It leaves the debug routes behind
CWE-489CRIT
What the AI does
/api/debug, /api/seed and /api/admin get scaffolded while you're building, then never removed once the real feature lands.
Why it survives review
Nothing in your UI links to them, so they're invisible in the app and invisible to any scanner that only follows what the bundle references.
How Flare.ai catches it
We probe a curated list of dangerous paths directly. A random control path is checked first, so apps that answer 200 to everything are skipped rather than reported.
seen inNext.jsExpressFastAPIRailsDjango
05
It turns off Row Level Security so your query works
CWE-284CRIT
What the AI does
A query returns nothing locally. The fastest fix that makes it work is a permissive policy, or disabling RLS on the table.
Why it survives review
The app immediately behaves correctly, which reads as the problem being solved. The table is now world-readable to anyone holding the anon key, which ships in your bundle by design.
How Flare.ai catches it
We detect the Supabase or Firebase project from your bundle and query your tables, collections and buckets with the public key, exactly as an attacker would.
seen inSupabaseFirebaseConvexAppwritePocketBaseNhost
06
It opens CORS all the way to make local dev work
CWE-942HIGH
What the AI does
A cross-origin request fails in development. Access-Control-Allow-Origin gets set to *, and credentials get allowed alongside it.
Why it survives review
It unblocks you in seconds and no error ever comes back. The combination of a wildcard origin and credentials is the part that turns it into a vulnerability.
How Flare.ai catches it
We inspect your response headers for the credentialed-wildcard and reflected-origin combinations specifically, rather than just noting that CORS is present.
seen inExpressFastAPINext.jsFlaskCloudflare
07
It puts your access token in the URL
CWE-598HIGH
What the AI does
fetch('/api/data?token=' + accessToken). It's the shortest way to get the token to the endpoint, and it works.
Why it survives review
Nothing breaks and nothing warns. Query strings are written to server logs, proxy logs and browser history, and sent in the Referer header to every third party on the page.
How Flare.ai catches it
We scan your bundles for credential-shaped query parameters, separating tokens interpolated at runtime from credentials hardcoded straight into a URL.
leaks intoCloudflareDatadogSentryVercelNew Relic
And then they combine
Individually these are bugs. Together they’re a breach.
An open table is serious. An unauthenticated admin route is serious. An open table reachable through an unauthenticated admin route is a different category of problem, and no individual check can see it, because the danger lives in the relationship rather than in either finding.
Flare.ai connects findings into compound risks and puts them at the top of the report. They’re deliberately left out of the severity counts: a combination is fixed by remediating one of its legs, so counting it again would inflate the numbers for the same underlying problem.