AI-coded apps

    What does a Bolt.new security scan report show?

    A Bolt.new AI-generated app project in 2026 next to a security scan report listing findings such as a hardcoded API key and disabled Supabase Row Level Security, grouped by OWASP MASVS category

    You built an app in Bolt.new, it runs, and now you want to know what a security scan would say before you put it in front of App Review or real users. For a solo founder shipping AI-generated code, that instinct is the right one, because the issues that matter most here stay invisible while the app works perfectly.

    Short answer

    A Bolt.new security scan report tells you which secrets, backend rules, and data paths in your generated app are exposed, mapped to a standard such as OWASP MASVS. The findings that dominate are hardcoded API keys in the client bundle, missing Supabase Row Level Security, and auth checks that exist in a comment but not in the code. The risk is real at scale: NowSecure reports that roughly one in four code samples from leading AI assistants contained at least one confirmed OWASP vulnerability. A scan turns those into a list you can fix before submitting.

    What you should know

    • The dangerous issues are silent: an exposed key or an open database does not break the app, so it survives normal testing.
    • Client code is public: anything in a web or React Native bundle, including an API key, can be read by anyone who downloads the app.
    • Supabase RLS is off by default: until you enable it per table, the public anon key can expose your data.
    • Auth in a comment is common: AI-generated route files sometimes describe an auth check in a comment without implementing it.
    • A scan reads the build, not your prompts: it inspects the compiled bundle or the deployed code, which is what an attacker sees.

    What does a Bolt.new security scan actually check?

    A scan groups findings into the same categories whether the build is web or mobile. It looks for secrets exposed in the client bundle, backend access rules that are missing or permissive, network calls that bypass a server, insecure storage of tokens, and permissions the build requests. Each maps to an OWASP MASVS control for mobile or the OWASP Top 10 for the web and API layer. For a Bolt.new app heading to the App Store, the relevant artifact is the compiled bundle that Bolt produces through Expo, and the scan reads that the way a reviewer or an attacker would.

    Why do AI-built apps like Bolt.new ship these issues?

    Because the generator optimizes for a working feature, not a defended one. When you ask Bolt.new to add OpenAI, Stripe, or Supabase, the fastest code that works often puts the key directly in the frontend and calls the provider from the browser. NowSecure, citing AppSec Santa research measured against the OWASP Top 10, found that approximately one in four AI-generated code samples carried at least one confirmed vulnerability, with server-side request forgery, injection, and security misconfiguration among the most common. The pattern is consistent: the code runs on the first try and leaves the security configuration as a step the model does not take.

    A typical exposed-key pattern looks like this:

    // Anti-pattern: the secret ships in the client bundle
    const openai = new OpenAI({ apiKey: "sk-proj-REDACTED" });
    
    // Safer: call your own backend route, keep the key server-side
    const res = await fetch("/api/generate", { method: "POST", body: input });
    

    What shows up most often in a Bolt.new scan report?

    The same handful of findings recur across generated apps. The table lists the common ones, where they live, and the direction of the fix.

    FindingWhere it livesFix direction
    Hardcoded API keyClient bundle or a .env shipped to productionMove the call server-side, then rotate the key
    Supabase RLS disabledDatabase tables reachable by the public anon keyEnable RLS and write per-table policies
    Auth check missingA route handler where the check is commented outImplement the check server-side
    Direct browser-to-provider callFrontend calling Stripe or OpenAI directlyProxy the call through your own backend
    No rate limitingPublic endpoints and serverless functionsAdd rate limits and input validation

    How do you read and act on the report before submitting?

    Triage by severity, then fix in order. The order that works:

    1. Rotate and remove exposed secrets first, since a leaked key is the fastest path to a real bill or a breach.
    2. Turn on Supabase Row Level Security and write a policy for every table the anon key can reach, then test that an unauthenticated request is refused.
    3. Move provider calls behind your own backend so keys never reach the client.
    4. Add the missing auth checks in code, not in comments, and add basic rate limiting.
    5. Rebuild and rescan, because a fix that is not in the shipped bundle is not a fix.

    For the mobile submission specifically, a pre-submission scan such as PTKD.com (https://ptkd.com) reads the compiled APK, AAB, or IPA and reports findings against OWASP MASVS, which is the same artifact App Review and an attacker work from. Running it after your fixes confirms the changes actually made it into the build.

    What to watch out for

    A scan has real limits. Static analysis reads what is in the bundle, so it flags an exposed key or a missing manifest entry well, but it cannot confirm that your Supabase policies actually deny an unauthorized read; that needs a live test against the database. No scanner detects every issue, and a clean report is not a promise that the app is secure, only that the checked patterns passed. Treat the report as the floor and not the ceiling: fix what it finds, test the backend rules by hand, and keep secrets out of the client in the first place rather than scrubbing them after the fact.

    What to take away

    • A Bolt.new security scan report surfaces the silent issues, exposed keys, open databases, and missing auth, that a working app hides.
    • The root cause is functionality-first generation; NowSecure found roughly one in four AI-generated code samples carried a confirmed OWASP vulnerability.
    • Fix in order: rotate exposed secrets, enable Supabase RLS, move provider calls server-side, then rebuild and rescan.
    • For a mobile release, a pre-submission scan such as PTKD.com reads the compiled APK, AAB, or IPA against OWASP MASVS, so you find these issues before App Review or an attacker does.
    • #bolt-new
    • #ai-generated-code
    • #security-scan
    • #supabase-rls
    • #api-key-exposure
    • #owasp-masvs
    • #vibe-coding

    Frequently asked questions

    What does a Bolt.new security scan report include?
    It lists findings grouped by category: secrets exposed in the client bundle, backend access rules that are missing or too permissive, network calls that skip a server, insecure token storage, and requested permissions. Each is mapped to an OWASP MASVS control or the OWASP Top 10, with a severity and a fix direction. For a mobile release, the report reads the compiled bundle rather than your source prompts.
    Why are API keys from Bolt.new apps so often exposed?
    Because the fastest working code puts the key in the frontend. When you ask Bolt.new to add OpenAI or Stripe, it frequently hardcodes the key and calls the provider directly from the browser, which ships the secret in the client bundle. Anyone who downloads the app or views the web source can read it. The fix is to proxy the call through your own backend and rotate the key.
    Does Bolt.new set up Supabase Row Level Security for me?
    No. Row Level Security is off by default in Supabase, and AI-generated code rarely enables it. Until you turn on RLS and write a policy per table, the public anon key can read or write data it should not. Enable RLS, write policies for every reachable table, and test that an unauthenticated request is refused before you submit.
    If my Bolt.new app works, why do I need a scan before submitting?
    Because the issues that matter most do not break the app. An exposed key, an open database, or a commented-out auth check all let the app run normally while leaving it open to abuse. A scan reads the build the way an attacker does and reports those silent gaps, so you fix them before App Review or a scraper finds the same thing first.
    Can a scan catch every issue in an AI-generated app?
    No. Static analysis flags what is in the bundle, such as a hardcoded key or a missing manifest entry, but it cannot confirm that your Supabase policies actually deny an unauthorized read, which needs a live test. No scanner detects everything, so treat a clean report as a floor: fix the findings, test backend rules by hand, and avoid putting secrets in the client at all.

    Keep reading

    Scan your app in minutes

    Upload an APK, AAB, or IPA. PTKD returns an OWASP-aligned report with copy-paste fixes.

    Try PTKD free