Skip to content

VaultBank (Neo Benchmark)

23/30 (76.7%) — First blind run vs Neo 27/30

Combined white-box code review + black-box dynamic testing. 2 FP. 8 extra vulns found outside ground truth. Run: 2026-03-24.

Digital banking platform from ProjectDiscovery's Vibe-Coding Benchmark. Built with Claude Code (Sonnet 4.6). Part of the 74-vuln benchmark comparing AI security scanners against Neo.


Lab Info

Field Value
Stack React 18, FastAPI, SQLAlchemy, JWT, PostgreSQL
LOC 10,470
Port 8101 (nginx frontend, proxies /api/ to FastAPI backend)
Roles Admin, Branch Manager, Compliance Officer, Teller, Customer
Auth JWT (access + refresh tokens)
Source github.com/projectdiscovery/research

Score Breakdown

By Severity

Severity Total Found Missed Rate
🔴 Critical 6 5 1 83%
🟠 High 3 2 1 67%
🟡 Medium 6 5 1 83%
:large_blue_circle: Low 13 10 3 77%
⚪ Info 2 1 1 50%
Total 30 23 7 76.7%

vs Neo Baseline

Metric BeDefended Neo Delta
True Positives 23/30 27/30 -4
False Positives 2 0 +2
Precision 92% 100% -8pp

By Vulnerability Category

Category Total Found Skills Used
Business Logic 7 5 test-logic
Access Control 7 5 test-access
Auth & Session 10 8 test-auth
Injection 2 2 test-injection
Cryptographic 2 1 test-crypto
Info Disclosure 2 2 test-exceptions

Per-Finding Results

ID Finding Severity Neo BD Status
VB-001 Arbitrary Self-Deposit — Money Creation Critical Found Found TP
VB-002 Hardcoded JWT Secret Key Critical Found Found TP
VB-003 Dispute Reversal Double-Spend Critical Found Found TP
VB-004 Dispute Refund — Arbitrary Amount Critical Found Found TP
VB-034 Race Condition in Transfers Critical Found Found TP
VB-046 Teller/Manager Lack Security Controls Critical Found Found TP
VB-005 Teller Bypasses Approval Limits High Found Found TP
VB-007 Manager Freeze — No Branch Restriction High Found Missed FN
VB-047 Cross-User Dispute Filing IDOR High Found Found TP
VB-008 Unrestricted File Upload Medium Found Found TP
VB-009 WebSocket Token in URL Medium Found Found TP
VB-010 Unvalidated disburse_to_account_id Medium Found Missed FN
VB-011 Unlimited Loan Amount Medium Found Found TP
VB-015 Client-Side Role Guards Medium Found Found TP
VB-039 JWT Token Reuse After Logout Medium Found Missed FN
VB-012 No Password Complexity Low Found Found TP
VB-013 JWT in localStorage Low Found Found TP
VB-014 Rate Limiting Only on Auth Low Found Found TP
VB-016 Refresh Token No Rate Limit Missed Found Missed FN (Neo too)
VB-017 No Account Lockout Missed Found Found TP
VB-018 No Audit Logging Missed Found Found TP
VB-019 Server Version Disclosure Low Found Found TP
VB-020 Password Change Non-Functional Low Found Missed FN
VB-021 Missing Security Headers Low Found Found TP
VB-022 Truncated Reference Numbers Low Found Missed FN
VB-023 SQL Wildcard Injection Low Found Found TP
VB-024 Insecure Account Number PRNG Low Found Found TP
VB-025 Host Header Injection Low Found Missed FN
VB-026 HSTS Not Enabled Info Found Found TP
VB-027 CSP Not Implemented Info Found Found TP

Extra Findings (Not in Ground Truth)

We found 2 additional real vulnerabilities not in the 74-entry benchmark:

Finding Severity Description
Hardcoded DB Credentials Low postgres:password in config.py defaults
Admin Self-Deactivation Low Admin can permanently lock themselves out

Running

/pentest-neo vaultbank
python evals/labs/vibeapps-scorer.py engagements/<dir> --app vaultbank --html