{ "authz-bypass-generic": { "profile_id": "authz-bypass-generic", "vuln_family": "authz-bypass", "provisioning_mode": "real", "destructive_risk": "medium", "cleanup_policy": "destroy", "artifact_source": { "strategy": "official-image-or-source" }, "success_criteria": [ "Protected route or action is evaluated with controlled credentials and logged." ], "success_assertions": [], "seed_actions": [ { "kind": "note", "message": "Create low-privilege and admin test users for server-side recheck validation." } ], "attack_actions": [ { "kind": "note", "message": "Use minimal authorization bypass probes defined by case-specific runner or manual session tooling." } ], "browser_assertions": { "required": false }, "runner_id": null, "fixture_path": null, "allowed_target_types": [ "lab-local", "lab-public", "authorized-third-party" ], "required_services": [ "app" ] }, "deserialization-generic": { "profile_id": "deserialization-generic", "vuln_family": "deserialization", "provisioning_mode": "synthetic", "destructive_risk": "high", "cleanup_policy": "destroy", "artifact_source": { "strategy": "source-or-synthetic" }, "success_criteria": [ "Deserialization path is confirmed without executing destructive gadget chains." ], "success_assertions": [], "seed_actions": [ { "kind": "note", "message": "Use inert serialized payloads and do not execute gadget chains against non-lab targets." } ], "attack_actions": [ { "kind": "note", "message": "Demonstrate unsafe decode path with inert object graph or marker token." } ], "browser_assertions": { "required": false }, "runner_id": null, "fixture_path": null, "allowed_target_types": [ "lab-local", "lab-public", "authorized-third-party" ], "required_services": [ "app" ] }, "file-upload-generic": { "profile_id": "file-upload-generic", "vuln_family": "file-upload", "provisioning_mode": "real", "destructive_risk": "medium", "cleanup_policy": "destroy", "artifact_source": { "strategy": "official-image-or-source" }, "success_criteria": [ "Upload acceptance or bypass path is demonstrated with reversible test artifacts." ], "success_assertions": [], "seed_actions": [ { "kind": "note", "message": "Use inert marker files and non-executable payloads by default." } ], "attack_actions": [ { "kind": "note", "message": "Validate extension, storage path, and preview behavior using inert files." } ], "browser_assertions": { "required": true }, "runner_id": null, "fixture_path": null, "allowed_target_types": [ "lab-local", "lab-public", "authorized-third-party" ], "required_services": [ "app" ] }, "misconfiguration-generic": { "profile_id": "misconfiguration-generic", "vuln_family": "misconfiguration", "provisioning_mode": "real", "destructive_risk": "low", "cleanup_policy": "destroy", "artifact_source": { "strategy": "official-image-or-source" }, "success_criteria": [ "Misconfiguration indicator is captured with HTTP or server evidence." ], "success_assertions": [], "seed_actions": [ { "kind": "note", "message": "Keep checks limited to target-local paths and configured lab endpoints." } ], "attack_actions": [ { "kind": "tool", "tool": "misconfig-lab", "args": [ "--target", "{target_url}", "--evidence-dir", "{evidence_dir}", "--run-id", "{run_id}", "--case-id", "{case_id}" ] } ], "browser_assertions": { "required": false }, "runner_id": null, "fixture_path": null, "allowed_target_types": [ "lab-local", "lab-public", "authorized-third-party" ], "required_services": [ "app" ] }, "path-traversal-generic": { "profile_id": "path-traversal-generic", "vuln_family": "path-traversal", "provisioning_mode": "real", "destructive_risk": "medium", "cleanup_policy": "destroy", "artifact_source": { "strategy": "official-image-or-source" }, "success_criteria": [ "Marker file outside intended root becomes reachable or denial path is confirmed." ], "success_assertions": [], "seed_actions": [ { "kind": "note", "message": "Use inert marker files inside isolated volume mounts only." } ], "attack_actions": [ { "kind": "note", "message": "Validate canonicalization failures with marker files rather than real secrets." } ], "browser_assertions": { "required": false }, "runner_id": null, "fixture_path": null, "allowed_target_types": [ "lab-local", "lab-public", "authorized-third-party" ], "required_services": [ "app" ] }, "plugin-extension-generic": { "profile_id": "plugin-extension-generic", "vuln_family": "plugin-extension", "provisioning_mode": "synthetic", "destructive_risk": "medium", "cleanup_policy": "destroy", "artifact_source": { "strategy": "ecosystem-package-or-synthetic" }, "success_criteria": [ "Extension-specific attack path is demonstrated or blocked with artifact evidence." ], "success_assertions": [], "seed_actions": [ { "kind": "note", "message": "Prefer historical plugin/module package; fall back to synthetic isolated reproduction when unavailable." } ], "attack_actions": [ { "kind": "note", "message": "Validate trust-boundary or input-handling weakness using isolated extension package only." } ], "browser_assertions": { "required": true }, "runner_id": null, "fixture_path": null, "allowed_target_types": [ "lab-local", "lab-public", "authorized-third-party" ], "required_services": [ "app" ] }, "proxy-boundary-generic": { "profile_id": "proxy-boundary-generic", "vuln_family": "proxy-boundary", "provisioning_mode": "real", "destructive_risk": "medium", "cleanup_policy": "destroy", "artifact_source": { "strategy": "official-image-or-source" }, "success_criteria": [ "Header trust discrepancy is captured with upstream/downstream logs." ], "success_assertions": [], "seed_actions": [ { "kind": "note", "message": "Log reverse-proxy and application headers before any trust-boundary test." } ], "attack_actions": [ { "kind": "note", "message": "Perform minimal forwarded-header manipulation only inside isolated lab paths." } ], "browser_assertions": { "required": false }, "runner_id": null, "fixture_path": null, "allowed_target_types": [ "lab-local", "lab-public", "authorized-third-party" ], "required_services": [ "app" ] }, "request-smuggling-generic": { "profile_id": "request-smuggling-generic", "vuln_family": "request-smuggling", "provisioning_mode": "synthetic", "destructive_risk": "high", "cleanup_policy": "destroy", "artifact_source": { "strategy": "synthetic-proxy-pair" }, "success_criteria": [ "Proxy and backend parse disagreement is captured in evidence." ], "success_assertions": [], "seed_actions": [ { "kind": "note", "message": "Stand up isolated proxy/app pair only; do not forward to unrelated targets." } ], "attack_actions": [ { "kind": "note", "message": "Run minimal ambiguous request probes and capture both proxy and app logs." } ], "browser_assertions": { "required": false }, "runner_id": null, "fixture_path": null, "allowed_target_types": [ "lab-local", "lab-public", "authorized-third-party" ], "required_services": [ "app" ] }, "session-token-generic": { "profile_id": "session-token-generic", "vuln_family": "session-token", "provisioning_mode": "real", "destructive_risk": "low", "cleanup_policy": "destroy", "artifact_source": { "strategy": "official-image-or-source" }, "success_criteria": [ "Cookie, storage or fixation issue is captured with browser and header evidence." ], "success_assertions": [], "seed_actions": [ { "kind": "note", "message": "Seed only local demo identities and short-lived cookies/tokens." } ], "attack_actions": [ { "kind": "tool", "tool": "session-lab", "args": [ "--target", "{target_url}", "--evidence-dir", "{evidence_dir}", "--run-id", "{run_id}", "--case-id", "{case_id}" ] } ], "browser_assertions": { "required": true }, "runner_id": null, "fixture_path": null, "allowed_target_types": [ "lab-local", "lab-public", "authorized-third-party" ], "required_services": [ "app" ] }, "sqli-generic": { "profile_id": "sqli-generic", "vuln_family": "sqli", "provisioning_mode": "synthetic", "destructive_risk": "medium", "cleanup_policy": "destroy", "artifact_source": { "strategy": "official-image-or-synthetic" }, "success_criteria": [ "Time-based or error-based probe lands with non-destructive evidence." ], "success_assertions": [], "seed_actions": [ { "kind": "note", "message": "Keep seed data reversible and avoid destructive SQL mutations." } ], "attack_actions": [ { "kind": "tool", "tool": "sqli-scanner", "args": [ "-u", "{target_url}", "--evidence-dir", "{evidence_dir}", "--run-id", "{run_id}", "--case-id", "{case_id}" ] } ], "browser_assertions": { "required": false }, "runner_id": null, "fixture_path": null, "allowed_target_types": [ "lab-local", "lab-public", "authorized-third-party" ], "required_services": [ "app" ] }, "ssrf-generic": { "profile_id": "ssrf-generic", "vuln_family": "ssrf", "provisioning_mode": "real", "destructive_risk": "medium", "cleanup_policy": "destroy", "artifact_source": { "strategy": "official-image-or-source" }, "success_criteria": [ "Request sink receives expected callback without crossing authorization boundaries." ], "success_assertions": [], "seed_actions": [ { "kind": "note", "message": "Route callbacks to local sink endpoints only." } ], "attack_actions": [ { "kind": "note", "message": "Exercise local sink endpoints, not external third-party destinations." } ], "browser_assertions": { "required": false }, "runner_id": null, "fixture_path": null, "allowed_target_types": [ "lab-local", "lab-public", "authorized-third-party" ], "required_services": [ "app" ] }, "template-injection-generic": { "profile_id": "template-injection-generic", "vuln_family": "template-injection", "provisioning_mode": "synthetic", "destructive_risk": "medium", "cleanup_policy": "destroy", "artifact_source": { "strategy": "source-or-synthetic" }, "success_criteria": [ "Template evaluation path is proven with harmless marker output." ], "success_assertions": [], "seed_actions": [ { "kind": "note", "message": "Keep expressions inert and avoid destructive primitives by default." } ], "attack_actions": [ { "kind": "note", "message": "Validate expression evaluation with benign markers." } ], "browser_assertions": { "required": false }, "runner_id": null, "fixture_path": null, "allowed_target_types": [ "lab-local", "lab-public", "authorized-third-party" ], "required_services": [ "app" ] }, "xss-generic": { "profile_id": "xss-generic", "vuln_family": "xss", "provisioning_mode": "synthetic", "destructive_risk": "low", "cleanup_policy": "destroy", "artifact_source": { "strategy": "official-image-or-synthetic" }, "success_criteria": [ "Browser evidence confirms payload reflection or DOM sink execution path." ], "success_assertions": [], "seed_actions": [ { "kind": "note", "message": "Seed a low-privilege user and a review page when the target supports stored content." } ], "attack_actions": [ { "kind": "tool", "tool": "xss-fuzzer", "args": [ "-u", "{target_url}", "--dom-scan", "--check-csp", "--evidence-dir", "{evidence_dir}", "--run-id", "{run_id}", "--case-id", "{case_id}" ] } ], "browser_assertions": { "required": true, "strategy": "reflect-or-render" }, "runner_id": null, "fixture_path": null, "allowed_target_types": [ "lab-local", "lab-public", "authorized-third-party" ], "required_services": [ "app" ] }, "gitea-authz-bypass": { "profile_id": "gitea-authz-bypass", "vuln_family": "authz-bypass", "provisioning_mode": "real", "destructive_risk": "low", "cleanup_policy": "destroy", "artifact_source": { "strategy": "local-minimal-fixture" }, "success_criteria": [ "Controlled guest request reaches the protected admin route inside the fixture." ], "success_assertions": [ { "name": "baseline-ok", "type": "baseline-ok" }, { "name": "runner-success", "type": "runner-success" } ], "seed_actions": [ { "kind": "note", "message": "Seed low-privilege and admin boundary fixture state." } ], "attack_actions": [ { "kind": "note", "message": "Runner verifies guest-to-admin bypass only inside fixture route." } ], "browser_assertions": { "required": false }, "runner_id": "gitea.authz-bypass", "fixture_path": "/Users/x/websafe/00-environments/templates/fixtures/gitea/authz-bypass", "allowed_target_types": [ "lab-local" ], "required_services": [ "app" ] }, "gitea-file-upload": { "profile_id": "gitea-file-upload", "vuln_family": "file-upload", "provisioning_mode": "real", "destructive_risk": "low", "cleanup_policy": "destroy", "artifact_source": { "strategy": "local-minimal-fixture" }, "success_criteria": [ "Inert upload marker is accepted and listed on the proof page." ], "success_assertions": [ { "name": "baseline-ok", "type": "baseline-ok" }, { "name": "runner-success", "type": "runner-success" }, { "name": "browser-present", "type": "browser-present" } ], "seed_actions": [ { "kind": "note", "message": "Seed empty attachment list for upload proof." } ], "attack_actions": [ { "kind": "note", "message": "Runner uploads inert text marker only." } ], "browser_assertions": { "required": true }, "runner_id": "gitea.file-upload", "fixture_path": "/Users/x/websafe/00-environments/templates/fixtures/gitea/file-upload", "allowed_target_types": [ "lab-local" ], "required_services": [ "app" ] }, "gitea-proxy-boundary": { "profile_id": "gitea-proxy-boundary", "vuln_family": "proxy-boundary", "provisioning_mode": "real", "destructive_risk": "low", "cleanup_policy": "destroy", "artifact_source": { "strategy": "local-minimal-fixture" }, "success_criteria": [ "Local fixture proves trusted proxy headers cross the admin boundary." ], "success_assertions": [ { "name": "baseline-ok", "type": "baseline-ok" }, { "name": "runner-success", "type": "runner-success" }, { "name": "browser-present", "type": "browser-present" } ], "seed_actions": [ { "kind": "note", "message": "Seed forwarded-header boundary fixture with clean state." } ], "attack_actions": [ { "kind": "note", "message": "Runner performs local forwarded-header trust proof only inside the fixture." } ], "browser_assertions": { "required": true }, "runner_id": "gitea.proxy-boundary", "fixture_path": "/Users/x/websafe/00-environments/templates/fixtures/gitea/proxy-boundary", "allowed_target_types": [ "lab-local" ], "required_services": [ "app" ] }, "gitea-ssrf": { "profile_id": "gitea-ssrf", "vuln_family": "ssrf", "provisioning_mode": "real", "destructive_risk": "low", "cleanup_policy": "destroy", "artifact_source": { "strategy": "local-minimal-fixture" }, "success_criteria": [ "Server-side callback reaches the local sink and is recorded in proof output." ], "success_assertions": [ { "name": "baseline-ok", "type": "baseline-ok" }, { "name": "runner-success", "type": "runner-success" } ], "seed_actions": [ { "kind": "note", "message": "Seed local sink counters only." } ], "attack_actions": [ { "kind": "note", "message": "Runner triggers callback strictly to local sink endpoint." } ], "browser_assertions": { "required": false }, "runner_id": "gitea.ssrf", "fixture_path": "/Users/x/websafe/00-environments/templates/fixtures/gitea/ssrf", "allowed_target_types": [ "lab-local" ], "required_services": [ "app" ] }, "gitea-xss": { "profile_id": "gitea-xss", "vuln_family": "xss", "provisioning_mode": "real", "destructive_risk": "low", "cleanup_policy": "destroy", "artifact_source": { "strategy": "local-minimal-fixture" }, "success_criteria": [ "Browser proof page renders the stored XSS marker after the controlled payload." ], "success_assertions": [ { "name": "baseline-ok", "type": "baseline-ok" }, { "name": "runner-success", "type": "runner-success" }, { "name": "browser-present", "type": "browser-present" } ], "seed_actions": [ { "kind": "note", "message": "Seed stored content page before browser proof capture." } ], "attack_actions": [ { "kind": "note", "message": "Runner stores inert script payload and captures proof page." } ], "browser_assertions": { "required": true }, "runner_id": "gitea.xss", "fixture_path": "/Users/x/websafe/00-environments/templates/fixtures/gitea/xss", "allowed_target_types": [ "lab-local" ], "required_services": [ "app" ] }, "nextjs-authz-bypass": { "profile_id": "nextjs-authz-bypass", "vuln_family": "authz-bypass", "provisioning_mode": "real", "destructive_risk": "low", "cleanup_policy": "destroy", "artifact_source": { "strategy": "local-minimal-fixture" }, "success_criteria": [ "Protected route is reachable only after the controlled bypass proof step." ], "success_assertions": [ { "name": "baseline-ok", "type": "baseline-ok" }, { "name": "runner-success", "type": "runner-success" } ], "seed_actions": [ { "kind": "note", "message": "Seed guest/admin route fixture for server-side recheck." } ], "attack_actions": [ { "kind": "note", "message": "Runner performs local authz bypass proof only." } ], "browser_assertions": { "required": false }, "runner_id": "nextjs.authz-bypass", "fixture_path": "/Users/x/websafe/00-environments/templates/fixtures/nextjs/authz-bypass", "allowed_target_types": [ "lab-local" ], "required_services": [ "app" ] }, "nextjs-deserialization": { "profile_id": "nextjs-deserialization", "vuln_family": "deserialization", "provisioning_mode": "real", "destructive_risk": "low", "cleanup_policy": "destroy", "artifact_source": { "strategy": "local-minimal-fixture" }, "success_criteria": [ "Inert decoded object marker is present without executing a gadget chain." ], "success_assertions": [ { "name": "baseline-ok", "type": "baseline-ok" }, { "name": "runner-success", "type": "runner-success" } ], "seed_actions": [ { "kind": "note", "message": "Seed inert decode path before proof request." } ], "attack_actions": [ { "kind": "note", "message": "Runner demonstrates unsafe decode path without gadget execution." } ], "browser_assertions": { "required": false }, "runner_id": "nextjs.deserialization", "fixture_path": "/Users/x/websafe/00-environments/templates/fixtures/nextjs/deserialization", "allowed_target_types": [ "lab-local" ], "required_services": [ "app" ] }, "nextjs-proxy-boundary": { "profile_id": "nextjs-proxy-boundary", "vuln_family": "proxy-boundary", "provisioning_mode": "real", "destructive_risk": "low", "cleanup_policy": "destroy", "artifact_source": { "strategy": "local-minimal-fixture" }, "success_criteria": [ "Middleware trust-boundary proof is visible on the browser proof page." ], "success_assertions": [ { "name": "baseline-ok", "type": "baseline-ok" }, { "name": "runner-success", "type": "runner-success" }, { "name": "browser-present", "type": "browser-present" } ], "seed_actions": [ { "kind": "note", "message": "Seed middleware boundary fixture with clean proxy state." } ], "attack_actions": [ { "kind": "note", "message": "Runner performs forwarded-header proof against local fixture only." } ], "browser_assertions": { "required": true }, "runner_id": "nextjs.proxy-boundary", "fixture_path": "/Users/x/websafe/00-environments/templates/fixtures/nextjs/proxy-boundary", "allowed_target_types": [ "lab-local" ], "required_services": [ "app" ] }, "nextjs-ssrf": { "profile_id": "nextjs-ssrf", "vuln_family": "ssrf", "provisioning_mode": "real", "destructive_risk": "low", "cleanup_policy": "destroy", "artifact_source": { "strategy": "local-minimal-fixture" }, "success_criteria": [ "Local sink callback is observed from the server-side fetch path." ], "success_assertions": [ { "name": "baseline-ok", "type": "baseline-ok" }, { "name": "runner-success", "type": "runner-success" } ], "seed_actions": [ { "kind": "note", "message": "Seed local callback fixture state." } ], "attack_actions": [ { "kind": "note", "message": "Runner validates sink callback without leaving local network." } ], "browser_assertions": { "required": false }, "runner_id": "nextjs.ssrf", "fixture_path": "/Users/x/websafe/00-environments/templates/fixtures/nextjs/ssrf", "allowed_target_types": [ "lab-local" ], "required_services": [ "app" ] }, "nextjs-xss": { "profile_id": "nextjs-xss", "vuln_family": "xss", "provisioning_mode": "real", "destructive_risk": "low", "cleanup_policy": "destroy", "artifact_source": { "strategy": "local-minimal-fixture" }, "success_criteria": [ "Browser proof page shows the XSS execution marker after the controlled payload." ], "success_assertions": [ { "name": "baseline-ok", "type": "baseline-ok" }, { "name": "runner-success", "type": "runner-success" }, { "name": "browser-present", "type": "browser-present" } ], "seed_actions": [ { "kind": "note", "message": "Seed client-rendering page for XSS proof capture." } ], "attack_actions": [ { "kind": "note", "message": "Runner injects inert payload and captures browser proof." } ], "browser_assertions": { "required": true }, "runner_id": "nextjs.xss", "fixture_path": "/Users/x/websafe/00-environments/templates/fixtures/nextjs/xss", "allowed_target_types": [ "lab-local" ], "required_services": [ "app" ] }, "undici-ssrf": { "profile_id": "undici-ssrf", "vuln_family": "ssrf", "provisioning_mode": "real", "destructive_risk": "low", "cleanup_policy": "destroy", "artifact_source": { "strategy": "local-minimal-fixture" }, "success_criteria": [ "SSRF proof endpoint confirms only local sink callbacks were performed." ], "success_assertions": [ { "name": "baseline-ok", "type": "baseline-ok" }, { "name": "runner-success", "type": "runner-success" } ], "seed_actions": [ { "kind": "note", "message": "Seed local sink-only request path." } ], "attack_actions": [ { "kind": "note", "message": "Runner validates local callback using undici-style request fixture." } ], "browser_assertions": { "required": false }, "runner_id": "undici.ssrf", "fixture_path": "/Users/x/websafe/00-environments/templates/fixtures/undici/ssrf", "allowed_target_types": [ "lab-local" ], "required_services": [ "app" ] }, "vite-file-upload": { "profile_id": "vite-file-upload", "vuln_family": "file-upload", "provisioning_mode": "real", "destructive_risk": "low", "cleanup_policy": "destroy", "artifact_source": { "strategy": "local-minimal-fixture" }, "success_criteria": [ "Uploaded inert marker is shown on the browser proof page." ], "success_assertions": [ { "name": "baseline-ok", "type": "baseline-ok" }, { "name": "runner-success", "type": "runner-success" }, { "name": "browser-present", "type": "browser-present" } ], "seed_actions": [ { "kind": "note", "message": "Seed empty upload list for dev-server proof page." } ], "attack_actions": [ { "kind": "note", "message": "Runner uploads inert text marker only." } ], "browser_assertions": { "required": true }, "runner_id": "vite.file-upload", "fixture_path": "/Users/x/websafe/00-environments/templates/fixtures/vite/file-upload", "allowed_target_types": [ "lab-local" ], "required_services": [ "app" ] }, "vite-proxy-boundary": { "profile_id": "vite-proxy-boundary", "vuln_family": "proxy-boundary", "provisioning_mode": "real", "destructive_risk": "low", "cleanup_policy": "destroy", "artifact_source": { "strategy": "local-minimal-fixture" }, "success_criteria": [ "Proxy boundary proof banner is visible in the captured browser evidence." ], "success_assertions": [ { "name": "baseline-ok", "type": "baseline-ok" }, { "name": "runner-success", "type": "runner-success" }, { "name": "browser-present", "type": "browser-present" } ], "seed_actions": [ { "kind": "note", "message": "Seed proxy boundary fixture with baseline banner." } ], "attack_actions": [ { "kind": "note", "message": "Runner proves forwarded proxy boundary state change locally." } ], "browser_assertions": { "required": true }, "runner_id": "vite.proxy-boundary", "fixture_path": "/Users/x/websafe/00-environments/templates/fixtures/vite/proxy-boundary", "allowed_target_types": [ "lab-local" ], "required_services": [ "app" ] }, "vite-xss": { "profile_id": "vite-xss", "vuln_family": "xss", "provisioning_mode": "real", "destructive_risk": "low", "cleanup_policy": "destroy", "artifact_source": { "strategy": "local-minimal-fixture" }, "success_criteria": [ "Browser proof page shows the controlled XSS marker after attack." ], "success_assertions": [ { "name": "baseline-ok", "type": "baseline-ok" }, { "name": "runner-success", "type": "runner-success" }, { "name": "browser-present", "type": "browser-present" } ], "seed_actions": [ { "kind": "note", "message": "Seed client render page before XSS proof capture." } ], "attack_actions": [ { "kind": "note", "message": "Runner stores inert payload and validates browser proof only locally." } ], "browser_assertions": { "required": true }, "runner_id": "vite.xss", "fixture_path": "/Users/x/websafe/00-environments/templates/fixtures/vite/xss", "allowed_target_types": [ "lab-local" ], "required_services": [ "app" ] } }