| ID | Severity | Agent | Finding | Location | Status |
|---|---|---|---|---|---|
| SEC-001 | CRITICAL | 🔒 Security |
SQL Injection — login endpoint
A03:2021 Injection · username/password concatenated into SQL
|
users.js:15 | Auto-Fixed |
| SEC-002 | CRITICAL | 🔒 Security |
Hardcoded JWT_SECRET in source code
A02:2021 Cryptographic Failure · string literal secret, not env var
|
users.js:7 | Auto-Fixed |
| SEC-003 | CRITICAL | 🔒 Security |
Hardcoded DB_PASSWORD logged to console
A09:2021 Logging Failure · production secret in console.log
|
index.js:37 | Auto-Fixed |
| SEC-004 | HIGH | 🔒 Security |
Path Traversal — user-controlled file path
A01:2021 Broken Access · req.query.file passed to sendFile()
|
products.js:9 | Manual |
| SEC-005 | HIGH | 🔒 Security |
IDOR — no ownership check on orders
A01:2021 Broken Access · any user can read any order ID
|
orders.js:7 | Manual |
| SEC-006 | HIGH | 🔒 Security |
JWT token issued with no expiry
A07:2021 Auth Failure · jwt.sign() missing expiresIn
|
users.js:27 | Auto-Fixed |
| QUA-001 | HIGH | 🔍 Quality |
Cyclomatic complexity 14 in GET /products
Threshold: 10 · Extract filter builders into helper functions
|
products.js:17 | Manual |
| QUA-002 | MEDIUM | 🔍 Quality |
Dead code — calculateDiscount() never called
Orders.js function defined but 0 references
|
orders.js:38 | Auto-Fixed |
| QUA-003 | MEDIUM | 🔍 Quality |
Error responses expose database error details
3 routes send err.message to client
|
users.js, products.js, orders.js | Auto-Fixed |
| TST-001 | CRITICAL | 🧪 Tests |
No SQL injection rejection test
Critical: login route exploitable, zero security test coverage
|
tests/ (missing) | Auto-Generated |
| TST-002 | CRITICAL | 🧪 Tests |
Overall test coverage: 12%
4 of 5 source files have 0% coverage · products.js, orders.js untested
|
src/ (all routes) | Manual |