Verilay Report
Analyse your own app →
juice-shop/juice-shop
Scanned 18 Oct 2026, 11:14 UTC
OWASP Juice Shop is an intentionally insecure web application for security training and awareness
Not Ready
Fix the critical findings below before launching with real users.
IT Review Pack → a printable checklist for IT teams approving this app
D
Score
5
Critical
34
Warnings
3
No issues seen
Fix these first
Copy a prompt, paste it into your AI builder (Lovable, Replit, Bolt, Cursor…), then re-run Verilay to check it worked. Treat each one as something to verify, not an order: your AI builder knows your code.
1. JWT Authentication Completely BypassablecriticalAPI · jsonwebtoken
Attackers can forge admin tokens using algorithm 'none' or unsigned HS256 tokens to access all protected endpoints. The jwtChallenges() middleware detects but does not block these attacks, allowing complete authentication bypass.
How: Review server.ts lines 348-360 and routes/verify.ts lines 60-85 to understand how JWT validation currently works. Check across the entire codebase for all JWT verification points and confirm which ones actually reject invalid tokens versus only logging them. Identify every protected endpoint and verify it has blocking validation, not just challenge detection.
Effort: 1 hour
Prompt for your AI builder:
I received a security review flagging that JWT authentication is completely bypassable in server.ts lines 348-360 and routes/verify.ts lines 60-85. The review states that unsigned JWT tokens (algorithm 'none') and forged HS256 tokens are accepted, and that jwtChallenges() middleware only marks challenges as solved rather than blocking invalid tokens. Please review these files and advise without making changes yet: 1) Show me exactly how JWT validation currently works in these locations, 2) Search the entire repository for all JWT verification middleware and list each one with whether it blocks or only logs invalid tokens, 3) List every protected endpoint and confirm whether it has blocking JWT validation, 4) Advise what minimal changes would be needed to reject forged tokens while preserving any intentional challenge functionality, providing specific code locations and the exact validation logic that should be added.
Check it yourself · about 2 minutes
Does a stranger get in without logging in?
  1. Open a private (incognito) window, so you're not logged in.
  2. Paste the address of a page that should need a login, such as your account or dashboard page.
  3. Press Enter and see what happens.
