{
  "asset_fingerprints": {
    "seal.png": "372b90e59de3f97b63aa5d0d24af2fc2f79b51b9caa1e15188f4151ca45e3d05",
    "seal.png:alpha_crc32_ieee": "b2e976a3",
    "seal.png:alpha_len": 79,
    "seal.png:alpha_lsb": "a50b4f727be945d60a30265c7a5420209707387cdc098c99c46d92a787c36b83",
    "seal.png:iend_tail": "25ed896e5ccd7380d9546de48dedb501551f95a59ac890b185e9090f15bd6043",
    "seal.png:size": 14782,
    "seal.png:tail_size": 311,
    "skull.png": "7881d250eb7266e9239b0f33a537d1fd2eefc72ff3e647bd1cba6e9b40a1f82c",
    "skull.png:size": 4658
  },
  "author": {
    "contact": "https://github.com/Personfu",
    "name": "Person / FLLC",
    "purpose": "defensive-analyst CTF training; no real credentials accepted, transmitted, or stored",
    "site": "https://fllc.net",
    "tagline": "Hack the impossible. Defend the future."
  },
  "challenge_artifacts": {
    "api_v1": {
      "discovery": "GET /api/v1/debug/echo or /CyberWorld_login/robots.txt",
      "endpoint_count": 22,
      "hints_at": "/CyberWorld_login/hints.json (load on demand)",
      "prefix": "/CyberWorld_login/api/v1/"
    },
    "ecdsa_p256": {
      "curve": "P-256",
      "hash": "SHA-256",
      "message_utf8": "Phoenix Operations: May 26 2026",
      "public_key_uncompressed_hex": "046b17cc5608f5019e193bebe486935ce357448649545fcbe0409e80081c70cdd18ac691b9ed0f85868f7f83a60439bd90e8dfbfe72c03f49cea612a7d2f4a9b96",
      "signature_raw_hex": "b3ffd423ecd0b61d75a3ab10e0134ed6d8cad5b4d07a9cac2f8b61328e016f318f2c9cc30dcf06997e02a6464efb972843c63e4337bb97f21b6c89f707addee1"
    },
    "hmac_f14": {
      "anchor_msg": "Phoenix-2026",
      "key_published": "cyberworld:F14:hmac16",
      "target_tag16": "5916"
    },
    "rsa_toy": {
      "F12_ciphertext": 352,
      "e": 17,
      "n": 3233
    },
    "vigenere": {
      "alphabet": "A-Z",
      "ciphertext": "ZVASJFRBDSFAZLDRYBJIXVQIKWBVSIYQXTJBDQOMNX"
    }
  },
  "expires": "2027-05-27T00:00:00Z",
  "findings": [
    {
      "answer_sha256_prefix": "acaaacc3",
      "n": 1,
      "tier": 1,
      "title": "Client-side authentication only"
    },
    {
      "answer_sha256_prefix": "a58d5caf",
      "n": 2,
      "tier": 1,
      "title": "Fake session lives in window.sessionStorage"
    },
    {
      "answer_sha256_prefix": "60b409d8",
      "n": 3,
      "tier": 1,
      "title": "Content-Security-Policy permits inline scripts"
    },
    {
      "answer_sha256_prefix": "a7649669",
      "n": 4,
      "tier": 1,
      "title": "Honeypot fields exist (bot-friction only)"
    },
    {
      "answer_sha256_prefix": "c89a149a",
      "n": 5,
      "tier": 1,
      "title": "PNG asset is bound into the auth path"
    },
    {
      "answer_sha256_prefix": "71ffe7b0",
      "n": 6,
      "tier": 1,
      "title": "PNG carries two stego side-channels"
    },
    {
      "answer_sha256_prefix": "8200dcf0",
      "n": 7,
      "tier": 1,
      "title": "Weak-password screen is client-side"
    },
    {
      "answer_sha256_prefix": "518fdb08",
      "n": 8,
      "tier": 1,
      "title": "Proof-of-work is local; computation, not identity"
    },
    {
      "answer_sha256_prefix": "06f9ea18",
      "n": 9,
      "tier": 1,
      "title": "The big inline bootstrap is intentional"
    },
    {
      "answer_sha256_prefix": "38e08dad",
      "n": 10,
      "tier": 1,
      "title": "console.html re-validates everything independently"
    },
    {
      "answer_sha256_prefix": "469f0838",
      "n": 11,
      "tier": 2,
      "title": "RSA-toy modulus is factorable"
    },
    {
      "answer_sha256_prefix": "82bdf861",
      "n": 12,
      "tier": 2,
      "title": "RSA-toy ciphertext decrypts to a small integer"
    },
    {
      "answer_sha256_prefix": "2614f403",
      "n": 13,
      "tier": 2,
      "title": "ECDSA P-256 signature verifies"
    },
    {
      "answer_sha256_prefix": "b8d12dea",
      "n": 14,
      "tier": 2,
      "title": "16-bit-truncated HMAC has birthday collisions"
    },
    {
      "answer_sha256_prefix": "ff756596",
      "n": 15,
      "tier": 2,
      "title": "Vigenere ciphertext breaks via Kasiski + IC"
    },
    {
      "answer_sha256_prefix": "f0c0c43a",
      "n": 16,
      "tier": 3,
      "title": "Name the CVE behind the symptom"
    },
    {
      "answer_sha256_prefix": "099306f4",
      "n": 17,
      "tier": 3,
      "title": "Map the TTP to a MITRE ATT&CK technique"
    },
    {
      "answer_sha256_prefix": "061bad4f",
      "n": 18,
      "tier": 3,
      "title": "Name the NIST SP 800-61 phase"
    },
    {
      "answer_sha256_prefix": "41a58b3e",
      "n": 19,
      "tier": 3,
      "title": "Identify the Mandiant actor cluster"
    },
    {
      "answer_sha256_prefix": "3b6920c4",
      "n": 20,
      "tier": 3,
      "title": "Extract the zero-width-space flag"
    },
    {
      "answer_sha256_prefix": "81b40759",
      "n": 21,
      "tier": 4,
      "title": "A service worker intercepts /api/v1/*"
    },
    {
      "answer_sha256_prefix": "4c1d66bc",
      "n": 22,
      "tier": 4,
      "title": "The JWT verifier accepts alg=none"
    },
    {
      "answer_sha256_prefix": "f1d98ecd",
      "n": 23,
      "tier": 4,
      "title": "Role/admin cookies are decoy bait"
    },
    {
      "answer_sha256_prefix": "3253a8f7",
      "n": 24,
      "tier": 4,
      "title": "Forge a JWT and reach /admin/users"
    },
    {
      "answer_sha256_prefix": "37dbcf78",
      "n": 25,
      "tier": 4,
      "title": "An IDOR exists on /profile"
    },
    {
      "answer_sha256_prefix": "a011434d",
      "n": 26,
      "tier": 4,
      "title": "A path traversal exists on /files"
    },
    {
      "answer_sha256_prefix": "ff85ae1e",
      "n": 27,
      "tier": 4,
      "title": "X-Forwarded-For is trusted on /admin/geo"
    },
    {
      "answer_sha256_prefix": "58d8202b",
      "n": 28,
      "tier": 4,
      "title": "HTTP Parameter Pollution on /hpp"
    },
    {
      "answer_sha256_prefix": "d96c4ded",
      "n": 29,
      "tier": 4,
      "title": "Race condition on /redeem"
    },
    {
      "answer_sha256_prefix": "e1c223e4",
      "n": 30,
      "tier": 4,
      "title": "Chain primitives to reach /internal/flag"
    },
    {
      "answer_sha256_prefix": "8c80ea47",
      "n": 31,
      "tier": 5,
      "title": "JWT HS256/RS256 key-confusion on /internal/super"
    },
    {
      "answer_sha256_prefix": "9fb47b90",
      "n": 32,
      "tier": 5,
      "title": "Object.prototype pollution opens /admin/console"
    },
    {
      "answer_sha256_prefix": "7655f78f",
      "n": 33,
      "tier": 5,
      "title": "SW cache is read before authorization on /admin/cached-users"
    }
  ],
  "issued": "2026-05-27T00:00:00Z",
  "master_xor": "d9693969",
  "math_primitives": {
    "birthday_bound": "E[stamps] = 2^bits; E[16-bit-HMAC collisions] ~= 2^8",
    "cache_confused": "CWE-639; trust placed in unauthenticated cache content",
    "crc32_ieee": "polynomial 0xEDB88320 (reflected); over alpha-LSB payload",
    "ecdsa_p256": "ECDSA NIST P-256 / SHA-256 (FIPS 186-5)",
    "gf2_32_xor": "33 finding tokens XOR over GF(2)^32 close to master_xor",
    "hashcash": "RFC-style v1 stamp: 1:bits:date:resource:ext:rand:counter (Back, 2002)",
    "jwt_alg_none": "JWS RFC 7515 'none'; verifiers MUST reject when verifying (RFC 8725 sec. 3.2)",
    "jwt_key_conf": "HS/RS key confusion (RFC 8725 sec. 3.1)",
    "modexp_toy": "RSA toy: e=17 mod n=3233",
    "proto_pollute": "CWE-1321; deep-merge into Object.prototype via __proto__",
    "session_hmac": "HMAC-SHA-256 over canonical(session-claims || tail24) using K = SHA-256('cyberworld:training:v2:2026-05-26:personfu')",
    "vigenere": "poly-alphabetic over Z/26; Kasiski + IC analysis",
    "zwsp_stego": "U+200B (0) / U+200D (1), 8 bits/byte MSB-first"
  },
  "publishing_key_derivation": "K = SHA-256('cyberworld:training:v2:2026-05-26:personfu')",
  "schema": "cyberworld.training.manifest.v5",
  "scope": {
    "brief": "/CyberWorld_login/challenge.html",
    "console": "/CyberWorld_login/console.html",
    "directory": "/CyberWorld_login/",
    "entry": "/CyberWorld_login/index.html",
    "hints": "/CyberWorld_login/hints.json",
    "intercept": "/CyberWorld_login/intercept.html",
    "lab": "/CyberWorld_login/lab.html",
    "lore": "/CyberWorld_login/lore.html",
    "robots": "/CyberWorld_login/robots.txt",
    "sw": "/CyberWorld_login/sw-ctf.js",
    "training_completion": "33/33 verified findings create a browser-local training badge; FLLC game membership is verified separately"
  },
  "signature": {
    "algorithm": "HMAC-SHA-256",
    "canonicalization": "json.dumps(body, separators=(',',':'), sort_keys=True) of all fields except this one; body is ASCII-only",
    "key_derivation": "cyberworld:training:v2:2026-05-26:personfu",
    "value": "2a04930e6ea3da40ddd597bc424494ba5cdbdd6ce1fe03f30bb776767986bf75"
  }
}
