Scanner results

vulnlab.dev · what off-the-shelf scanners caught

Each lab on vulnlab.dev declares its ground truth at /meta/<slug> — what CWE applies, what sinks are involved, and what payload would prove it. This page runs that ground truth against output from real scanners, lab by lab. Results are static snapshots; numbers update when we re-run the scanners against the deployed labs.

Tools currently profiled:

Raw outputs live in scanner-results/ in the repo. Totals across the run: 19 Semgrep findings, 1 Nuclei findings.

Server-Side Request Forgery Semgrep 10/12 · Nuclei 0/12

ssrf.vulnlab.dev

Lab Subtype Semgrep Nuclei Detail
basic unvalidated-url-fetch ✓ ✗
semgrep: python.flask.security.injection.ssrf-requests.ssrf-requests
blocklist substring-blocklist-bypass ✓ ✗
semgrep: python.lang.security.audit.dynamic-urllib-use-detected.dynamic-urllib-use-detected
allowlist substring-allowlist-bypass ✓ ✗
semgrep: python.flask.security.injection.ssrf-requests.ssrf-requests
parser url-parser-disagreement ✓ ✗
semgrep: python.flask.security.injection.ssrf-requests.ssrf-requests
redirect follow-redirect-on-allowlisted-host ✓ ✗
semgrep: python.flask.security.injection.ssrf-requests.ssrf-requests
scheme unrestricted-url-scheme ✓ ✗
semgrep: python.lang.security.audit.dynamic-urllib-use-detected.dynamic-urllib-use-detected
blind blind-no-response-feedback ✗ ✗
no scanner caught this
webhook semi-blind-header-leak ✓ ✗
semgrep: python.flask.security.injection.ssrf-requests.ssrf-requests
metadata cloud-metadata-aws-imdsv1 ✓ ✗
semgrep: python.flask.security.injection.ssrf-requests.ssrf-requests
metadata-gcp cloud-metadata-gcp ✓ ✗
semgrep: python.flask.security.injection.ssrf-requests.ssrf-requests
metadata-azure cloud-metadata-azure ✓ ✗
semgrep: python.flask.security.injection.ssrf-requests.ssrf-requests
gopher gopher-protocol-smuggling ✗ ✗
no scanner caught this

Cross-Site Scripting Semgrep 0/5 · Nuclei 0/5

xss.vulnlab.dev

Lab Subtype Semgrep Nuclei Detail
reflected reflected-html-context ✗ ✗
no scanner caught this
stored stored-persistent ✗ ✗
no scanner caught this
dom dom-based ✗ ✗
no scanner caught this
csp-bypass csp-bypass-via-same-origin-jsonp ✗ ✗
no scanner caught this
mxss mutation-xss-via-innerhtml-reparse ✗ ✗
no scanner caught this

SQL Injection Semgrep 3/5 · Nuclei 1/5

sqli.vulnlab.dev

Lab Subtype Semgrep Nuclei Detail
union in-band-union-based ✓ ✓
semgrep: python.django.security.injection.sql.sql-injection-using-db-cursor-execute.sql-injection-db-cursor-execute, python.flask.security.injection.tainted-sql-string.tainted-sql-string
nuclei: sqli-error-based
error error-based ✗ ✗
no scanner caught this
blind-bool blind-boolean ✓ ✗
semgrep: python.django.security.injection.sql.sql-injection-using-db-cursor-execute.sql-injection-db-cursor-execute, python.flask.security.injection.tainted-sql-string.tainted-sql-string
blind-time blind-time-based ✓ ✗
semgrep: python.django.security.injection.sql.sql-injection-using-db-cursor-execute.sql-injection-db-cursor-execute, python.flask.security.injection.tainted-sql-string.tainted-sql-string
second-order second-order-stored-input ✗ ✗
no scanner caught this

Server-Side Template Injection Semgrep 3/5 · Nuclei 0/5

ssti.vulnlab.dev

Lab Subtype Semgrep Nuclei Detail
basic jinja2-render-template-string ✓ ✗
semgrep: python.flask.security.audit.render-template-string.render-template-string
format python-str-format-attribute-walk ✗ ✗
no scanner caught this
filtered jinja2-ssti-substring-blocklist-bypass ✓ ✗
semgrep: python.flask.security.audit.render-template-string.render-template-string
sandboxed jinja2-sandbox-bypass-via-exposed-global ✗ ✗
no scanner caught this
second-order second-order-stored-template ✓ ✗
semgrep: python.flask.security.audit.render-template-string.render-template-string

Reading the table