✓ You're sent to a login page, or told you can't view it.
⚠ The page opens and shows someone's data. Note the exact address and tell your AI builder.
Hiding a button isn't protection. The data behind a page must also refuse a stranger.
Only try this on your own app, with test accounts. Never on someone else's app.
2. SQL Injection in Product SearchcriticalAPI · Sequelize, SQLite3
The product search endpoint allows unfiltered user input directly into database queries, enabling attackers to extract, modify, or delete database contents through SQL injection attacks.
How: Review routes/search.ts to see how user input flows into the searchProducts() function. Search the entire codebase for all database query construction patterns and identify which ones concatenate user input versus using parameterized queries. List every endpoint that accepts search or filter parameters.
Effort: 1 hour
Prompt for your AI builder:
I received a security review flagging SQL injection in routes/search.ts where the searchProducts() function allows unfiltered user input directly into database queries. Please review and advise without making changes yet: 1) Show me the exact code in routes/search.ts that constructs the database query, 2) Search the entire repository for all locations where user input is used in database queries and list each one with whether it uses parameterized queries or string concatenation, 3) Identify every endpoint that accepts search, filter, or query parameters and confirm how each sanitizes input, 4) Advise what the minimal safe pattern would be for this codebase (given it uses Sequelize) to prevent SQL injection while maintaining search functionality, with specific examples of how to convert the vulnerable queries.
Check it yourself · about 2 minutes
Does a strange character break it?
  1. On your own app, find a search box or a form.
  2. Type a single apostrophe (') and press Search or Submit.
  3. Watch what happens.
✓ A normal "no results" or a normal, friendly error message.
⚠ A technical error that mentions SQL, a query or the database, or a crash page. Tell your AI builder.
Seeing nothing wrong doesn't prove it's safe. This only catches the most obvious cases.
Only try this on your own app, with test accounts. Never on someone else's app.
3. Unrestricted File Upload Allows RCEcriticalAPI
File upload endpoints accept and process uploaded content without proper validation or sanitization, allowing attackers to upload and execute malicious files including zip bombs, XXE payloads, or executable code.
How: Review server.ts lines 502-506 and routes/fileUpload.ts to understand current upload handling. Check the handleZipFileUpload and handleXmlUpload functions for validation logic. Search the entire codebase for all file upload endpoints and list what validation each performs.
Effort: 1 hour
Prompt for your AI builder:
I received a security review flagging unrestricted file upload in server.ts lines 502-506 and routes/fileUpload.ts, stating that handleZipFileUpload and handleXmlUpload process uploaded content without proper sanitization, allowing malicious file execution. Please review and advise without making changes yet: 1) Show me the exact code in these locations that handles file uploads, 2) Search the entire repository for all file upload endpoints and list each one with what validation it currently performs (file type, size, content scanning), 3) Identify where uploaded files are stored and whether they are served back to users or executed, 4) Advise what minimal validation should be added (file type whitelist, size limits, content scanning, safe storage location) with specific code examples for this stack.
Check it yourself
Needs an experienced person. This one is best confirmed by someone with security experience. It isn't something to test yourself. Ask your AI builder to explain it, then ask a developer or a security tester to confirm it.
Only try this on your own app, with test accounts. Never on someone else's app.
4. Known Vulnerabilities in 37 DependenciescriticalLibraries
37 dependencies have known security vulnerabilities (3 serious, 34 less severe) that could be exploited to compromise the application. Outdated packages often contain publicly disclosed exploits.
How: Run npm audit or yarn audit to see the full vulnerability report with package names and fixed versions. Review package.json to identify direct dependencies. Check if updates are available that fix vulnerabilities without breaking changes.
Effort: 1 hour
Prompt for your AI builder:
I received a security review flagging that 37 dependencies have known vulnerabilities (3 serious, 34 less severe) out of 167 packages checked against OSV.dev. Please review and advise without making changes yet: 1) Run npm audit (or yarn audit) and show me the full report with specific package names, current versions, vulnerability descriptions, and fixed versions, 2) Review package.json and list all direct dependencies with their current versions, 3) For each vulnerable package, check if an updated version is available and whether it would introduce breaking changes, 4) Advise a prioritized update plan starting with the 3 serious vulnerabilities, specifying which packages to update to which versions and any compatibility concerns to test.
Check it yourself · about 3 minutes
Do your packages have known problems?
  1. On GitHub, open your repository and click Security, then Dependabot alerts. It's free; if it's switched off, it can be turned on under Settings, then Security.
  2. Or ask a developer friend to run the free command npm audit in your project folder.
✓ No high or critical alerts.
⚠ Alerts are listed. Update the packages they name, then scan again.
Updating a package can break an app, so update one at a time and test after each.
Only try this on your own app, with test accounts. Never on someone else's app.
5. Rate Limiting Bypass via Header SpoofingwarningAPI
Rate limiting on password reset uses the X-Forwarded-For header as the key, which attackers can spoof to bypass rate limits entirely and perform unlimited password reset attempts or brute force attacks.
How: Review server.ts lines 536-541 to see the current rate limiting configuration. Check what rate limiting library is used and what key generation options it supports. Search the entire codebase for all rate limiting implementations.
Effort: 30 minutes
Prompt for your AI builder:
I received a security review flagging that rate limiting in server.ts lines 536-541 uses X-Forwarded-For header as the key generator (line 540), which attackers can spoof to bypass rate limits. Please review and advise without making changes yet: 1) Show me the exact rate limiting configuration in these lines, 2) Search the entire repository for all rate limiting implementations and list what key each uses (IP, header, session), 3) Identify what rate limiting library is in use and what alternative key generation methods it supports, 4) Advise what the safest key would be for this deployment environment (considering proxies, load balancers) and show the specific configuration change needed.
Check it yourself · about 3 minutes
Can someone try passwords without limit?
  1. On your own login page, use a test account.
  2. Enter a wrong password about ten times in a row.
  3. Watch for a pause, a "too many attempts" message, or a block.
