We scanned 50 real AI-generated open-source projects with our security engine. The result is sobering, and measurable.
Vibe coding has dropped the barrier to app development to zero. With Cursor, Windsurf, or Claude, applications that used to take weeks now ship in hours. That is the good news.
The bad news: AI models write working code, but not secure code. They systematically skip rate limiting on API endpoints, they leave out authentication checks, they do not harden inputs. Not because they cannot. Because nobody asked them to.
We wanted to know how bad it really is. So we scanned 50 real repos, projects built with AI coding tools, identified by marker files like .cursorrules and CLAUDE.md. With our own production engine, not a simplified test tool.
We selected public GitHub repositories with provable AI-coding-tool origin, recognized by config files such as .cursorrules, CLAUDE.md, or .replit. Languages: TypeScript (64%), Python (16%), JavaScript (14%), HTML (6%). All scans were performed in April 2026.
What our engine found across 50 repos, after AI-validation of every single finding.
More than a third of the scanned projects contained API keys, passwords, JWT secrets, or other credentials directly in source, often in config files or comments. AI assistants frequently inline secrets while generating code because it is convenient for the demo context. Nobody cleans up afterwards.
More than every second app contains at least one directly exploitable vulnerability. Among them: SQL injections without parameterized queries, command injection via unsanitized user input, and missing authentication on admin routes. These are not theoretical, they are in real, running projects.
Almost 9 in 10 projects have at least one HIGH-severity vulnerability, often not bad code but missing code. AI produces functional endpoints but systematically forgets rate limiting, CSRF protection, and input validation. Static scanners like Semgrep do not find these gaps because there is nothing to "see". Our AI Hunter analysis does.
SQL injection, command injection, and related patterns are the largest category with 200 confirmed findings, followed by path traversal (87 findings) and auth gaps (39 findings). AI-generated code mixes database access with user input without the separation experienced developers wire in by instinct.
Vibe coding does not produce mediocre-security apps. It produces either very insecure or surprisingly good ones. 46% of repos scored below 30, while 8% scored above 90. The takeaway: security in vibe-coded apps is not a coincidence, it is an active decision.
All 50 repos, all findings, broken down by score, severity, and category.
The Vouch Security Score runs from 0 (critically insecure) to 100 (no confirmed findings).
Confirmed findings by type, sorted by frequency.
What other scanners report, we verify. Every single finding.
Traditional scanners flood developers with warnings. Our AI Validator reads the actual code context of every finding and decides whether the problem is real, or explains why it is not. Out of 1,087 reviewed findings, 486 (45 percent) were recognized as false positives and removed with reasoning. What remains is 601 real issues, no noise, no alert fatigue.
dir parameter comes from a hardcoded array dirsToCopy, not user input. Path traversal is not possible in this context."
COPY_TO_ENV_LOCAL.txt) for the initial setup walkthrough and contains the placeholder 'example_anon_key'. Not a real secret."
mysql2 library is called with separate query and values arguments. This is parameterized querying and correctly prevents SQL injection."
spawn call uses shell: true, but the command and arguments (npm run dev:react) are hardcoded, not user-controlled."
127.0.0.1 (loopback). Traffic never leaves the machine, so there is no eavesdropping risk on the network."
This transparency is not a side effect, it is the core. Developers see not just what was found, but why it is a problem. And they see what was filtered out, and why it was not.
The same pipeline that runs in production Vouch, not a simplified test tool.
Semgrep with a security ruleset, npm audit, pip-audit, and gitleaks for secret detection. Covers known patterns and CVEs.
Gemini analyses security-relevant files and finds what Semgrep cannot see: missing rate limits, missing auth, insecure configurations.
Every finding is re-evaluated by an LLM with the surrounding code context. False positives are removed with an individual explanation.
The Vouch Security Score (0โ100) is computed from the validated issues, weighted by severity and exploitability.
The scan code is open and can be run on any repo. The 50 scanned repos are all public on GitHub. Raw data and the complete findings.json are available on request. We deliberately did not pick repos we knew, the selection was automatic based on marker files via the GitHub API.
Three takeaways everyone working with AI coding tools should know.
AI models optimise for working, readable code. Security mechanisms such as rate limiting, CSRF protection, or input sanitization do not appear automatically, they have to be explicitly asked for, or verified after the fact.
A significant share of the issues found here, missing auth, missing rate limits, logic flaws, would be invisible to plain Semgrep. These gaps are not "bad code" a regex can catch. They are structural absences.
8 percent of scanned repos scored over 90 on a comparable codebase. The difference: developers who actively integrate security into their prompt workflow, or who run automated checks, produce noticeably safer apps.
Vouch scans your repo with the same engine that ran this study, in under 5 minutes.
Scan your repo for free