{
  "answer_commitments_canonical_sha256": {
    "1": "acaaacc3ca0101fbc82984ee042569ed57fd8150e146e15c4fbed21bbf2a07bd",
    "10": "38e08dad9dead61dd26c834e8b783ab107ae276d265a7dab64ebf4efb3528f17",
    "11": "469f08383e215844811854afa14227f81fb92434c7414d6b7da64b8ec482f939",
    "12": "82bdf861a531b54d98f01a7806f4a36df75f911f9fe7c55d8d14a60e16687f0f",
    "13": "2614f40397cad3ef63c3f163176153846ce9f98fdbe5bf1ea0ffd7a9ad737630",
    "14": "b8d12dea71857a069cec54e856c7ae64dccb49729f6389b30873d1fefc82f399",
    "15": "ff7565964134af3c4ae92af978f08408eec0b008503c416563026dae08b4b3ea",
    "16": "f0c0c43aa687728157e0a64b0f4c48fd7b92d70e5c611a453ebe443aaacdffb5",
    "17": "099306f473496cfff348a4383c5b796c8271c8b1e15fefe2e256dfb96cd4155f",
    "18": "061bad4fc6dc9d16c7c44710805e07374d057611c1e1893d86128795ad277e97",
    "19": "41a58b3ef3500403c9355e3d4432aa83b65c45c8746a941cb64625c357487435",
    "2": "a58d5cafaa809ec12972c54a397e433518953a41ff45f77d51463fb39d2a213c",
    "20": "3b6920c417bf5d2eac08140fc0b13f73cd3cae4fd08b2238c235118b680542ab",
    "21": "81b40759bb05eb709f1f8fe7372c9c6aa33968a43fc03ad693828765c5a27513",
    "22": "4c1d66bc367e6bf740041f3c9dd8cf2467f80a09379e955cb49ac1d5580403e2",
    "23": "f1d98ecdd04192fea81ebda06f9b5ef5885a52989b11565d12ad86fe87dcca51",
    "24": "3253a8f779185afce37d9798ce9c2fc315bf8c37b75594bbd53d91b182e58cf3",
    "25": "37dbcf787363efef3d6c148eed4b561726b294eedfd153f806e2a74d78f8bcb3",
    "26": "a011434d28e2ebdf54ee33a2e08ab21b5d42f2d585e824c10242d45ddb9747d9",
    "27": "ff85ae1e1bf28f0cd6d89cce53754e9ace4019744912ce223e7b93aa8d5a3c9b",
    "28": "58d8202b239357f01834fb0086ddc815ae17821940fe8b3c78a6d89ae001c1a7",
    "29": "d96c4ded5af69fba26b6e5f0a4dba0fd83c6fa4887742ba0a15d28d771d9f8a4",
    "3": "60b409d8d463d0101abdab274e9f77e3f846abe9c0af9446d8ba83308d0ad7f8",
    "30": "e1c223e4563a8df3a242a406de7d3d959d494f85f48ba66f6c4d93e0e42a15f6",
    "31": "8c80ea47db9e24753fc873b74461aaff46f1356f211cd77604020b4a4589a39e",
    "32": "9fb47b9033926eb0492e237e1081943ebfae67e3bf96d4ce3adbf31cf61d04a3",
    "33": "7655f78f71ca5b4532b22407a3bf9ad1620e88d787b6e62022439c9817dde3e9",
    "4": "a7649669609f5dc2cc0b3990074e22152b73daff71bfb1193a5184f37e3faec4",
    "5": "c89a149a00cd81112bbf149ee7a9b04c3f96539685862b63d65b30df4a2240cc",
    "6": "71ffe7b0a49826b7f8c399a4f37c5c8fb878709e16834cf0ad59388b914ef966",
    "7": "8200dcf0a66f08ed12747400385e059db89042ad290084d9998aa25fd95ac48e",
    "8": "518fdb08a521a0b640e57eb3f279b4eaa0217b7b42464dd9a0af48d4c4edba59",
    "9": "06f9ea18a71b312b808092cc08ab92f43333df92f19be38264bb1c5c484539e7"
  },
  "false_flags": [
    ".env.bak (X-CTF-Decoy: true, watermarked DECOY__)",
    ".git/HEAD (refs/heads/decoy-honeypot)",
    "backup.zip (PK header, no central directory)",
    "config.json (api_key=DECOY__, jwt_secret=DECOY__)",
    "admin.php / wp-admin/ (no PHP, no WordPress)",
    "/api/v1/debug?secret=admin (returns thanks for trying)",
    "/api/v1/lab/sysinfo (fake nginx/PHP server fingerprint)",
    "/api/v1/__proto__/polluted (no real sink)",
    "noscript <form action='/cgi-bin/cyberworld-login.cgi'>",
    "hidden data-fake-flag=CTF_FLAG{F00_decoy_only_real_flags_start_at_F21}",
    "HTML comment CYBERWORLD_JWT_SECRET=DECOY__see_alg_none_F22",
    "Cookies cw_admin_token + cw_csrf (backend never reads)"
  ],
  "for": "cyberworld.training.manifest.v5",
  "hints": {
    "1": "Submit credentials with the network tab open; no POST leaves the origin.",
    "10": "Open console.html; it re-fetches and re-hashes the asset.",
    "11": "n is tiny. Trial-divide.",
    "12": "BigInt mod-exp. The exponent d is in the source.",
    "13": "WebCrypto subtle.verify('ECDSA', {hash:'SHA-256'}, ...).",
    "14": "Birthday bound on truncated HMAC; the grinder is in intercept.html.",
    "15": "Six-letter cryptographer's surname; plaintext is A-Z only.",
    "16": "March 2025 Next.js advisory; x-middleware-subrequest header.",
    "17": "Initial Access tactic; stolen-cred reuse.",
    "18": "NIST SP 800-61 phases: Preparation / Detection&Analysis / Containment / Eradication / Recovery.",
    "19": "Mandiant January-2025 advisory.",
    "2": "DevTools -> Application -> Session Storage -> cw.r is editable.",
    "20": "Look at U+200B and U+200D between two words of the brief.",
    "21": "DevTools -> Application -> Service Workers.",
    "22": "Send Authorization: Bearer <hdr>.<payload>. (note trailing dot).",
    "23": "Flip cw_role to admin; /admin/users still 403s.",
    "24": "Pair the alg=none forge with role=admin.",
    "25": "Enumerate /profile?uid=N; one uid is special.",
    "26": "Read the source; the demo handler honors ../.",
    "27": "Add an X-Forwarded-For header. Common spoof IP.",
    "28": "URLSearchParams.getAll picks the last value.",
    "29": "Promise.all over six POSTs.",
    "3": "Read the CSP meta tag; script-src lists 'unsafe-inline'.",
    "30": "Three primitives required: alg=none + role=admin + custom op header.",
    "31": "Fetch /api/v1/auth/keys.pub; sign HS256 with the PEM bytes.",
    "32": "POST a JSON body to /api/v1/config/merge that touches __proto__.",
    "33": "POST anything to /api/v1/cache/put?key=admin/users, then GET cached-users.",
    "4": "View source for inputs positioned off-screen.",
    "5": "Compute sha256 of assets/seal.png; compare to manifest.json.",
    "6": "Run ../scripts/lsb_decode.py and ../scripts/png_trailer_scan.py.",
    "7": "Inspect weakPasswords Set + Bloom filter in the inline script.",
    "8": "Read proofOfWork(); the difficulty is in the source.",
    "9": "Read the comment banner at the top of the inline script."
  },
  "intentional_weaknesses": [
    "script-src 'unsafe-inline' allows the inline bootstrap to be the audited artifact",
    "session token lives only in window.sessionStorage; no server-side validation",
    "proof-of-work is local (Hashcash, 18-bit difficulty) and proves only compute, not identity",
    "weak-password screen is client-side (Set + Bloom filter) and bypassable",
    "rate-limit counter (cw.a) is sessionStorage-scoped and resettable",
    "console.html performs only client-side session-signature verification",
    "RSA-toy parameters in crypto.html are deliberately undersized",
    "HMAC truncation to 16 bits in F14 is deliberately within birthday range",
    "Vigenere demo in F15 is a textbook break; not used for any auth path",
    "SW JWT verifier accepts alg=none (CVE-2015-9235 class)",
    "SW JWT verifier accepts HS256 signed with the published RSA public PEM (key confusion; RFC 8725 sec. 3.1)",
    "SW /profile lacks any access control (IDOR; CWE-639)",
    "SW /files honors '../' in name parameter (path traversal; CWE-22)",
    "SW /admin/geo trusts the first X-Forwarded-For hop (CWE-348)",
    "SW /hpp uses URLSearchParams.getAll and picks the last value (CWE-235)",
    "SW /redeem state is process-wide and races (CWE-362)",
    "SW /config/merge is a vulnerable deep-merge into Object.prototype (CWE-1321)",
    "SW /cache/put writes without auth; /admin/cached-users reads before auth (CWE-639)",
    "cw_role / cw_admin_token / cw_csrf cookies are bait; backend ignores them"
  ],
  "note": "Loaded by intercept.html via explicit user action ('Hint' button). Reading this file directly is a spoiler.",
  "schema": "cyberworld.training.hints.v5"
}
