{"name":"SlopEmu","version":"0.2.0","path_model":"/site/{scenario}/","total_scenarios":55,"urls":["http://gapbench.vibe-eval.com/site/ai-startup/","http://gapbench.vibe-eval.com/site/indie-saas/","http://gapbench.vibe-eval.com/site/hosting-panel-bypass/","http://gapbench.vibe-eval.com/site/enterprise-legacy/","http://gapbench.vibe-eval.com/site/supabase-clone/","http://gapbench.vibe-eval.com/site/naked-postgres/","http://gapbench.vibe-eval.com/site/nextjs-app/","http://gapbench.vibe-eval.com/site/graphql-api/","http://gapbench.vibe-eval.com/site/fintech-app/","http://gapbench.vibe-eval.com/site/ecommerce-advanced/","http://gapbench.vibe-eval.com/site/devops-leak/","http://gapbench.vibe-eval.com/site/poisoned-ci-action/","http://gapbench.vibe-eval.com/site/staging-env/","http://gapbench.vibe-eval.com/site/cors-misconfig/","http://gapbench.vibe-eval.com/site/mobile-backend/","http://gapbench.vibe-eval.com/site/multi-tenant-saas/","http://gapbench.vibe-eval.com/site/cms-platform/","http://gapbench.vibe-eval.com/site/auth-system/","http://gapbench.vibe-eval.com/site/internal-tools/","http://gapbench.vibe-eval.com/site/analytics-dashboard/","http://gapbench.vibe-eval.com/site/file-upload/","http://gapbench.vibe-eval.com/site/chat-app/","http://gapbench.vibe-eval.com/site/config-leak/","http://gapbench.vibe-eval.com/site/git-exposed/","http://gapbench.vibe-eval.com/site/feature-flags/","http://gapbench.vibe-eval.com/site/hybrid-modern/","http://gapbench.vibe-eval.com/site/agent-tool-abuse/","http://gapbench.vibe-eval.com/site/rag-poisoning/","http://gapbench.vibe-eval.com/site/mcp-open/","http://gapbench.vibe-eval.com/site/vector-db-leak/","http://gapbench.vibe-eval.com/site/oauth-redirect/","http://gapbench.vibe-eval.com/site/password-reset-flaws/","http://gapbench.vibe-eval.com/site/jwt-alg-confusion/","http://gapbench.vibe-eval.com/site/magic-link-otp/","http://gapbench.vibe-eval.com/site/ssrf-image-proxy/","http://gapbench.vibe-eval.com/site/sqli-raw/","http://gapbench.vibe-eval.com/site/nosql-injection/","http://gapbench.vibe-eval.com/site/ssti/","http://gapbench.vibe-eval.com/site/mass-assignment/","http://gapbench.vibe-eval.com/site/open-redirect/","http://gapbench.vibe-eval.com/site/xxe-svg/","http://gapbench.vibe-eval.com/site/zip-slip/","http://gapbench.vibe-eval.com/site/webhook-unverified/","http://gapbench.vibe-eval.com/site/stripe-paid-trust/","http://gapbench.vibe-eval.com/site/swagger-exposed/","http://gapbench.vibe-eval.com/site/sentry-dsn-leak/","http://gapbench.vibe-eval.com/site/prototype-pollution/","http://gapbench.vibe-eval.com/site/postmessage-no-origin/","http://gapbench.vibe-eval.com/site/csp-missing/","http://gapbench.vibe-eval.com/site/csrf-missing/","http://gapbench.vibe-eval.com/site/s3-public-bucket/","http://gapbench.vibe-eval.com/site/subdomain-takeover/","http://gapbench.vibe-eval.com/site/redis-open/","http://gapbench.vibe-eval.com/site/mongo-open/","http://gapbench.vibe-eval.com/site/ref0/"],"scenarios":[{"id":"ai-startup","name":"AI Startup","host":"ai-startup","vulnerability":"Prompt + RAG Leakage","description":"Scrappy AI SaaS with exposed prompt config, debug env data, and a leaky support search.","path":"/site/ai-startup/","cwes":["CWE-200","CWE-306"]},{"id":"indie-saas","name":"Indie SaaS","host":"indie-saas","vulnerability":"BOLA + Secrets + Paid Bypass","description":"Solo-founder SaaS that exposes account data, billing config, client-trusted subscription upgrades, and a dashboard without auth.","path":"/site/indie-saas/","cwes":["CWE-639","CWE-602","CWE-200"]},{"id":"hosting-panel-bypass","name":"Hosting Panel Bypass","host":"hosting-panel-bypass","vulnerability":"Auth Bypass","description":"Hosting control panel that simulates a 2026-style session-loading authentication bypass on internet-exposed admin paths.","path":"/site/hosting-panel-bypass/","cwes":["CWE-288","CWE-306"]},{"id":"enterprise-legacy","name":"Enterprise Legacy","host":"enterprise-legacy","vulnerability":"Deprecated APIs + Backup Exposure","description":"Old internal stack with forgotten APIs, direct SQL dumps, and reports behind weak assumptions.","path":"/site/enterprise-legacy/","cwes":["CWE-538","CWE-200"]},{"id":"supabase-clone","name":"Supabase Clone","host":"supabase-clone","vulnerability":"Missing RLS + Config Leakage","description":"Project dashboard that loads profiles and storage metadata with an exposed anon config.","path":"/site/supabase-clone/","cwes":["CWE-862","CWE-200"]},{"id":"naked-postgres","name":"Naked Postgres","host":"naked-postgres","vulnerability":"Exposed Database Port","description":"Database console that simulates a publicly reachable Postgres service with weak network and auth settings.","path":"/site/naked-postgres/","cwes":["CWE-284","CWE-319","CWE-200"]},{"id":"nextjs-app","name":"Next.js App","host":"nextjs-app","vulnerability":"Source Maps + Public Config","description":"A modern frontend that advertises hidden flags and exposes build artifacts.","path":"/site/nextjs-app/","cwes":["CWE-200","CWE-540"]},{"id":"graphql-api","name":"GraphQL API","host":"graphql-api","vulnerability":"Introspection + Over-fetching","description":"GraphQL endpoint with enabled introspection and sensitive fields accessible to anonymous callers.","path":"/site/graphql-api/","cwes":["CWE-200","CWE-862"]},{"id":"fintech-app","name":"Fintech App","host":"fintech-app","vulnerability":"IDOR + Balance Tampering","description":"Wallet UI that preloads another customer account and accepts weak amount validation.","path":"/site/fintech-app/","cwes":["CWE-639","CWE-20"]},{"id":"ecommerce-advanced","name":"Ecommerce Advanced","host":"ecommerce-advanced","vulnerability":"Price Tampering + Coupon Abuse","description":"Checkout flow that trusts client totals, weak email validation, and exposed order lookups.","path":"/site/ecommerce-advanced/","cwes":["CWE-602","CWE-639"]},{"id":"devops-leak","name":"DevOps Leak","host":"devops-leak","vulnerability":"Backup + CI Leakage","description":"Operations panel with deploy workflow files, verbose logs, and a downloadable backup archive.","path":"/site/devops-leak/","cwes":["CWE-538","CWE-200"]},{"id":"poisoned-ci-action","name":"Poisoned CI Action","host":"poisoned-ci-action","vulnerability":"CI Supply Chain","description":"Release pipeline that simulates compromised automation credentials, retagged actions, and leaked workflow secrets.","path":"/site/poisoned-ci-action/","cwes":["CWE-522","CWE-829"]},{"id":"staging-env","name":"Staging Env","host":"staging-env","vulnerability":"Open Staging + Weak Auth","description":"Staging UI that automatically loads internal users and skips normal gatekeeping.","path":"/site/staging-env/","cwes":["CWE-306","CWE-200"]},{"id":"cors-misconfig","name":"CORS Misconfig","host":"cors-misconfig","vulnerability":"Wildcard Origin + Credentials","description":"API playground that highlights a permissive credentialed CORS policy.","path":"/site/cors-misconfig/","cwes":["CWE-942","CWE-306"]},{"id":"mobile-backend","name":"Mobile Backend","host":"mobile-backend","vulnerability":"Header Bypass + Hardcoded Keys","description":"Backend docs that encourage trusting mobile headers and exposing versioned admin APIs.","path":"/site/mobile-backend/","cwes":["CWE-290","CWE-798"]},{"id":"multi-tenant-saas","name":"Multi Tenant SaaS","host":"multi-tenant-saas","vulnerability":"Tenant Isolation Failure","description":"Tenant switcher that happily loads users from another org when the ID changes.","path":"/site/multi-tenant-saas/","cwes":["CWE-284","CWE-639"]},{"id":"cms-platform","name":"CMS Platform","host":"cms-platform","vulnerability":"Stored + Form XSS","description":"Simple editorial dashboard that stores unsafe HTML and reflects form preview content back into raw HTML.","path":"/site/cms-platform/","cwes":["CWE-79","CWE-602"]},{"id":"auth-system","name":"Auth System","host":"auth-system","vulnerability":"JWT Debug Leakage","description":"Login panel with weak email validation, reusable tokens, and a leaked signing secret.","path":"/site/auth-system/","cwes":["CWE-287","CWE-798"]},{"id":"internal-tools","name":"Internal Tools","host":"internal-tools","vulnerability":"Ops Dashboard Exposure","description":"No-login operations console with internal APIs and support shortcuts rendered on load.","path":"/site/internal-tools/","cwes":["CWE-306","CWE-200"]},{"id":"analytics-dashboard","name":"Analytics Dashboard","host":"analytics-dashboard","vulnerability":"Sensitive Metrics Exposure","description":"Open metrics board that fetches revenue and customer health data on first paint.","path":"/site/analytics-dashboard/","cwes":["CWE-200","CWE-306"]},{"id":"file-upload","name":"File Upload Service","host":"file-upload","vulnerability":"Unrestricted Upload + Traversal","description":"Upload widget that accepts arbitrary names, weak content checks, and traversal-style reads.","path":"/site/file-upload/","cwes":["CWE-434","CWE-22"]},{"id":"chat-app","name":"Chat App","host":"chat-app","vulnerability":"Stored XSS + Message Leakage","description":"Shared chat room that stores raw HTML and leaks other room traffic into the default view.","path":"/site/chat-app/","cwes":["CWE-79","CWE-200"]},{"id":"config-leak","name":"Config Leak","host":"config-leak","vulnerability":"Debug Config Exposure","description":"Settings page that loads environment, feature flags, and internal hostnames into the browser.","path":"/site/config-leak/","cwes":["CWE-200","CWE-489"]},{"id":"git-exposed","name":"Git Exposed","host":"git-exposed","vulnerability":".git Exposure","description":"Minimal site whose public surface includes live repository metadata files.","path":"/site/git-exposed/","cwes":["CWE-200","CWE-538"]},{"id":"feature-flags","name":"Feature Flag App","host":"feature-flags","vulnerability":"Unsafe Client Flags","description":"Frontend boot script enables admin and bypass flows before the server checks anything.","path":"/site/feature-flags/","cwes":["CWE-602","CWE-306"]},{"id":"hybrid-modern","name":"Hybrid Modern App","host":"hybrid-modern","vulnerability":"Mixed Secure and Insecure Flows","description":"Calibration target with intentionally mixed results so scanners can measure precision as well as recall.","path":"/site/hybrid-modern/","cwes":["CWE-200","CWE-602"]},{"id":"agent-tool-abuse","name":"Agent Tool Abuse","host":"agent-tool-abuse","vulnerability":"LLM Tool Hijack","description":"Chat agent concatenates user input into the system prompt and exposes shell, fetch, and fs tools that anyone can drive.","path":"/site/agent-tool-abuse/","cwes":["CWE-77","CWE-94"]},{"id":"rag-poisoning","name":"RAG Poisoning","host":"rag-poisoning","vulnerability":"Public Index Poisoning","description":"Knowledge base accepts public uploads and treats poisoned chunks as authoritative answers.","path":"/site/rag-poisoning/","cwes":["CWE-77","CWE-200"]},{"id":"mcp-open","name":"Open MCP Server","host":"mcp-open","vulnerability":"Unauth MCP Tools","description":"Internet-reachable MCP server with no auth that exposes shell.exec, db.query, and secrets.read.","path":"/site/mcp-open/","cwes":["CWE-306","CWE-200"]},{"id":"vector-db-leak","name":"Vector DB Leak","host":"vector-db-leak","vulnerability":"Vector Key + Cross-Tenant","description":"Frontend ships a Pinecone key and the search endpoint accepts a wildcard namespace across tenants.","path":"/site/vector-db-leak/","cwes":["CWE-798","CWE-200"]},{"id":"oauth-redirect","name":"OAuth Redirect","host":"oauth-redirect","vulnerability":"Open redirect_uri + No State","description":"OAuth authorize endpoint trusts arbitrary redirect_uri values and never verifies state or PKCE.","path":"/site/oauth-redirect/","cwes":["CWE-601","CWE-1275"]},{"id":"password-reset-flaws","name":"Password Reset Flaws","host":"password-reset-flaws","vulnerability":"Recovery Token Weakness","description":"Reset flow leaks account existence, ships tokens in URLs, and accepts predictable 6-digit values.","path":"/site/password-reset-flaws/","cwes":["CWE-640","CWE-204"]},{"id":"jwt-alg-confusion","name":"JWT Alg Confusion","host":"jwt-alg-confusion","vulnerability":"alg=none + kid Traversal","description":"Verifier accepts alg=none and dereferences attacker-controlled kid paths.","path":"/site/jwt-alg-confusion/","cwes":["CWE-347","CWE-327"]},{"id":"magic-link-otp","name":"Magic Link \u0026 OTP","host":"magic-link-otp","vulnerability":"Brute-forceable Auth Codes","description":"Passwordless flow with no rate limit, 6-digit OTP, and reusable long-TTL magic links.","path":"/site/magic-link-otp/","cwes":["CWE-307","CWE-294"]},{"id":"ssrf-image-proxy","name":"SSRF Image Proxy","host":"ssrf-image-proxy","vulnerability":"Server-Side Request Forgery","description":"Avatar resizer fetches arbitrary URLs including cloud metadata, internal services, and file://.","path":"/site/ssrf-image-proxy/","cwes":["CWE-918"]},{"id":"sqli-raw","name":"Raw SQL Injection","host":"sqli-raw","vulnerability":"SQL Injection","description":"User search builds SQL by string concatenation and reflects errors back to the client.","path":"/site/sqli-raw/","cwes":["CWE-89"]},{"id":"nosql-injection","name":"NoSQL Operator Injection","host":"nosql-injection","vulnerability":"Mongo Operator Injection","description":"Login passes JSON sub-objects into Mongo so $ne/$gt operators bypass authentication.","path":"/site/nosql-injection/","cwes":["CWE-943"]},{"id":"ssti","name":"Server-Side Template Injection","host":"ssti","vulnerability":"Template Injection","description":"Newsletter previewer evaluates user-supplied templates with access to env globals.","path":"/site/ssti/","cwes":["CWE-94","CWE-1336"]},{"id":"mass-assignment","name":"Mass Assignment","host":"mass-assignment","vulnerability":"Unrestricted Field Update","description":"Profile PATCH spreads request body into the user record and lets clients write is_admin.","path":"/site/mass-assignment/","cwes":["CWE-915"]},{"id":"open-redirect","name":"Open Redirect","host":"open-redirect","vulnerability":"Unvalidated next= Param","description":"Login callback honors any next URL, including protocol-relative and javascript: payloads.","path":"/site/open-redirect/","cwes":["CWE-601"]},{"id":"xxe-svg","name":"XXE in SVG","host":"xxe-svg","vulnerability":"XML External Entities","description":"SVG parser resolves external entities and embeds their contents into the rendered output.","path":"/site/xxe-svg/","cwes":["CWE-611"]},{"id":"zip-slip","name":"Zip Slip","host":"zip-slip","vulnerability":"Archive Path Traversal","description":"Archive importer writes entries using their raw filenames, escaping the upload directory.","path":"/site/zip-slip/","cwes":["CWE-22","CWE-434"]},{"id":"webhook-unverified","name":"Webhook Unverified","host":"webhook-unverified","vulnerability":"Webhook Signature Bypass","description":"Stripe and GitHub webhook handlers skip signature checks or use weak ==.","path":"/site/webhook-unverified/","cwes":["CWE-345","CWE-347"]},{"id":"stripe-paid-trust","name":"Stripe Paid-Param Trust","host":"stripe-paid-trust","vulnerability":"Client-Trusted Payment Flag","description":"Checkout success page upgrades plans based on URL query params instead of verifying with Stripe.","path":"/site/stripe-paid-trust/","cwes":["CWE-602"]},{"id":"swagger-exposed","name":"Swagger UI Exposed","host":"swagger-exposed","vulnerability":"API Doc Exposure","description":"Swagger UI is reachable with a pre-filled bearer token and lists every admin endpoint.","path":"/site/swagger-exposed/","cwes":["CWE-200","CWE-306"]},{"id":"sentry-dsn-leak","name":"Sentry / Telemetry Keys","host":"sentry-dsn-leak","vulnerability":"Telemetry Key Exposure","description":"Frontend bundle exposes Sentry DSN, PostHog write key, and Datadog client token.","path":"/site/sentry-dsn-leak/","cwes":["CWE-200","CWE-798"]},{"id":"prototype-pollution","name":"Prototype Pollution","host":"prototype-pollution","vulnerability":"Object Prototype Pollution","description":"Deep-merge endpoint walks __proto__ keys, polluting global config and feature flags.","path":"/site/prototype-pollution/","cwes":["CWE-1321"]},{"id":"postmessage-no-origin","name":"postMessage No Origin","host":"postmessage-no-origin","vulnerability":"Cross-Window Message Trust","description":"Parent page accepts postMessage events from any origin and runs privileged actions.","path":"/site/postmessage-no-origin/","cwes":["CWE-346","CWE-940"]},{"id":"csp-missing","name":"Missing CSP / Headers","host":"csp-missing","vulnerability":"Security Headers Absent","description":"Responses ship without CSP, X-Frame-Options, or HSTS, enabling framing and inline scripts.","path":"/site/csp-missing/","cwes":["CWE-1021","CWE-693"]},{"id":"csrf-missing","name":"CSRF Missing","host":"csrf-missing","vulnerability":"Cross-Site Request Forgery","description":"Email change form has no CSRF token and the session cookie is set with SameSite=None.","path":"/site/csrf-missing/","cwes":["CWE-352"]},{"id":"s3-public-bucket","name":"Public S3 Bucket","host":"s3-public-bucket","vulnerability":"Public List + PUT","description":"User-content bucket grants ListBucket and PutObject to wildcard principal.","path":"/site/s3-public-bucket/","cwes":["CWE-732","CWE-200"]},{"id":"subdomain-takeover","name":"Subdomain Takeover","host":"subdomain-takeover","vulnerability":"Dangling DNS Record","description":"Marketing subdomain CNAMEs to a deleted Heroku app and is claimable by anyone.","path":"/site/subdomain-takeover/","cwes":["CWE-284","CWE-1395"]},{"id":"redis-open","name":"Open Redis","host":"redis-open","vulnerability":"Public Cache Exposure","description":"Redis bound to 0.0.0.0:6379 with no requirepass, leaking sessions and live commands.","path":"/site/redis-open/","cwes":["CWE-306","CWE-319"]},{"id":"mongo-open","name":"Open MongoDB","host":"mongo-open","vulnerability":"Public Document Store","description":"MongoDB bound publicly with --noauth, exposing tenant DBs and password hashes.","path":"/site/mongo-open/","cwes":["CWE-306","CWE-200"]},{"id":"ref0","name":"ref0 (Clean Reference)","host":"ref0","vulnerability":"None (true-negative control)","description":"Clean reference site with auth required, validated input, secure cookies, and full security headers. Any finding here is a false positive.","path":"/site/ref0/"}]}
