Scanner deep-dive
Rowan by Hedgerow ↗
Rule-Based SAST · 0.2.0 · scored on 64/66 Python repositories. Strict scoring (unfinished repos counted as misses).
23.1
F3 (strict)
22.7
F2 (strict)
23.4%
Recall (strict)
20.4%
Precision
64/66
Repos scored
—
Model
Free
Total cost
—
Avg latency
§
Per-repository breakdown
Each bar shows true positives, false positives, and misses on one repository; bar length is proportional to that repo's labeled vulnerabilities. Ranked by F2.
| Repository | TP | FP | FN | Recall % | F2 |
|---|---|---|---|---|---|
| intentionally-vulnerable-python-application | 4 | 7 | 3 | 57.1 | 51.3 |
| pythonssti | 1 | 1 | 1 | 50.0 | 50.0 |
| vc-codex-high-seeded-v2-logistics-dispatch-fastapi | 12 | 22 | 17 | 41.4 | 40.0 |
| vc-codex-high-seeded-v2-marketplace-commerce-fastapi | 10 | 17 | 15 | 40.0 | 39.4 |
| insecure-web | 3 | 3 | 6 | 33.3 | 35.7 |
| vc-codex-high-seeded-v2-fintech-lending-fastapi | 12 | 40 | 17 | 41.4 | 35.7 |
| vc-kimi-code-seeded-v2-fintech-lending-fastapi | 11 | 20 | 22 | 33.3 | 33.7 |
| dsvw | 8 | 4 | 19 | 29.6 | 33.3 |
| vc-codex-seeded-v2-property-management-fastapi | 11 | 30 | 20 | 35.5 | 33.3 |
| vc-kimi-code-seeded-v2-logistics-dispatch-fastapi | 10 | 18 | 21 | 32.3 | 32.9 |
| vc-codex-high-seeded-v2-property-management-fastapi | 8 | 11 | 18 | 30.8 | 32.5 |
| pygoat | 30 | 122 | 48 | 38.5 | 32.3 |
| dvblab | 7 | 17 | 15 | 31.8 | 31.2 |
| vc-codex-seeded-v2-logistics-dispatch-fastapi | 10 | 32 | 20 | 33.3 | 30.9 |
| vc-claude-code-seeded-v2-property-management-fastapi | 11 | 42 | 22 | 33.3 | 29.7 |
| vc-kimi-code-seeded-v2-support-desk-fastapi | 8 | 15 | 20 | 28.6 | 29.6 |
| vc-kimi-code-seeded-v2-property-management-fastapi | 8 | 10 | 22 | 26.7 | 29.0 |
| vc-codex-seeded-v2-fintech-lending-fastapi | 10 | 22 | 27 | 27.0 | 27.8 |
| vc-claude-code-seeded-v2-fintech-lending-fastapi | 8 | 21 | 21 | 27.6 | 27.6 |
| vulnerable-flask-app | 6 | 21 | 15 | 28.6 | 27.0 |
| owasp-web-playground | 8 | 34 | 20 | 28.6 | 26.0 |
| vc-codex-seeded-v2-marketplace-commerce-fastapi | 7 | 12 | 22 | 24.1 | 25.9 |
| vulpy | 14 | 38 | 43 | 24.6 | 25.0 |
| lets-be-bad-guys | 7 | 39 | 17 | 29.2 | 24.6 |
| vc-codex-high-seeded-v2-hr-payroll-django | 7 | 36 | 18 | 28.0 | 24.5 |
| djangoat | 12 | 30 | 40 | 23.1 | 24.0 |
| vc-codex-seeded-v2-support-desk-fastapi | 7 | 20 | 23 | 23.3 | 23.8 |
| vc-claude-code-seeded-v2-legal-case-django | 8 | 37 | 23 | 25.8 | 23.7 |
| vc-codex-high-seeded-v2-healthcare-clinic-django | 7 | 38 | 19 | 26.9 | 23.5 |
| vc-claude-code-seeded-v2-hr-payroll-django | 8 | 55 | 19 | 29.6 | 23.4 |
| damn-vulnerable-flask-application | 3 | 6 | 11 | 21.4 | 23.1 |
| vfapi | 2 | 6 | 7 | 22.2 | 22.7 |
| vc-claude-code-seeded-v2-support-desk-fastapi | 8 | 33 | 26 | 23.5 | 22.6 |
| vc-codex-seeded-v2-hr-payroll-django | 8 | 22 | 31 | 20.5 | 21.5 |
| vc-codex-seeded-v2-healthcare-clinic-django | 8 | 17 | 33 | 19.5 | 21.2 |
| vc-codex-high-seeded-v2-crm-saas-django | 5 | 17 | 20 | 20.0 | 20.5 |
| dsvpwa | 6 | 14 | 26 | 18.8 | 20.3 |
| vc-claude-code-seeded-v2-crm-saas-django | 6 | 32 | 22 | 21.4 | 20.0 |
| vc-claude-code-seeded-v2-healthcare-clinic-django | 7 | 52 | 22 | 24.1 | 20.0 |
| vc-codex-seeded-v2-education-lms-django | 7 | 28 | 28 | 20.0 | 20.0 |
| vc-codex-high-seeded-v2-support-desk-fastapi | 6 | 34 | 22 | 21.4 | 19.7 |
| threatbyte | 5 | 20 | 21 | 19.2 | 19.4 |
| vc-claude-code-seeded-v2-logistics-dispatch-fastapi | 6 | 20 | 27 | 18.2 | 19.0 |
| vc-codex-high-seeded-v2-legal-case-django | 5 | 28 | 20 | 20.0 | 18.8 |
| vc-codex-seeded-v2-legal-case-django | 6 | 22 | 27 | 18.2 | 18.8 |
| vulnpy | 13 | 16 | 67 | 16.2 | 18.6 |
| extremely-vulnerable-flask-app | 5 | 2 | 27 | 15.6 | 18.5 |
| vc-kimi-code-seeded-v2-legal-case-django | 6 | 52 | 20 | 23.1 | 18.5 |
| vc-codex-seeded-v2-crm-saas-django | 6 | 23 | 28 | 17.6 | 18.2 |
| vc-kimi-code-seeded-v2-education-lms-django | 6 | 47 | 22 | 21.4 | 18.2 |
| vc-codex-high-seeded-v2-education-lms-django | 5 | 34 | 20 | 20.0 | 18.0 |
| vc-kimi-code-seeded-v2-crm-saas-django | 5 | 38 | 22 | 18.5 | 16.6 |
| vulnerable-python-apps | 3 | 8 | 19 | 13.6 | 15.2 |
| vc-kimi-code-seeded-v2-marketplace-commerce-fastapi | 6 | 91 | 21 | 22.2 | 14.6 |
| python-insecure-app | 1 | 2 | 7 | 12.5 | 14.3 |
| vc-claude-code-seeded-v2-education-lms-django | 5 | 43 | 27 | 15.6 | 14.2 |
| dvpwa | 3 | 14 | 20 | 13.0 | 13.8 |
| vc-kimi-code-seeded-v2-hr-payroll-django | 5 | 65 | 24 | 17.2 | 13.4 |
| vc-claude-code-seeded-v2-marketplace-commerce-fastapi | 4 | 28 | 28 | 12.5 | 12.5 |
| flask-xss | 3 | 6 | 27 | 10.0 | 11.6 |
| vc-kimi-code-seeded-v2-healthcare-clinic-django | 4 | 48 | 26 | 13.3 | 11.6 |
| vulnerable-tornado-app | 1 | 5 | 13 | 7.1 | 8.1 |
| vampi | 1 | 5 | 14 | 6.7 | 7.6 |
| damn-vulnerable-graphql-application | 2 | 45 | 34 | 5.6 | 5.2 |
§
Detection by severity
| Severity | TP | FP | FN | Recall % |
|---|---|---|---|---|
| Critical | 118 | 2 | 31 | 79.2 |
| High | 145 | 20 | 593 | 19.6 |
| Medium | 176 | 4 | 720 | 19.6 |
| Low | 6 | 0 | 78 | 7.1 |
§
Detection by vulnerability class
| CWE family | TP | FP | FN | Recall % |
|---|---|---|---|---|
| Code Injection / RFI | 32 | 0 | 2 | 94.1 |
| Insecure Deserialization | 35 | 1 | 3 | 92.1 |
| Command / OS Injection | 43 | 1 | 5 | 89.6 |
| XML External Entities | 32 | 3 | 5 | 86.5 |
| Security Misconfiguration | 71 | 0 | 41 | 63.4 |
| Server-Side Request Forgery | 18 | 2 | 21 | 46.2 |
| SQL Injection | 23 | 3 | 53 | 30.3 |
| Other | 153 | 1 | 715 | 17.6 |
| Cross-Site Scripting | 18 | 1 | 88 | 17.0 |
| Broken Access Control / IDOR | 5 | 7 | 78 | 6.0 |
| Sensitive Data Exposure | 9 | 0 | 142 | 6.0 |
| Path Traversal | 2 | 7 | 38 | 5.0 |
| Missing Authentication / Authorization | 3 | 0 | 78 | 3.7 |
| Open Redirect | 1 | 0 | 39 | 2.5 |
| Hardcoded Credentials | 0 | 0 | 65 | 0.0 |
| Denial of Service | 0 | 0 | 44 | 0.0 |
| HTTP Header Injection | 0 | 0 | 1 | 0.0 |
| XPath Injection | 0 | 0 | 4 | 0.0 |
§
Cost
Free
Total cost
0
Lines of code scanned
0
Successful runs