{
  "bench": "GEN-01b",
  "target": "http://127.0.0.1:4000/",
  "scan_ok": true,
  "elapsed_s": 681.7,
  "findings_total": 14,
  "confidence_counts": {
    "CONFIRMED": 1,
    "EXPLOITED": 0,
    "OBSERVED": 1,
    "HIGH": 3,
    "MEDIUM": 7,
    "LOW": 0,
    "INFO": 0,
    "OTHER": 2
  },
  "severity_counts": {
    "CRITICAL": 1,
    "HIGH": 2,
    "MEDIUM": 4,
    "LOW": 7,
    "INFO": 0,
    "OTHER": 0
  },
  "coverage_pct": 100,
  "phases": {
    "coverage_pct": 100,
    "phases_skipped": [
      "ssti: stack_nodejs_no_template_engine"
    ],
    "phase_outcomes": {},
    "phase_timeline": [
      {
        "name": "fingerprint",
        "start": "2026-07-25T12:51:15.150297+00:00",
        "end": "2026-07-25T12:51:15.155655+00:00",
        "duration_ms": 5,
        "status": "done",
        "findings_count": 0,
        "message": "SPA=no \u00b7 CDN= \u00b7 IP=127.0.0.1"
      },
      {
        "name": "memory",
        "start": "2026-07-25T12:51:15.158702+00:00",
        "end": "2026-07-25T12:51:15.162919+00:00",
        "duration_ms": 4,
        "status": "done",
        "findings_count": 0,
        "message": "prior: 0 findings \u00b7 0 tactics \u00b7 skip=none"
      },
      {
        "name": "cache_poisoning",
        "start": "2026-07-25T12:51:15.163017+00:00",
        "end": "2026-07-25T12:51:15.166221+00:00",
        "duration_ms": 3,
        "status": "done",
        "findings_count": 0,
        "message": "0 finding(s) \u00b7 reflected=False"
      },
      {
        "name": "techstack",
        "start": "2026-07-25T12:51:15.166306+00:00",
        "end": "2026-07-25T12:51:16.341830+00:00",
        "duration_ms": 1175,
        "status": "done",
        "findings_count": 0,
        "message": "Express.js [nodejs \u00b7 API=not found] (confidence: LOW)"
      },
      {
        "name": "tls",
        "start": "2026-07-25T12:51:16.341967+00:00",
        "end": "2026-07-25T12:51:16.342769+00:00",
        "duration_ms": 0,
        "status": "done",
        "findings_count": 0,
        "message": "skipped \u2014 http-only target"
      },
      {
        "name": "playwright_crawl",
        "start": "2026-07-25T12:51:18.644015+00:00",
        "end": "2026-07-25T12:52:35.998520+00:00",
        "duration_ms": 77354,
        "status": "done",
        "findings_count": 0,
        "message": "13 pages \u00b7 6 API \u00b7 6 forms \u00b7 10 query \u00b7 7 JS \u00b7 77.35s"
      },
      {
        "name": "source_maps",
        "start": "2026-07-25T12:52:35.998665+00:00",
        "end": "2026-07-25T12:52:36.103255+00:00",
        "duration_ms": 104,
        "status": "done",
        "findings_count": 0,
        "message": "0 map(s) \u00b7 0 finding(s)"
      },
      {
        "name": "discover_api",
        "start": "2026-07-25T12:52:36.105044+00:00",
        "end": "2026-07-25T12:54:12.731808+00:00",
        "duration_ms": 96626,
        "status": "done",
        "findings_count": 0,
        "message": "0 API endpoint(s) \u00b7 sources={}"
      },
      {
        "name": "admin_sinks",
        "start": "2026-07-25T12:54:12.732062+00:00",
        "end": "2026-07-25T12:54:13.308330+00:00",
        "duration_ms": 576,
        "status": "done",
        "findings_count": 1,
        "message": "1 finding(s) \u00b7 sinks=1"
      },
      {
        "name": "oauth_oidc",
        "start": "2026-07-25T12:54:13.324075+00:00",
        "end": "2026-07-25T12:54:14.103321+00:00",
        "duration_ms": 779,
        "status": "done",
        "findings_count": 0,
        "message": "0 endpoint(s) \u00b7 0 finding(s)"
      },
      {
        "name": "weak_password",
        "start": "2026-07-25T12:54:14.103431+00:00",
        "end": "2026-07-25T12:54:14.143088+00:00",
        "duration_ms": 39,
        "status": "done",
        "findings_count": 1,
        "message": "1 form(s) \u00b7 1 finding(s)"
      },
      {
        "name": "recall_auth_prep",
        "start": "2026-07-25T12:54:14.143229+00:00",
        "end": "2026-07-25T12:54:21.502371+00:00",
        "duration_ms": 7359,
        "status": "done",
        "findings_count": 0,
        "message": "0 finding(s)"
      },
      {
        "name": "webhook_ssrf",
        "start": "2026-07-25T12:54:21.502485+00:00",
        "end": "2026-07-25T12:54:28.324721+00:00",
        "duration_ms": 6822,
        "status": "done",
        "findings_count": 0,
        "message": "0 finding(s)"
      },
      {
        "name": "sqli_sqlite",
        "start": "2026-07-25T12:54:28.331761+00:00",
        "end": "2026-07-25T12:54:28.374327+00:00",
        "duration_ms": 42,
        "status": "done",
        "findings_count": 0,
        "message": "0 finding(s) \u00b7 attempts=4"
      },
      {
        "name": "sqli_second_order",
        "start": "2026-07-25T12:54:28.374420+00:00",
        "end": "2026-07-25T12:54:29.028007+00:00",
        "duration_ms": 653,
        "status": "done",
        "findings_count": 0,
        "message": "0 finding(s)"
      },
      {
        "name": "stored_xss",
        "start": "2026-07-25T12:54:29.028101+00:00",
        "end": "2026-07-25T12:54:29.560685+00:00",
        "duration_ms": 532,
        "status": "done",
        "findings_count": 0,
        "message": "0 finding(s)"
      },
      {
        "name": "nosql_injection",
        "start": "2026-07-25T12:54:29.560847+00:00",
        "end": "2026-07-25T12:54:32.428147+00:00",
        "duration_ms": 2867,
        "status": "done",
        "findings_count": 0,
        "message": "0 finding(s)"
      },
      {
        "name": "stateful_session",
        "start": "2026-07-25T12:54:32.928147+00:00",
        "end": "2026-07-25T12:54:34.927495+00:00",
        "duration_ms": 1999,
        "status": "done",
        "findings_count": 0,
        "message": "0 finding(s) \u00b7 14 steps \u00b7 workflows=0"
      },
      {
        "name": "arsenal_lite",
        "start": "2026-07-25T12:56:15.922262+00:00",
        "end": "2026-07-25T12:56:15.922762+00:00",
        "duration_ms": 0,
        "status": "done",
        "findings_count": 0,
        "message": "nmap=skip \u00b7 nuclei=0 hits \u00b7 0 new"
      },
      {
        "name": "auth_matrix",
        "start": "2026-07-25T12:56:38.009933+00:00",
        "end": "2026-07-25T12:56:38.062332+00:00",
        "duration_ms": 52,
        "status": "done",
        "findings_count": 0,
        "message": "3 probe(s) \u00b7 GET=3 POST=0 \u00b7 0 BAC \u00b7 0 BOLA \u00b7 identities=anon,user2,admin,user1"
      },
      {
        "name": "cmdi",
        "start": "2026-07-25T12:56:38.514366+00:00",
        "end": "2026-07-25T12:58:00.216316+00:00",
        "duration_ms": 81701,
        "status": "done",
        "findings_count": 1,
        "message": "1 finding(s) \u00b7 8 endpoint(s) tested"
      },
      {
        "name": "sqli_blind",
        "start": "2026-07-25T12:58:00.216467+00:00",
        "end": "2026-07-25T12:59:39.515802+00:00",
        "duration_ms": 99299,
        "status": "done",
        "findings_count": 0,
        "message": "0 finding(s) \u00b7 8 endpoint(s) tested"
      },
      {
        "name": "xss_waf",
        "start": "2026-07-25T12:59:39.516021+00:00",
        "end": "2026-07-25T13:00:05.618685+00:00",
        "duration_ms": 26102,
        "status": "done",
        "findings_count": 1,
        "message": "1 finding(s) \u00b7 8 endpoint(s) tested"
      },
      {
        "name": "jwt_confusion",
        "start": "2026-07-25T13:00:05.618868+00:00",
        "end": "2026-07-25T13:00:06.714805+00:00",
        "duration_ms": 1095,
        "status": "done",
        "findings_count": 0,
        "message": "no_public_key_found"
      },
      {
        "name": "jwt_kid",
        "start": "2026-07-25T13:00:06.714916+00:00",
        "end": "2026-07-25T13:00:07.315392+00:00",
        "duration_ms": 600,
        "status": "done",
        "findings_count": 0,
        "message": "no_kid_injection_signal"
      },
      {
        "name": "ssrf_headers",
        "start": "2026-07-25T13:00:07.315529+00:00",
        "end": "2026-07-25T13:00:11.415108+00:00",
        "duration_ms": 4099,
        "status": "done",
        "findings_count": 0,
        "message": "0 finding(s) \u00b7 0 confirmed"
      },
      {
        "name": "oob",
        "start": "2026-07-25T13:00:11.415239+00:00",
        "end": "2026-07-25T13:01:07.394722+00:00",
        "duration_ms": 55979,
        "status": "done",
        "findings_count": 0,
        "message": "0 finding(s) \u00b7 12 probe(s) run"
      },
      {
        "name": "biz_logic_adv",
        "start": "2026-07-25T13:01:07.395033+00:00",
        "end": "2026-07-25T13:01:09.201518+00:00",
        "duration_ms": 1806,
        "status": "done",
        "findings_count": 0,
        "message": "0 finding(s) \u00b7 price=0 qty=0 coupon=0"
      },
      {
        "name": "graphql",
        "start": "2026-07-25T13:01:09.201851+00:00",
        "end": "2026-07-25T13:01:10.001373+00:00",
        "duration_ms": 799,
        "status": "done",
        "findings_count": 0,
        "message": "no_graphql_endpoint_found"
      },
      {
        "name": "ai_pentest",
        "start": "2026-07-25T13:01:10.008144+00:00",
        "end": "2026-07-25T13:01:10.008355+00:00",
        "duration_ms": 0,
        "status": "done",
        "findings_count": 0,
        "message": "skipped \u2014 requires enterprise plan"
      },
      {
        "name": "learning",
        "start": "2026-07-25T13:02:17.353632+00:00",
        "end": "2026-07-25T13:02:17.364248+00:00",
        "duration_ms": 10,
        "status": "done",
        "findings_count": 0,
        "message": "0 finding(s) auto-downgraded from feedback"
      },
      {
        "name": "cve",
        "start": "2026-07-25T13:02:17.364959+00:00",
        "end": "2026-07-25T13:02:17.365177+00:00",
        "duration_ms": 0,
        "status": "done",
        "findings_count": 0,
        "message": "0 CVEs enriched"
      },
      {
        "name": "mitre",
        "start": "2026-07-25T13:02:17.365245+00:00",
        "end": "2026-07-25T13:02:17.367043+00:00",
        "duration_ms": 1,
        "status": "done",
        "findings_count": 0,
        "message": "6 techniques mapped"
      },
      {
        "name": "chains",
        "start": "2026-07-25T13:02:17.368455+00:00",
        "end": "2026-07-25T13:02:17.371206+00:00",
        "duration_ms": 2,
        "status": "done",
        "findings_count": 0,
        "message": "1 exploit chain(s) detected"
      }
    ]
  },
  "fp_review": [
    {
      "id": "XSS-STORED-WRITE-8719",
      "name": "Stored XSS (profile write reflection) \u2014 profile sink",
      "severity": "HIGH",
      "confidence": "HIGH",
      "endpoint": "http://127.0.0.1:4000/profile",
      "exploited": false,
      "cwe": "CWE-79",
      "review": "manual_tp_fp"
    },
    {
      "id": "CMDI-2BC97977",
      "name": "Server-Side JavaScript Injection (eval)",
      "severity": "CRITICAL",
      "confidence": "CONFIRMED",
      "endpoint": "http://127.0.0.1:4000/contributions",
      "exploited": true,
      "cwe": "CWE-94",
      "review": "manual_tp_fp"
    },
    {
      "id": "XSS-WAF-17D4F9A4",
      "name": "Reflected XSS (WAF Bypass \u2014 html5_math) in 'userName'",
      "severity": "HIGH",
      "confidence": "HIGH",
      "endpoint": "http://127.0.0.1:4000/signup",
      "exploited": false,
      "cwe": "CWE-79",
      "review": "manual_tp_fp"
    }
  ],
  "contamination": {
    "clean": true,
    "issues": [],
    "surface_driven": true
  },
  "recall": {
    "truth_app": "OWASP NodeGoat",
    "recall_core": {
      "hits": 3,
      "total": 3,
      "ratio": "3/3",
      "hits_detail": [
        {
          "id": "NG-A1-SSJI",
          "owasp": "A1:2013 Injection",
          "endpoint": "POST /contributions",
          "dast_detectable": true,
          "finding_name": "Server-Side JavaScript Injection (eval)",
          "finding_confidence": "CONFIRMED"
        },
        {
          "id": "NG-A3-XSS-STORED",
          "owasp": "A3:2013 XSS",
          "endpoint": "POST /profile",
          "dast_detectable": true,
          "finding_name": "Stored XSS (profile write reflection) \u2014 profile sink",
          "finding_confidence": "HIGH"
        },
        {
          "id": "NG-A10-OPEN-REDIRECT",
          "owasp": "A10:2013 Unvalidated Redirects and Forwards",
          "endpoint": "GET /learn?url=",
          "dast_detectable": true,
          "finding_name": "Open Redirect via 'url' Parameter",
          "finding_confidence": null
        }
      ],
      "misses": []
    },
    "recall_extended": {
      "hits": 8,
      "total": 9,
      "ratio": "8/9",
      "hits_detail": [
        {
          "id": "NG-A1-SSJI",
          "owasp": "A1:2013 Injection",
          "endpoint": "POST /contributions",
          "dast_detectable": true,
          "finding_name": "Server-Side JavaScript Injection (eval)",
          "finding_confidence": "CONFIRMED"
        },
        {
          "id": "NG-A3-XSS-STORED",
          "owasp": "A3:2013 XSS",
          "endpoint": "POST /profile",
          "dast_detectable": true,
          "finding_name": "Stored XSS (profile write reflection) \u2014 profile sink",
          "finding_confidence": "HIGH"
        },
        {
          "id": "NG-A10-OPEN-REDIRECT",
          "owasp": "A10:2013 Unvalidated Redirects and Forwards",
          "endpoint": "GET /learn?url=",
          "dast_detectable": true,
          "finding_name": "Open Redirect via 'url' Parameter",
          "finding_confidence": null
        },
        {
          "id": "NG-A3b-XSS-REFLECTED-SIGNUP",
          "owasp": "A3:2013 XSS",
          "endpoint": "POST /signup",
          "dast_detectable": "partial",
          "finding_name": "Reflected XSS (WAF Bypass \u2014 html5_math) in 'userName'",
          "finding_confidence": "HIGH"
        },
        {
          "id": "NG-A4-IDOR",
          "owasp": "A4:2013 Insecure Direct Object References",
          "endpoint": "GET /allocations/:userId",
          "dast_detectable": "partial",
          "finding_name": "Potential IDOR on 'allocation_id' (path segment)",
          "finding_confidence": "MEDIUM"
        },
        {
          "id": "NG-A8-CSRF",
          "owasp": "A8:2013 CSRF",
          "endpoint": "POST /profile",
          "dast_detectable": "partial",
          "finding_name": "Missing CSRF Protection on 2 HTML Form(s)",
          "finding_confidence": "HIGH"
        },
        {
          "id": "NG-A2-BROKEN-AUTH",
          "owasp": "A2:2013 Broken Authentication & Session Mgmt",
          "endpoint": "POST /signup, POST /login",
          "dast_detectable": "partial",
          "finding_name": "Weak password policy (CWE-521)",
          "finding_confidence": "OBSERVED"
        },
        {
          "id": "NG-A5-MISCONFIG",
          "owasp": "A5:2013 Security Misconfiguration",
          "endpoint": "*",
          "dast_detectable": "partial",
          "finding_name": "Missing X-Frame-Options",
          "finding_confidence": "MEDIUM"
        }
      ],
      "misses": [
        {
          "id": "NG-A7-ACCESS-CONTROL",
          "owasp": "A7:2013 Missing Function Level Access Control",
          "endpoint": "GET/POST /benefits",
          "dast_detectable": "partial"
        }
      ],
      "caveat": "partial entries need auth/2-identity \u2014 interpret with care"
    },
    "out_of_scope_dast": [
      {
        "id": "NG-A6-SENSITIVE-DATA",
        "owasp": "A6:2013 Sensitive Data Exposure",
        "dast_detectable": false,
        "note": "not in recall denominator"
      },
      {
        "id": "NG-A9-VULN-COMPONENTS",
        "owasp": "A9:2013 Using Components with Known Vulnerabilities",
        "dast_detectable": false,
        "note": "not in recall denominator"
      }
    ],
    "findings_total": 14,
    "findings_eligible": 14
  },
  "surface": {
    "injection_points_discovered": 6,
    "playwright_crawl": {
      "pages_visited": 13,
      "api_endpoints": 6,
      "dom_forms": 6,
      "dom_query_links": 10,
      "js_files": 7,
      "elapsed_s": 77.35,
      "seed_paths": 16,
      "authenticated": true,
      "session_cookies_seeded": 1,
      "session_cookie_names": [
        "connect.sid"
      ],
      "session_propagation_ok": true,
      "session_verified": true,
      "local_storage_seeded": false,
      "max_depth_reached": 1,
      "max_depth_method": "path_segment_heuristic"
    },
    "playwright_crawl_endpoints": 6
  },
  "generated": "2026-07-25T13:02:36.845041+00:00",
  "truth_path": "<redacted>/Documents/Proyectos/Proyecto Vex-Raptor/data/truth/nodegoat_truth.yaml",
  "scan_error": null,
  "env": {
    "VEX_DISCOVER_API_SKIP_SEEDS": "1",
    "VEX_RECALL_BENCHMARK": null
  },
  "motor_commit": "a6b17c8"
}