{"id":"CVE-2026-126800","kind":"vulnerability","aliases":["CVE-2026-126800"],"related":[],"title":"Hydro UI: stored script injection through markdown code blocks steals sessions","description":"Hydro @hydrooj/ui-default before 4.59.1 contains a stored cross-site scripting vulnerability that allows registered users to inject script by placing double quotes in language- class tokens within markdown-it-xss.ts. Attackers can store a payload in their profile bio that executes when administrators or other users view it, stealing the non-httpOnly sid session cookie for session hijacking.","summary":"The Hydro online judge's default UI package before 4.59.1 fails to escape double quotes in language class names during markdown rendering, so a registered user can store script in their profile bio. When an administrator or another user views that bio, the script runs and can read the non-httpOnly sid session cookie, letting an attacker take over that session.","severity":"critical","cvss":9.3,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["hydro","hydrooj","package","self-hosted","ui-default"],"not_affected_if":["version-4.59.1-or-later"],"how_to_check":"- Check the installed version of `@hydrooj/ui-default` in the Hydro installation; versions below `4.59.1` are affected.\n- Look for `markdown-it-xss.ts` in the `@hydrooj/ui-default` package and confirm the language class handling.","fix":"- `@hydrooj/ui-default` moves to `4.59.1` or later.","status":"open","published_at":"2026-11-11T21:16:43+00:00","first_seen_at":"2026-11-11T21:29:08+00:00","triaged_at":"2026-11-11T21:30:32+00:00","updated_at":"2026-11-11T21:30:32+00:00","category":"package","confidence":0.8,"triage":{"at":"2026-11-11T21:30:32Z","model":"claude-haiku-5-5","output":{"fix":"- `@hydrooj/ui-default` moves to `4.59.1` or later.","reach":"internet","title":"Hydro UI: stored script injection through markdown code blocks steals sessions","impact":"high","summary":"The Hydro online judge's default UI package before 4.59.1 fails to escape double quotes in language class names during markdown rendering, so a registered user can store script in their profile bio. When an administrator or another user views that bio, the script runs and can read the non-httpOnly sid session cookie, letting an attacker take over that session.","audience":"businesses","category":"package","nicknames":[],"who_cares":["hydro","hydrooj","ui-default","self-hosted"],"confidence":0.8,"fix_status":"available","needs_auth":"yes","worst_case":"Attacker hijacks admin session via stolen session cookie","analyst_note":"","how_to_check":"- Check the installed version of `@hydrooj/ui-default` in the Hydro installation; versions below `4.59.1` are affected.\n- Look for `markdown-it-xss.ts` in the `@hydrooj/ui-default` package and confirm the language class handling.","plain_action":"","product_name":"","needs_analyst":false,"not_affected_if":["version-4.59.1-or-later"],"who_is_affected":"Only Hydro online judge instances running `@hydrooj/ui-default` before `4.59.1` are exposed, since the flaw sits in its markdown rendering of user profile content. Any site that lets users write markdown bios and shows them to admins is at risk. Instances already on `4.59.1` or later are not affected by this flaw.","user_interaction":"yes","product_ecosystem":"","needs_special_setup":"no","severity_if_unknown":"critical"},"cost_usd":0.000762,"input_tokens":4625,"output_tokens":600,"severity_before":"critical"},"analyst_status":null,"analyst_note":null,"search":"'-126800':14A,17A '-2026':13A,16A '4.59.1':36B,92C 'administr':62B,130C 'allow':102C 'anoth':64B 'attack':84B,118C 'bio':59B,68B,126C 'block':9A 'class':44B,114C 'code':8A 'contain':93C 'cooki':81B,143C 'cross':97C 'cross-sit':96C 'cve':12A,15A 'default':26B,32B 'doubl':40B,110C 'escap':39B 'execut':128C 'fail':37B 'hijack':146C 'host':23B 'httpon':78B,140C 'hydro':1A,18B,28B,89C 'hydrooj':19B 'hydrooj/ui-default':90C 'inject':5A,106C 'judg':30B 'languag':43B,113C 'let':82B 'markdown':7A,47B 'markdown-it-xss.ts':117C 'name':45B 'non':77B,139C 'non-httpon':76B,138C 'onlin':29B 'packag':20B,34B 'payload':122C 'place':109C 'profil':58B,125C 'quot':41B,111C 'read':74B 'regist':51B,103C 'render':48B 'run':71B 'script':4A,55B,70B,99C,107C 'self':22B 'self-host':21B 'session':11A,80B,88B,142C,145C 'sid':79B,141C 'site':98C 'steal':10A,136C 'store':3A,54B,95C,120C 'take':85B 'token':115C 'ui':2A,25B,33B 'ui-default':24B 'user':52B,65B,104C,133C 'view':66B,134C 'vulner':100C 'within':116C","nicknames":[],"mitigations":[],"who_affected":"Only Hydro online judge instances running `@hydrooj/ui-default` before `4.59.1` are exposed, since the flaw sits in its markdown rendering of user profile content. Any site that lets users write markdown bios and shows them to admins is at risk. Instances already on `4.59.1` or later are not affected by this flaw.","tier":"B","verified":{},"analyst_revisit_at":null,"fix_status":"available","audience":"businesses","plain_action":null,"pkeys":[],"ptokens":[],"labels":["critical","hydro","hydrooj","package","selfhosted","uidefault"],"campaign_type":null,"search_a":"'-126800':14A,17A '-2026':13A,16A 'block':9A 'code':8A 'cve':12A,15A 'hydro':1A 'inject':5A 'markdown':7A 'script':4A 'session':11A 'steal':10A 'store':3A 'ui':2A","search_b":"'4.59.1':36B 'administr':62B 'anoth':64B 'attack':84B 'bio':59B,68B 'class':44B 'cooki':81B 'default':26B,32B 'doubl':40B 'escap':39B 'fail':37B 'host':23B 'httpon':78B 'hydro':18B,28B 'hydrooj':19B 'judg':30B 'languag':43B 'let':82B 'markdown':47B 'name':45B 'non':77B 'non-httpon':76B 'onlin':29B 'packag':20B,34B 'profil':58B 'quot':41B 'read':74B 'regist':51B 'render':48B 'run':71B 'script':55B,70B 'self':22B 'self-host':21B 'session':80B,88B 'sid':79B 'store':54B 'take':85B 'ui':25B,33B 'ui-default':24B 'user':52B,65B 'view':66B","search_c":"'4.59.1':92C 'administr':130C 'allow':102C 'attack':118C 'bio':126C 'class':114C 'contain':93C 'cooki':143C 'cross':97C 'cross-sit':96C 'doubl':110C 'execut':128C 'hijack':146C 'httpon':140C 'hydro':89C 'hydrooj/ui-default':90C 'inject':106C 'languag':113C 'markdown-it-xss.ts':117C 'non':139C 'non-httpon':138C 'payload':122C 'place':109C 'profil':125C 'quot':111C 'regist':103C 'script':99C,107C 'session':142C,145C 'sid':141C 'site':98C 'steal':136C 'store':95C,120C 'token':115C 'user':104C,133C 'view':134C 'vulner':100C 'within':116C","cause_entry":null,"cause_path":null,"disclosures_checked_at":null,"first_public_at":"2026-11-11T21:16:43+00:00","kev":null,"cvss_vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:P/VC:H/VI:H/VA:N/SC:H/SI:H/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X","cvss_by":"disclosure@vulncheck.com","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-126800","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-126800","severity":null,"published_at":"2026-11-11T21:16:43+00:00","modified_at":"2026-11-11T21:16:43+00:00","first_seen_at":"2026-11-11T21:29:08+00:00","fetched_at":"2026-11-11T21:29:08+00:00","note":null}],"documents":[{"id":128963,"url":"https://github.com/hydro-dev/Hydro/commit/3bae56fe8edddff12346bcb1c8281269c94688d8","title":"Patch: github.com","kind":"other","source":"nvd","publisher":"vendor","text":null,"published_at":null,"relation":"fix","confidence":null,"note":"Patch: github.com"},{"id":128964,"url":"https://www.vulncheck.com/advisories/hydro-hydrooj-ui-default-before-4.59.1-stored-xss-via-markdown-language-class","title":"Third-party advisory: www.vulncheck.com","kind":"advisory","source":"nvd","publisher":"research","text":null,"published_at":null,"relation":"advisory","confidence":null,"note":"Third-party advisory: www.vulncheck.com"}],"disclosures":[],"exploit_sources":[],"notice":"Free to read, with fair use of about 60 pages a minute. For higher limits or API access: sales@infrastack.ai"}