{"id":"CVE-2026-16889","kind":"vulnerability","aliases":["CVE-2026-16889"],"related":[],"title":"openEQUELLA: pre-login notice image upload serves HTML as stored XSS","description":"In openEQUELLA before 2026.1, the pre-login notice image upload endpoint (PUT /api/preloginnotice/image/{name}) does not validate the type of uploaded files and serves them with a Content-Type derived from the supplied filename. A user holding the EDIT_SYSTEM_SETTINGS permission can upload an HTML file that is then served as text/html from the openEQUELLA origin, resulting in stored cross-site scripting. Unauthenticated exploitation is possible where EDIT_SYSTEM_SETTINGS has been granted to the guest user or everyone.","summary":"openEQUELLA's pre-login notice image upload endpoint does not check file types and serves uploads with a Content-Type taken from the filename. An uploaded HTML file is then rendered from the openEQUELLA origin, so an attacker can run scripts in other users' sessions.","severity":"medium","cvss":4.8,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["openequella","package","self-hosted"],"not_affected_if":["edit-system-settings-restricted","version-2026.1-or-later"],"how_to_check":"- Confirm the installed openEQUELLA version is earlier than `2026.1`.\n- Check which roles hold `EDIT_SYSTEM_SETTINGS`, and whether the guest user or everyone has it.","fix":"- Upgrade openEQUELLA to `2026.1` or later.\n- Until upgraded, remove `EDIT_SYSTEM_SETTINGS` from the guest user and everyone roles.","status":"open","published_at":"2026-10-29T02:16:51+00:00","first_seen_at":"2026-10-29T02:36:47+00:00","triaged_at":"2026-10-29T02:38:05+00:00","updated_at":"2026-10-29T02:38:05+00:00","category":"package","confidence":0.7,"triage":{"at":"2026-10-29T02:38:05Z","model":"claude-haiku-5-5","output":{"fix":"- Upgrade openEQUELLA to `2026.1` or later.\n- Until upgraded, remove `EDIT_SYSTEM_SETTINGS` from the guest user and everyone roles.","reach":"internet","title":"openEQUELLA: pre-login notice image upload serves HTML as stored XSS","impact":"medium","summary":"openEQUELLA's pre-login notice image upload endpoint does not check file types and serves uploads with a Content-Type taken from the filename. An uploaded HTML file is then rendered from the openEQUELLA origin, so an attacker can run scripts in other users' sessions.","category":"package","nicknames":[],"who_cares":["openequella","self-hosted"],"confidence":0.7,"needs_auth":"yes","worst_case":"Attacker runs scripts on the openEQUELLA origin in victims' sessions","analyst_note":"","how_to_check":"- Confirm the installed openEQUELLA version is earlier than `2026.1`.\n- Check which roles hold `EDIT_SYSTEM_SETTINGS`, and whether the guest user or everyone has it.","needs_analyst":false,"not_affected_if":["version-2026.1-or-later","edit-system-settings-restricted"],"who_is_affected":"Only installations running openEQUELLA before `2026.1` are exposed. Exposure needs a user with `EDIT_SYSTEM_SETTINGS` to upload the file, so a default install with that permission restricted to admins carries a lower risk. Unauthenticated exploitation is possible only where the guest user or everyone holds that permission.","user_interaction":"yes","needs_special_setup":"yes","severity_if_unknown":"medium"},"cost_usd":0.000637,"input_tokens":3427,"output_tokens":588,"severity_before":"medium"},"analyst_status":null,"analyst_note":null,"search":"'-16889':15A,18A '-2026':14A,17A '/api/preloginnotice/image':84C '2026.1':74C 'attack':63B 'check':35B 'content':44B,100C 'content-typ':43B,99C 'cross':134C 'cross-sit':133C 'cve':13A,16A 'deriv':102C 'edit':111C,142C 'endpoint':32B,82C 'everyon':153C 'exploit':138C 'file':36B,53B,93C,119C 'filenam':49B,106C 'grant':147C 'guest':150C 'hold':109C 'host':23B 'html':9A,52B,118C 'imag':6A,30B,80C 'login':4A,28B,78C 'name':85C 'notic':5A,29B,79C 'openequella':1A,19B,24B,59B,72C,128C 'origin':60B,129C 'packag':20B 'permiss':114C 'possibl':140C 'pre':3A,27B,77C 'pre-login':2A,26B,76C 'put':83C 'render':56B 'result':130C 'run':65B 'script':66B,136C 'self':22B 'self-host':21B 'serv':8A,39B,95C,123C 'session':70B 'set':113C,144C 'site':135C 'store':11A,132C 'suppli':105C 'system':112C,143C 'taken':46B 'text/html':125C 'type':37B,45B,90C,101C 'unauthent':137C 'upload':7A,31B,40B,51B,81C,92C,116C 'user':69B,108C,151C 'valid':88C 'xss':12A","nicknames":[],"mitigations":[],"who_affected":"Only installations running openEQUELLA before `2026.1` are exposed. Exposure needs a user with `EDIT_SYSTEM_SETTINGS` to upload the file, so a default install with that permission restricted to admins carries a lower risk. Unauthenticated exploitation is possible only where the guest user or everyone holds that permission.","tier":"C","verified":{},"analyst_revisit_at":null,"fix_status":null,"audience":null,"plain_action":null,"first_public_at":"2026-10-29T02:16:51+00:00","kev":null,"cvss_vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:H/UI:P/VC:N/VI:N/VA:N/SC:L/SI:L/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":"9c1820ae-fb77-4810-a8aa-ca46e7474d2f","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-16889","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-16889","severity":null,"published_at":"2026-10-29T02:16:51+00:00","modified_at":"2026-10-29T02:16:51+00:00","first_seen_at":"2026-10-29T02:36:47+00:00","fetched_at":"2026-10-29T02:36:47+00:00","note":null}],"documents":[],"notice":"Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai"}