✓ You're slowed down or blocked.
⚠ Every try is accepted, however many. Tell your AI builder.
Use a test account, not your real one, in case it locks.
Only try this on your own app, with test accounts. Never on someone else's app.
6. DOM-Based XSS via Unescaped User InputwarningFrontend · Angular
User-controlled content is rendered without sanitization in multiple locations. The snarkdown markdown parser converts user input to HTML without escaping, and innerHTML assignments directly inject content, allowing attackers to execute arbitrary JavaScript in victims' browsers.
How: Review frontend/src/index.html and hacking-instructor/index.ts line 6 and line 82 to see how user input is rendered. Search the entire frontend codebase for all innerHTML assignments and markdown parsing. Identify what sanitization library is already in use, if any.
Effort: 1 hour
Prompt for your AI builder:
I received a security review flagging DOM-based XSS in frontend/src/index.html and hacking-instructor/index.ts, stating that the snarkdown markdown parser (line 6) converts user input to HTML without escaping and innerHTML assignments (line 82) directly inject content. Please review and advise without making changes yet: 1) Show me the exact code at these locations that renders user input, 2) Search the entire frontend codebase for all uses of innerHTML, outerHTML, insertAdjacentHTML, and markdown parsing
Check it yourself · about 2 minutes
Does the page treat what you type as code?
  1. Find a text box whose content is shown back on a page later, such as a comment, a profile name or a search result.
  2. Type <b>test</b> and submit it.
  3. Look at how it appears.
