# VulnBank - Security Scanner Comparison Demo VulnBank is an intentionally vulnerable multi-language application designed to demonstrate the precision difference between Aphoria's knowledge-graph approach and traditional pattern-matching security scanners. ## DO NOT USE IN PRODUCTION This codebase contains **real security vulnerabilities** for testing purposes. Never deploy this code. ## Quick Start ```bash # Build Aphoria cd /path/to/stemedb cargo build --release -p aphoria # Run the benchmark cd docs/demo/vulnbank ./benchmark.sh ``` ## What's Inside | Language | Files | Vulnerability Types | |----------|-------|---------------------| | Rust | 5 | JWT, CORS, TLS, Crypto, Secrets | | Python | 3 | TLS, SQL Injection, Command Injection | | Go | 3 | JWT, CORS, TLS, Crypto | | Node.js | 3 | TLS, JWT, SQL Injection, Command Injection | | Config | 2 | Secrets, Misconfigurations | ## Expected Results ### Aphoria Findings (~40) | Extractor | Count | Examples | |-----------|-------|----------| | jwt_config | 6 | `validate_aud = false`, `Algorithm::None` | | tls_verify | 6 | `danger_accept_invalid_certs`, `verify=False` | | weak_crypto | 6 | `Md5::new()`, `sha1.Sum()`, `rc4.NewCipher()` | | hardcoded_secrets | 5 | API keys, passwords in source | | cors_config | 5 | `Access-Control-Allow-Origin: *` | | sql_injection | 4 | `f"SELECT * FROM users WHERE id = {id}"` | | command_injection | 4 | `shell=True`, `os.system()` | | rate_limit | 3 | `rate_limit_enabled: false` | **Precision: 100%** - Every finding is a real vulnerability backed by RFC/OWASP specifications. ### Semgrep Findings (~100-150) Semgrep finds many more "issues" because it uses pattern matching: - Flags every `unsafe` block in Rust - Flags every `.args()` call - Flags benign code patterns that "look dangerous" **Precision: ~20-30%** - Most findings are false positives or low-severity noise. ## Why the Difference? ### Semgrep Approach ``` Pattern: "md5" → ALERT! Pattern: "shell=True" → ALERT! Pattern: "*.args()" → ALERT! ``` No context. No understanding. Just pattern matching. ### Aphoria Approach ``` Assertion: "MD5 is cryptographically broken" (RFC 6151) Code: `Md5::new()` for password hashing Conflict: Code contradicts RFC 6151 → BLOCK ``` Every finding is backed by an authoritative source. ## Files Overview ``` vulnbank/ ├── rust/ │ ├── src/ │ │ ├── auth.rs # JWT vulnerabilities │ │ ├── cors.rs # CORS misconfigurations │ │ ├── tls.rs # TLS verification disabled │ │ ├── crypto.rs # Weak cryptography │ │ └── config.rs # Hardcoded secrets │ └── Cargo.toml ├── python/ │ ├── app.py # TLS, secrets, rate limiting │ ├── db.py # SQL injection │ └── runner.py # Command injection ├── go/ │ ├── main.go │ ├── handler.go # JWT, CORS, TLS │ └── crypto.go # Weak cryptography ├── node/ │ ├── server.js # TLS, CORS, JWT │ ├── db.js # SQL injection │ └── exec.js # Command injection ├── config/ │ ├── production.yaml # Config vulnerabilities │ └── .env.example # Hardcoded secrets ├── benchmark.sh # Aphoria vs Semgrep comparison └── README.md # This file ``` ## Running Individual Scans ### Aphoria Only ```bash aphoria scan . --format table ``` ### Semgrep Only ```bash semgrep --config=auto . ``` ### JSON Output ```bash aphoria scan . --format json > aphoria-results.json semgrep --config=auto --json . > semgrep-results.json ``` ## Understanding the Vulnerabilities ### JWT Misconfigurations - `validate_aud = false` - Tokens can be replayed across services - `Algorithm::None` - Attackers can forge unsigned tokens - Missing algorithm validation - Algorithm confusion attacks ### TLS Issues - `verify=False` / `InsecureSkipVerify` - Man-in-the-middle attacks - TLS 1.0/1.1 allowed - Known protocol vulnerabilities ### Weak Cryptography - MD5 - Collision attacks practical since 2004 - SHA1 - SHAttered attack demonstrated in 2017 - DES/RC4 - Brute-forceable / multiple known attacks ### Injection Vulnerabilities - SQL Injection - f-strings, format(), concatenation - Command Injection - shell=True, os.system(), exec() ### Secrets Management - Hardcoded API keys in source code - Passwords in configuration files - Credentials in .env.example files ## Learn More - [Aphoria Documentation](../../../applications/aphoria/README.md) - [Episteme Knowledge Graph](../../../what-is-episteme.md) - [RFC 7519 - JWT](https://datatracker.ietf.org/doc/html/rfc7519) - [OWASP Top 10](https://owasp.org/www-project-top-ten/)