{
  "bench": "GEN-01b",
  "target": "http://127.0.0.1:4000/",
  "scan_ok": true,
  "elapsed_s": 680.2,
  "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-24T18:14:26.599191+00:00",
        "end": "2026-07-24T18:14:26.603626+00:00",
        "duration_ms": 4,
        "status": "done",
        "findings_count": 0,
        "message": "SPA=no · CDN= · IP=127.0.0.1"
      },
      {
        "name": "memory",
        "start": "2026-07-24T18:14:26.606282+00:00",
        "end": "2026-07-24T18:14:26.610774+00:00",
        "duration_ms": 4,
        "status": "done",
        "findings_count": 0,
        "message": "prior: 0 findings · 0 tactics · skip=none"
      },
      {
        "name": "cache_poisoning",
        "start": "2026-07-24T18:14:26.610868+00:00",
        "end": "2026-07-24T18:14:26.615001+00:00",
        "duration_ms": 4,
        "status": "done",
        "findings_count": 0,
        "message": "0 finding(s) · reflected=False"
      },
      {
        "name": "techstack",
        "start": "2026-07-24T18:14:26.615059+00:00",
        "end": "2026-07-24T18:14:27.791657+00:00",
        "duration_ms": 1176,
        "status": "done",
        "findings_count": 0,
        "message": "Express.js [nodejs · API=not found] (confidence: LOW)"
      },
      {
        "name": "tls",
        "start": "2026-07-24T18:14:27.791817+00:00",
        "end": "2026-07-24T18:14:27.795493+00:00",
        "duration_ms": 3,
        "status": "done",
        "findings_count": 0,
        "message": "skipped — http-only target"
      },
      {
        "name": "playwright_crawl",
        "start": "2026-07-24T18:14:30.094325+00:00",
        "end": "2026-07-24T18:15:47.299512+00:00",
        "duration_ms": 77205,
        "status": "done",
        "findings_count": 0,
        "message": "13 pages · 6 API · 6 forms · 10 query · 7 JS · 77.21s"
      },
      {
        "name": "source_maps",
        "start": "2026-07-24T18:15:47.299713+00:00",
        "end": "2026-07-24T18:15:47.402980+00:00",
        "duration_ms": 103,
        "status": "done",
        "findings_count": 0,
        "message": "0 map(s) · 0 finding(s)"
      },
      {
        "name": "discover_api",
        "start": "2026-07-24T18:15:47.405076+00:00",
        "end": "2026-07-24T18:17:24.053593+00:00",
        "duration_ms": 96648,
        "status": "done",
        "findings_count": 0,
        "message": "0 API endpoint(s) · sources={}"
      },
      {
        "name": "admin_sinks",
        "start": "2026-07-24T18:17:24.053704+00:00",
        "end": "2026-07-24T18:17:24.612244+00:00",
        "duration_ms": 558,
        "status": "done",
        "findings_count": 1,
        "message": "1 finding(s) · sinks=1"
      },
      {
        "name": "oauth_oidc",
        "start": "2026-07-24T18:17:24.637366+00:00",
        "end": "2026-07-24T18:17:25.406286+00:00",
        "duration_ms": 768,
        "status": "done",
        "findings_count": 0,
        "message": "0 endpoint(s) · 0 finding(s)"
      },
      {
        "name": "recall_auth_prep",
        "start": "2026-07-24T18:17:25.406510+00:00",
        "end": "2026-07-24T18:17:32.805727+00:00",
        "duration_ms": 7399,
        "status": "done",
        "findings_count": 0,
        "message": "0 finding(s)"
      },
      {
        "name": "webhook_ssrf",
        "start": "2026-07-24T18:17:32.805943+00:00",
        "end": "2026-07-24T18:17:39.635537+00:00",
        "duration_ms": 6829,
        "status": "done",
        "findings_count": 0,
        "message": "0 finding(s)"
      },
      {
        "name": "sqli_sqlite",
        "start": "2026-07-24T18:17:39.652447+00:00",
        "end": "2026-07-24T18:17:39.737625+00:00",
        "duration_ms": 85,
        "status": "done",
        "findings_count": 0,
        "message": "0 finding(s) · attempts=4"
      },
      {
        "name": "sqli_second_order",
        "start": "2026-07-24T18:17:39.737763+00:00",
        "end": "2026-07-24T18:17:40.341006+00:00",
        "duration_ms": 603,
        "status": "done",
        "findings_count": 0,
        "message": "0 finding(s)"
      },
      {
        "name": "stored_xss",
        "start": "2026-07-24T18:17:40.341247+00:00",
        "end": "2026-07-24T18:17:40.883630+00:00",
        "duration_ms": 542,
        "status": "done",
        "findings_count": 0,
        "message": "0 finding(s)"
      },
      {
        "name": "nosql_injection",
        "start": "2026-07-24T18:17:40.883745+00:00",
        "end": "2026-07-24T18:17:43.741569+00:00",
        "duration_ms": 2857,
        "status": "done",
        "findings_count": 0,
        "message": "0 finding(s)"
      },
      {
        "name": "stateful_session",
        "start": "2026-07-24T18:17:44.240554+00:00",
        "end": "2026-07-24T18:17:46.240694+00:00",
        "duration_ms": 2000,
        "status": "done",
        "findings_count": 0,
        "message": "0 finding(s) · 14 steps · workflows=0"
      },
      {
        "name": "arsenal_lite",
        "start": "2026-07-24T18:19:27.106883+00:00",
        "end": "2026-07-24T18:19:27.107256+00:00",
        "duration_ms": 0,
        "status": "done",
        "findings_count": 0,
        "message": "nmap=skip · nuclei=0 hits · 0 new"
      },
      {
        "name": "auth_matrix",
        "start": "2026-07-24T18:19:49.195108+00:00",
        "end": "2026-07-24T18:19:49.241029+00:00",
        "duration_ms": 45,
        "status": "done",
        "findings_count": 0,
        "message": "3 probe(s) · GET=3 POST=0 · 0 BAC · 0 BOLA · identities=anon,user2,admin,user1"
      },
      {
        "name": "cmdi",
        "start": "2026-07-24T18:19:49.698069+00:00",
        "end": "2026-07-24T18:21:11.409273+00:00",
        "duration_ms": 81711,
        "status": "done",
        "findings_count": 1,
        "message": "1 finding(s) · 8 endpoint(s) tested"
      },
      {
        "name": "sqli_blind",
        "start": "2026-07-24T18:21:11.409523+00:00",
        "end": "2026-07-24T18:22:50.708331+00:00",
        "duration_ms": 99299,
        "status": "done",
        "findings_count": 0,
        "message": "0 finding(s) · 8 endpoint(s) tested"
      },
      {
        "name": "xss_waf",
        "start": "2026-07-24T18:22:50.708629+00:00",
        "end": "2026-07-24T18:23:16.811546+00:00",
        "duration_ms": 26102,
        "status": "done",
        "findings_count": 1,
        "message": "1 finding(s) · 8 endpoint(s) tested"
      },
      {
        "name": "jwt_confusion",
        "start": "2026-07-24T18:23:16.812087+00:00",
        "end": "2026-07-24T18:23:17.907043+00:00",
        "duration_ms": 1094,
        "status": "done",
        "findings_count": 0,
        "message": "no_public_key_found"
      },
      {
        "name": "jwt_kid",
        "start": "2026-07-24T18:23:17.907270+00:00",
        "end": "2026-07-24T18:23:18.505724+00:00",
        "duration_ms": 598,
        "status": "done",
        "findings_count": 0,
        "message": "no_kid_injection_signal"
      },
      {
        "name": "ssrf_headers",
        "start": "2026-07-24T18:23:18.505953+00:00",
        "end": "2026-07-24T18:23:22.605601+00:00",
        "duration_ms": 4099,
        "status": "done",
        "findings_count": 0,
        "message": "0 finding(s) · 0 confirmed"
      },
      {
        "name": "oob",
        "start": "2026-07-24T18:23:22.605885+00:00",
        "end": "2026-07-24T18:24:18.668608+00:00",
        "duration_ms": 56062,
        "status": "done",
        "findings_count": 0,
        "message": "0 finding(s) · 12 probe(s) run"
      },
      {
        "name": "biz_logic_adv",
        "start": "2026-07-24T18:24:18.668996+00:00",
        "end": "2026-07-24T18:24:20.475750+00:00",
        "duration_ms": 1806,
        "status": "done",
        "findings_count": 0,
        "message": "0 finding(s) · price=0 qty=0 coupon=0"
      },
      {
        "name": "graphql",
        "start": "2026-07-24T18:24:20.475999+00:00",
        "end": "2026-07-24T18:24:21.275329+00:00",
        "duration_ms": 799,
        "status": "done",
        "findings_count": 0,
        "message": "no_graphql_endpoint_found"
      },
      {
        "name": "ai_pentest",
        "start": "2026-07-24T18:24:21.277665+00:00",
        "end": "2026-07-24T18:24:21.277811+00:00",
        "duration_ms": 0,
        "status": "done",
        "findings_count": 0,
        "message": "skipped — requires enterprise plan"
      },
      {
        "name": "learning",
        "start": "2026-07-24T18:25:28.495194+00:00",
        "end": "2026-07-24T18:25:28.501399+00:00",
        "duration_ms": 6,
        "status": "done",
        "findings_count": 0,
        "message": "0 finding(s) auto-downgraded from feedback"
      },
      {
        "name": "cve",
        "start": "2026-07-24T18:25:28.501622+00:00",
        "end": "2026-07-24T18:25:28.501725+00:00",
        "duration_ms": 0,
        "status": "done",
        "findings_count": 0,
        "message": "0 CVEs enriched"
      },
      {
        "name": "mitre",
        "start": "2026-07-24T18:25:28.501763+00:00",
        "end": "2026-07-24T18:25:28.502962+00:00",
        "duration_ms": 1,
        "status": "done",
        "findings_count": 0,
        "message": "5 techniques mapped"
      },
      {
        "name": "chains",
        "start": "2026-07-24T18:25:28.503797+00:00",
        "end": "2026-07-24T18:25:28.505697+00:00",
        "duration_ms": 1,
        "status": "done",
        "findings_count": 0,
        "message": "1 exploit chain(s) detected"
      }
    ]
  },
  "fp_review": [
    {
      "id": "XSS-STORED-WRITE-A999",
      "name": "Stored XSS (profile write reflection) — 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": false,
      "cwe": "CWE-94",
      "review": "manual_tp_fp"
    },
    {
      "id": "XSS-WAF-17D4F9A4",
      "name": "Reflected XSS (WAF Bypass — 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) — 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) — 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 — 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 — 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": 13,
    "findings_eligible": 13
  },
  "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.21,
      "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-24T18:25:45.694186+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
  }
}