✓ You see the characters exactly as typed: <b>test</b>.
⚠ You see the word test in bold. The page is treating typed text as code. Tell your AI builder.
Use a test account. Seeing it displayed safely doesn't prove every box is safe.
Only try this on your own app, with test accounts. Never on someone else's app.
Scan At A Glance
What was checked
AI code review
25 of 1,171 files (2%)
Secret scan
All 1,171 files
Weak-crypto scan
All 1,171 files · 1 to check
Dependencies
167 packages · 37 vulnerable packages
Access rules (Supabase)
Not applicable, no Supabase database files found
Dependencies: 167 packages you installed directly. The packages these depend on were not checked, because no full package list was found in the files Verilay read.
Health by area
Auth · no issues seenConfig · no issues seenDatabase · no issues seenAPI · criticalFrontend · warningLibraries · critical
Known issues in your packages (37)
critical (3)lower (34)
What it is made of (1,171 files, every file in the repository)
Logins and data (295)Pages and visuals (182)Settings (204)Bundled libraries (1)Everything else (489)
Estimated time for the 6 priority fixes above: about 5.5 hours. These are the AI's own estimates, not a promise, and package updates are extra.
Tech Stack
Angular 22.0.1 · 1 fixExpress 4.22.1Sequelize 6.37.3 · 1 fixSQLite3 5.1.7 · 1 fixjsonwebtoken 0.4.0 · 1 fixSocket.io 4.8.4Cypress 15.16.0
How Your App Fits Together
OWASP Juice Shop is an intentionally insecure web application for security training and awareness
Product Catalog…FRONTENDThis Angular-based…Security Training ComponentsLIBRARIESThis app uses 167+ libraries including Express (web server…Juice Shop OrdersAPIThis API handles user…AuthConfigDatabase
What each part does
Product Catalog InterfaceFRONTEND
This Angular-based frontend displays the Juice Shop product catalog, shopping basket, user profile, admin panel, and challenge scoreboard. It includes a hacking instructor system that provides interactive tutorials teaching users how to exploit the intentional vulnerabilities. It uses Angular Material for UI components, Socket.io for real-time updates, and implements deliberately insecure patterns for educational demonstration.
Juice Shop OrdersAPI
This API handles user logins, product searches, shopping basket operations, file uploads, order processing, payment methods, feedback submission, and admin functions. It's deliberately built with security holes like JWT forgery acceptance, SQL injection vulnerabilities, and weak authentication checks to teach developers what insecure code looks like.
AuthAUTH
DatabaseDATABASE
ConfigCONFIG
Security Training ComponentsLIBRARIES
This app uses 167+ libraries including Express (web server framework), Angular (frontend framework), Sequelize (database communication), Socket.io (real-time features), jsonwebtoken and express-jwt (authentication—deliberately ancient versions), sanitize-html (input cleaning—deliberately broken version), multer (file uploads), and pdfkit (PDF generation). Many are intentionally outdated to demonstrate specific vulnerabilities.
Files reviewed: 25 of 1171
The free analysis covers the 25 files most likely to carry risk. Want more files reviewed, plus exact dependency package names and fixes? See the deep scan.
Verified Findings
Show all 30 ↓
Private Key File — infrastructure/terraform/networking.tf line 171
A private key is stored in your code. This is the digital equivalent of committing your house keys.
Private Key File — lib/insecurity.ts line 21
A private key is stored in your code. This is the digital equivalent of committing your house keys.
Private Key File — terraform/networking.tf line 171
A private key is stored in your code. This is the digital equivalent of committing your house keys.
JSON Web Token — frontend/src/app/app.guard.spec.ts line 46
A login token is written into your code. These are meant to be short-lived, not stored.
JSON Web Token — frontend/src/app/last-login-ip/last-login-ip.component.spec.ts line 72
A login token is written into your code. These are meant to be short-lived, not stored.
JSON Web Token — frontend/src/app/last-login-ip/last-login-ip.component.spec.ts line 78
A login token is written into your code. These are meant to be short-lived, not stored.
Generic Hardcoded Secret — test/api/2fa.test.ts line 42
Something that looks like a password or key is typed directly into your code.
Generic Hardcoded Secret — test/api/2fa.test.ts line 66
Something that looks like a password or key is typed directly into your code.
Generic Hardcoded Secret — test/api/2fa.test.ts line 85
Something that looks like a password or key is typed directly into your code.
Generic Hardcoded Secret — test/api/2fa.test.ts line 104
Something that looks like a password or key is typed directly into your code.
Generic Hardcoded Secret — test/api/2fa.test.ts line 123
Something that looks like a password or key is typed directly into your code.
Generic Hardcoded Secret — test/api/2fa.test.ts line 142
Something that looks like a password or key is typed directly into your code.
Generic Hardcoded Secret — test/api/2fa.test.ts line 182
Something that looks like a password or key is typed directly into your code.
Generic Hardcoded Secret — test/api/2fa.test.ts line 214
Something that looks like a password or key is typed directly into your code.
Generic Hardcoded Secret — test/api/2fa.test.ts line 240
Something that looks like a password or key is typed directly into your code.
Generic Hardcoded Secret — test/api/2fa.test.ts line 257
Something that looks like a password or key is typed directly into your code.
Generic Hardcoded Secret — test/api/2fa.test.ts line 266
Something that looks like a password or key is typed directly into your code.
Generic Hardcoded Secret — test/api/2fa.test.ts line 292
Something that looks like a password or key is typed directly into your code.
Generic Hardcoded Secret — test/api/2fa.test.ts line 317
Something that looks like a password or key is typed directly into your code.
Generic Hardcoded Secret — test/api/2fa.test.ts line 352
Something that looks like a password or key is typed directly into your code.
Generic Hardcoded Secret — test/api/2fa.test.ts line 379
Something that looks like a password or key is typed directly into your code.
Generic Hardcoded Secret — test/api/2fa.test.ts line 412
Something that looks like a password or key is typed directly into your code.
JSON Web Token — test/api/user.test.ts line 280
A login token is written into your code. These are meant to be short-lived, not stored.
JSON Web Token — test/cypress/e2e/forgedJwt.spec.ts line 22
A login token is written into your code. These are meant to be short-lived, not stored.
JSON Web Token — test/cypress/e2e/forgedJwt.spec.ts line 38
A login token is written into your code. These are meant to be short-lived, not stored.
Generic Hardcoded Secret — test/cypress/e2e/totpSetup.spec.ts line 7
Something that looks like a password or key is typed directly into your code.
JSON Web Token — test/server/currentUser.unit.test.ts line 31
A login token is written into your code. These are meant to be short-lived, not stored.
JSON Web Token — test/server/currentUser.unit.test.ts line 34
A login token is written into your code. These are meant to be short-lived, not stored.
JSON Web Token — test/server/verify.unit.test.ts line 308
A login token is written into your code. These are meant to be short-lived, not stored.
JSON Web Token — test/server/verify.unit.test.ts line 316
A login token is written into your code. These are meant to be short-lived, not stored.
Check it yourself · about 5 minutes
Is a secret saved in your GitHub repository?
  1. Open your repository on GitHub.
  2. Open the file and line that Verilay named in this report.
  3. Decide whether the value is real, or an example or placeholder.
✓ It's an example, a placeholder, or a value that is meant to be public.
⚠ It's a real key. Make a new key in the service's dashboard and switch to it. Deleting the file isn't enough, because the old key stays in the repository's history.
Never paste a real key into a chat, an email or a website while checking.
Is that login token real?
  1. Open the file Verilay named, on GitHub.
  2. Decide whether the value is a test or example, or came from a real logged-in account.
✓ It's a test or example value.
⚠ It's from a real account. Remove it, sign that account out everywhere and change its password.
Never paste a real token into a chat, an email or a website while checking.
Only try this on your own app, with test accounts. Never on someone else's app.
Worth A Look
A pointer, not a confirmed problem. It does not change your grade.
Worth a look: An old hash (MD5 or SHA-1) is used, and this app also handles passwords
lib/insecurity.ts line 41 hashes with MD5 or SHA-1, which are broken for protecting passwords. The app also appears to hash or check passwords (models/user.ts line 73). Verilay can't tell whether the two are connected, so this is a pointer to check, not a confirmed problem.
What to do: Check what that hash is used for. If it protects passwords or login tokens, replace it with bcrypt, scrypt or argon2. If it is only a cache label, you can ignore this.
Check it yourself · about 5 minutes
What is that old hash used for?
  1. Open the file Verilay named, on GitHub, and read the few lines around that hash.
  2. Ask your AI builder: "Is this hash used for passwords or login tokens anywhere? Review and advise, don't change anything yet."
  3. Read its answer.
✓ It's only used for labels, such as cache keys or file names.
⚠ It protects passwords or login tokens. Move to bcrypt, scrypt or argon2.
If you use a login service such as Supabase Auth or Clerk, your app may not store passwords at all.
Only try this on your own app, with test accounts. Never on someone else's app.
37 dependencies have known vulnerabilities
Checked 167 packages you installed directly against OSV.dev.
The packages these depend on were not checked, because no full package list was found in the files Verilay read.
Two ways to fix this: open fix 4, “Known Vulnerabilities in 37 Dependencies”, under Fix these first near the top of this page, and give its prompt to your AI builder, or skip the investigation: the deep scan hands you the exact package names, versions, and fixes already found.
Check it yourself · about 3 minutes
Do your packages have known problems?
  1. On GitHub, open your repository and click Security, then Dependabot alerts. It's free; if it's switched off, it can be turned on under Settings, then Security.
  2. Or ask a developer friend to run the free command npm audit in your project folder.
✓ No high or critical alerts.
⚠ Alerts are listed. Update the packages they name, then scan again.
Updating a package can break an app, so update one at a time and test after each.
Only try this on your own app, with test accounts. Never on someone else's app.
🤖 Confused about a finding?
Ask AI to explain any issue in plain English and suggest how to fix it.
Ask AI about this report →
Layer Analysis
Authno issues seen
Auth layer analysis.
No issues found — Layer appears healthy
Configno issues seen
Config layer analysis.
No issues found — Layer appears healthy
Databaseno issues seen
Database layer analysis.
No issues found — Layer appears healthy
APIcritical
💡 Think of this app as a deliberately sabotaged security training facility. The API is like the security checkpoint at the entrance—but in this training facility, the checkpoint has intentional flaws (broken ID scanners, guards who accept fake badges, unlocked back doors) so security students can learn how real attackers exploit weaknesses. Every flaw you find is a lesson about what NOT to do in a real business.
Multiple critical authentication bypasses, SQL injection vectors, and intentionally vulnerable endpoints expose complete application control to unauthenticated attackers.
Authentication Completely Bypassable via JWT Forgery — server.ts lines 348-360 and routes/verify.ts lines 60-85 allow unsigned JWT tokens (algorithm 'none') and forged HS256 tokens. The jwtChallenges() middleware detects but does not block these attacks—it only marks challenges as solved. Any attacker can forge admin tokens and access all protected endpoints.
SQL Injection in Product Search Endpoint — routes/search.ts (referenced in server.ts line 625) allows unfiltered user input directly into database queries. The searchProducts() function is designed to be vulnerable to SQL injection as part of the intentional security training challenges.
Unrestricted File Upload Allows Remote Code Execution — server.ts lines 502-506 and routes/fileUpload.ts accept file uploads with minimal validation. The handleZipFileUpload and handleXmlUpload functions process uploaded content without proper sanitization, allowing malicious file execution.
Rate Limiting Easily Bypassed via Header Spoofing — server.ts lines 536-541 implement rate limiting on password reset, but line 540 uses X-Forwarded-For header as the key generator. Attackers can spoof this header to bypass rate limits entirely.
💡 Key concept: This is an intentionally vulnerable application built for security training. Every "critical" finding above is a deliberate teaching example. The most important concept is understanding that these patterns (accepting unsigned JWTs, allowing SQL injection, trusting user input) represent exactly what you must NEVER do in a real production application. This app is a "what not to do" reference guide.
Frontendwarning
💡 Think of the frontend as the training simulator cockpit in a flight school. It looks and feels like a real airplane cockpit, but it's specifically designed with simulated failures and emergency scenarios so student pilots can practice handling problems safely. This frontend similarly has intentional flaws (like XSS vulnerabilities) so security students can practice finding and exploiting them without harming a real business.
Angular frontend implements intentionally vulnerable XSS vectors, DOM manipulation flaws, and client-side security bypasses for educational purposes.
DOM-Based XSS via Unescaped User Input — The frontend (referenced in frontend/src/index.html and hacking-instructor/index.ts) renders user-controlled content without sanitization in multiple locations. The snarkdown markdown parser (hacking-instructor/index.ts line 6) converts user input to HTML without escaping, and innerHTML assignments (line 82) directly inject this content into the page.
Client-Side Security Controls Can Be Bypassed — frontend/src/hacking-instructor/index.ts implements tutorial hints and challenge verification in client-side JavaScript. The hasInstructions() function (line 103) and challenge completion logic run entirely in the browser where users can modify or disable them.
💡 Key concept: This is a deliberately vulnerable training interface. The XSS flaws, client-side bypasses, and insecure patterns are intentional teaching tools. The key concept is recognizing that user input must always be sanitized before display, and security decisions must happen server-side, never in the browser where users control the code.
Librariescritical
💡 Think of this app's libraries as the deliberately faulty training equipment in a firefighter academy. Just like firefighters practice with controlled fires and malfunctioning equipment to learn what can go wrong, this app uses intentionally outdated and vulnerable libraries (like 10-year-old security components) so security students can practice finding and exploiting known flaws in a safe environment. Real businesses would never use this equipment—it's purely for learning what NOT to do.
167 directly installed dependencies checked against OSV.dev database—found 37 known vulnerabilities (3 serious, 34 less severe) affecting this app's security posture.
Known Vulnerable Dependencies Detected — Dependency vulnerability scan checked 167 packages installed directly by this app (listed in package.json and frontend/package.json). Found 37 known security vulnerabilities: 3 serious (high/critical severity) and 34 less severe (medium/low severity). This count represents only the packages you installed directly—the packages these depend on (transitive dependencies) were not checked because no complete package list was found in the files reviewed.
Intentionally Outdated Vulnerable Packages for Training — package.json lines 56-58 and 67 explicitly use ancient, vulnerable versions: express-jwt 0.1.3 (2013), jsonwebtoken 0.4.0 (2013), sanitize-html 1.4.2 (2015). routes/verify.ts lines 127-145 specifically check for these versions in user feedback to mark security challenges as solved.
💡 Key concept: This app deliberately uses vulnerable library versions as teaching examples. The critical concept is that in real applications, you must keep libraries updated and monitor for security advisories. One outdated library can compromise an entire application. The 37 vulnerabilities found here are intentional lessons, but in production, even one could be catastrophic.
Closest open-source match
A project that appears to do a similar job. Category: Security training application. Worth a look before you build more of the same, or to see what you could learn from or reuse.
aligorithm/Zero-Health  updated 7 months ago · MIT · JavaScript
Zero trust. Zero security. Total exposure. A deliberately vulnerable health tech platform with AI Chatbot for learning about application security and ethical hacking. It contains vulnerabilities from OWASP top 10 Web, AP
Similar: A deliberately vulnerable application designed for learning application security and ethical hacking with known vulnerabilities.
3 more similar projects are listed in the deep scan.
Tip: These matches come from free, open-source projects on GitHub only. Commercial and closed-source apps are not included, so few or no matches does not mean nothing similar exists. Check a project's licence before reusing any of its code.
Scores may vary slightly between runs as findings are AI-generated. A meaningful improvement (e.g. C → B) after applying fixes indicates real progress.

AI disclaimer: Analysis is generated by Claude AI and may contain false positives or miss issues. Always verify findings with your AI builder before making changes. This is not a professional security audit. See full terms.