NewEvery finding now mapped to CWE, OWASP Top 10 & CVSS

//AI blind spots

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.jsNext.jsReactReactRemixRemixNuxtNuxtAstroAstro
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.jsNext.jsViteViteAstroAstroSvelteKitSvelteKitExpoExpoNuxtNuxt
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 toOpenAIOpenAIAnthropicAnthropicGroqGroqReplicateReplicateMistralMistralHugging FaceHugging 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.jsNext.jsExpressExpressFastAPIFastAPIRailsRailsDjangoDjango
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 inSupabaseSupabaseFirebaseFirebaseConvexConvexAppwriteAppwritePocketBasePocketBaseNhostNhost
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 inExpressExpressFastAPIFastAPINext.jsNext.jsFlaskFlaskCloudflareCloudflare
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 intoCloudflareCloudflareDatadogDatadogSentrySentryVercelVercelNew RelicNew 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.

See all 40+ checks

You don’t have to remember any of these.

That’s the point. Paste a URL and Flare.ai checks all of them, then tells you which ones actually apply to you.

Run your free scan