We Scanned 100 AI-Built Apps for Security Flaws.
Here's What We Found.
31% exposed live secrets. 47% had database access-control issues. And most looked perfectly ready to ship.
Vibecheck
AI App Security Report 2026
AI-assisted development has made it possible to go from an idea to a working application in hours. But there's a problem.
Tools such as Cursor, Lovable, Bolt, v0, Replit and Windsurf can help developers build incredibly quickly. That doesn't necessarily mean the resulting application is ready to face the internet.
We analysed 100 AI-built applications to find out what security problems were making it into real projects. The results suggest a growing gap between “The app works” and “The app is safe to launch.”
No credit card required
Find security issues before your users do
We wanted to understand the security risks appearing in applications created using modern AI-assisted development workflows. So we analysed 100 applications built primarily using AI coding tools.
These weren't deliberately vulnerable applications or cybersecurity challenges. They were the kind of projects people are building every day: SaaS products, internal tools, dashboards, marketplaces, directories, AI wrappers, productivity applications and early-stage startup products.
We weren't searching for obscure theoretical vulnerabilities. We focused on mistakes capable of creating real-world exposure when an application reaches production. Things like:
- Exposed API keys and credentials
- Missing database access controls
- Authentication and authorisation weaknesses
- Insecure API routes
- Sensitive information exposed client-side
- Overly permissive database configuration
- Unsafe environment handling
- Missing security headers
- Dependency vulnerabilities
- Endpoints trusting user-controlled input
Each application was analysed using the same security assessment methodology. What we found was concerning.
Nearly one-third of the applications contained credentials, tokens or sensitive configuration that should not have been accessible where we found them. Examples included API keys, database credentials, service tokens, authentication secrets, and third-party integration keys.
One of the easiest mistakes to make when building quickly is assuming that because a value is stored in code or an environment configuration, users can't access it. That's not always true. Anything bundled into client-side JavaScript should effectively be considered public. A secret accidentally exposed in a frontend bundle can potentially be extracted by anyone using the application.
Why this matters
A leaked credential could allow an attacker to:
- Consume paid API resources
- Access third-party services
- Retrieve application data
- Generate unexpected bills
- Potentially move deeper into the application's infrastructure
And because the application itself may continue functioning normally, the developer may never realise the credential has been exposed.
This was the most common serious issue we identified. Almost half of the applications showed weaknesses around controlling who could access particular records or database operations. This is particularly important for applications built on services such as Supabase and other backend-as-a-service platforms.
A user being authenticated does not automatically mean they should be allowed to access every record. Consider this flow:
That appears normal. But one critical question remains: does project 123 actually belong to that user? If that check is missing, changing an ID could potentially expose another customer's data.
This class of problem is often referred to as broken object-level authorisation or insecure direct object reference. Database-level protections such as Row Level Security (RLS) can provide another important layer of defence.
Why AI-built apps are susceptible
AI coding tools are extremely good at helping developers make functionality work. When you ask “Create a dashboard where users can view their projects”, the generated implementation may successfully authenticate the user, query the database, display projects, and update records. From a functional perspective, the feature works.
But security requires another question: what happens when a user deliberately asks for something they shouldn't be allowed to access? That is a different problem.
This distinction appeared repeatedly during the research.
An application can have perfectly functioning authentication and still contain serious authorisation vulnerabilities. The developer sees a login screen, the dashboard is protected, unauthenticated visitors are redirected — everything appears secure. But a logged-in user may still be able to access another user's resources.
For example: the user must be logged in ✓ — but there's no check that the requested record belongs to them ✗.
This is exactly the type of vulnerability that can survive normal application testing because developers generally test whether legitimate actions work. Attackers test whether illegitimate actions work too.
Client-Side Trust Was Another Recurring Problem
We also found applications relying too heavily on the browser to enforce security decisions. For example:
if (user.role === "admin") {
showAdminPanel();
}Hiding an admin button is useful for the interface. It is not an access-control mechanism. The underlying API or server action still needs to verify that the requesting user has permission to perform the operation. Anything running in the user's browser should be treated as potentially controllable by that user. Security-sensitive decisions belong on the server.
AI Can Generate Secure Code. That's Not the Problem.
The conclusion from this research isn't that AI-generated code is inherently insecure. Modern coding models can recognise vulnerabilities, recommend security controls and produce secure implementations.
The problem is the development workflow. A typical vibe-coding conversation looks like:
Every instruction is focused on functionality. Unless security is deliberately included in that process, it is surprisingly easy for it to become an afterthought. AI optimises against the requirements it's given. If the requirement is “Make this work”, that's what gets tested — not “Make this safe when someone deliberately tries to break it.”
Why These Problems Survive Until Production
Traditional software teams often have developer → code review → QA → security tooling → staging → production. A solo AI-assisted founder might have: Founder + AI → Production.
That's part of what makes vibe coding so powerful. It's also why a new safety net is needed. The person building the application may be simultaneously acting as founder, developer, designer, QA engineer, DevOps engineer, and security reviewer — and may have only started programming recently. That isn't a criticism. It's a consequence of software development becoming accessible to dramatically more people. Security tooling needs to become equally accessible.
The “It Works” Trap
One of the biggest lessons from analysing these applications was how normal insecure software can look. A vulnerable application doesn't necessarily crash, display an error, run slowly, look unfinished, or fail its tests. It can look fantastic. The authentication works. Stripe works. The database works. The animations work. The application deploys successfully. And the vulnerability is still there.
That's what makes security mistakes fundamentally different from many normal bugs. A broken button announces itself. A missing authorisation check doesn't.
Vibecheck is a security scanner designed specifically around the way AI-assisted applications are being built. Connect your repository and Vibecheck looks for security issues that are easy to miss when you're moving quickly. But the important part isn't simply producing a list of warnings — Vibecheck is designed to explain what's wrong, why it matters, how serious it is, and what to change. Because a security report isn't much use to a vibe coder if understanding it requires being a security engineer.
Secrets & credentials
Potentially exposed keys, tokens and sensitive configuration.
Authentication & authorisation
Routes and resources that may not be sufficiently protected.
Database security
Access-control and configuration weaknesses, including RLS.
API security
Endpoints that may trust user input or identity incorrectly.
Frontend exposure
Sensitive logic or information shipped to the browser.
Dependencies & config
Known risks and unsafe security settings.
Free · No credit card
Your app doesn't need to be perfect.
The goal is to catch the obvious, high-impact mistakes before someone else does. A leaked API key can be fixed. A missing ownership check can be added. But first you need to know it's there.
Scan My App →Sample
100 applications primarily developed using AI-assisted coding workflows were included in the analysis.
Assessment
Projects were assessed against a consistent set of security checks covering areas including credential exposure, authentication, authorisation, database access controls, API security, frontend exposure, dependency risk and security configuration.
Classification
Findings were categorised by vulnerability type and severity. Duplicate manifestations of the same underlying issue within an application were not counted as separate affected applications for headline prevalence statistics.
Limitations
This research represents the applications and versions assessed at the time of analysis. It should not be interpreted as evidence that all AI-built applications contain the same vulnerabilities, nor as a comparison of the inherent security of individual AI coding platforms. Detection of a potential weakness also does not necessarily demonstrate that the vulnerability was actively exploited.
Research conducted by Vibecheck — September 2026.
Cite this report
APA 7th edition
- Is vibe-coded software insecure?
- Not inherently. AI coding tools can generate both secure and insecure code. Risk arises when generated code reaches production without sufficient security review, particularly when developers focus heavily on functionality and don't test adversarial behaviour.
- Can AI coding tools expose API keys?
- They can if sensitive credentials are placed somewhere that becomes part of the client-side application or committed to an accessible repository. Secrets should be appropriately stored and handled server-side.
- What is Row Level Security?
- Row Level Security controls which database records a particular user or role is permitted to access. It can help prevent one authenticated user from reading or modifying another user's data.
- Does authentication make my app secure?
- No. Authentication establishes identity. Your application must also enforce authorisation — determining what each authenticated user is permitted to access and do.
- Should I security-test an app built with Cursor or Lovable?
- Production applications should undergo appropriate security review regardless of which development tool created the code. AI-assisted development makes this particularly important because developers can generate large amounts of unfamiliar code very quickly.
- How often should I scan my app?
- At minimum, scan before launch and after meaningful changes involving authentication, APIs, databases, payments, file uploads, permissions or sensitive information. Ideally, security checks become part of the normal deployment process.
You vibe coded the app.
Now vibecheck it.
Find security problems before your users — or someone else — finds them.
Scan My App →Vulnerability guides