{"id":"CVE-2026-82956","kind":"vulnerability","aliases":["CVE-2026-82956"],"related":[],"title":"Apache Wicket: remembered window name lets a page run attacker script","description":"Improper neutralization of input during web page generation in Apache Wicket.\n\norg.apache.wicket.ajax.AjaxNewWindowNotifyingBehavior notices that a page instance has been opened in a second browser window or tab. It asks the browser for the value of window.name, which reaches the server as the request parameter windowName, and remembers what the browser reported in a field of the behaviour. That field is part of the page's serialized state, so the remembered value stays in the page store for as long as the page instance does.\n\nOn every later render of that page instance the behaviour builds the precondition of its Ajax call by substituting the remembered value into a single-quoted JavaScript string literal, and Wicket writes that precondition into the page as raw JavaScript, because the precondition of an Ajax call listener is script supplied by the caller and is emitted without quoting or escaping. Nothing on that path escapes the value. The window name is client-supplied and Wicket applies no validation to it, so a remembered name containing a single quote ends the literal and the rest of it runs as script in the application's origin, every time that page instance is rendered.\n\nAn application is affected only where it has explicitly added AjaxNewWindowNotifyingBehavior to a component. No part of the framework installs the behaviour, so an application that does not use it is not affected. The name the behaviour generates for itself, when the browser reports no name at all, is a random UUID and is not client-supplied.\n\nThis issue affects Apache Wicket: from 8.0.0 through 8.19.0, from 9.0.0 through 9.24.0, from 10.0.0 through 10.11.0.\n\nUsers are recommended to upgrade to version 8.20.0, 9.25.0 or 10.12.0, which fix the issue.","summary":"Apache Wicket's AjaxNewWindowNotifyingBehavior stores the browser's window.name and writes it unescaped into page JavaScript. A crafted window name can break out of the string and run script in the application's origin on every render of that page.","severity":"high","cvss":7.6,"epss":null,"exploited":false,"exploited_at":null,"products":[],"ecosystems":[],"tags":["apache-wicket","java","package","web-apps"],"not_affected_if":["behaviour-not-used","outside-affected-version-ranges"],"how_to_check":"- Search the application source for `AjaxNewWindowNotifyingBehavior`; the issue only applies where it has been added to a component.\n- Check the Wicket version in the build file against the affected ranges: `8.0.0` to `8.19.0`, `9.0.0` to `9.24.0`, `10.0.0` to `10.11.0`.","fix":"- Apache Wicket `8.20.0`\n- Apache Wicket `9.25.0`\n- Apache Wicket `10.12.0`","status":"open","published_at":"2026-11-01T23:17:29+00:00","first_seen_at":"2026-11-01T23:22:39+00:00","triaged_at":"2026-11-01T23:23:22+00:00","updated_at":"2026-11-01T23:23:22+00:00","category":"package","confidence":0.8,"triage":{"at":"2026-11-01T23:23:22Z","model":"claude-haiku-5-5","output":{"fix":"- Apache Wicket `8.20.0`\n- Apache Wicket `9.25.0`\n- Apache Wicket `10.12.0`","reach":"internet","title":"Apache Wicket: remembered window name lets a page run attacker script","impact":"high","summary":"Apache Wicket's AjaxNewWindowNotifyingBehavior stores the browser's window.name and writes it unescaped into page JavaScript. A crafted window name can break out of the string and run script in the application's origin on every render of that page.","audience":"developers","category":"package","nicknames":[],"who_cares":["apache-wicket","java","web-apps"],"confidence":0.8,"fix_status":"available","needs_auth":"unknown","worst_case":"Attacker script runs in the application's origin on every page render","analyst_note":"","how_to_check":"- Search the application source for `AjaxNewWindowNotifyingBehavior`; the issue only applies where it has been added to a component.\n- Check the Wicket version in the build file against the affected ranges: `8.0.0` to `8.19.0`, `9.0.0` to `9.24.0`, `10.0.0` to `10.11.0`.","plain_action":"","needs_analyst":false,"not_affected_if":["behaviour-not-used","outside-affected-version-ranges"],"who_is_affected":"Only applications that have explicitly added AjaxNewWindowNotifyingBehavior to a component are exposed, since the framework does not install it by default. Any app on an affected Wicket line that uses this behaviour should move to a fixed version; apps that do not use it can skip it.","user_interaction":"unknown","needs_special_setup":"yes","severity_if_unknown":"unknown"},"cost_usd":0.000751,"input_tokens":4571,"output_tokens":588,"severity_before":"high"},"analyst_status":null,"analyst_note":null,"search":"'-2026':13A,16A '-82956':14A,17A '10.0.0':336C '10.11.0':338C '10.12.0':349C '8.0.0':328C '8.19.0':330C '8.20.0':346C '9.0.0':332C '9.24.0':334C '9.25.0':347C 'add':273C 'affect':267C,296C,324C 'ajax':165C,196C 'ajaxnewwindownotifyingbehavior':29B,274C 'apach':1A,19B,26B,75C,325C 'apache-wicket':18B 'app':25B 'appli':228C 'applic':57B,254C,265C,288C 'ask':94C 'attack':10A 'behaviour':122C,159C,285C,300C 'break':47B 'browser':32B,89C,96C,115C,306C 'build':160C 'call':166C,197C 'caller':204C 'client':224C,320C 'client-suppli':223C,319C 'compon':277C 'contain':237C 'craft':43B 'cve':12A,15A 'emit':207C 'end':241C 'escap':211C,216C 'everi':61B,151C,257C 'explicit':272C 'field':119C,124C 'fix':351C 'framework':282C 'generat':73C,301C 'improp':66C 'input':69C 'instal':283C 'instanc':82C,148C,157C,261C 'issu':323C,353C 'java':21B 'javascript':41B,177C,190C 'later':152C 'let':6A 'listen':198C 'liter':179C,243C 'long':144C 'name':5A,45B,221C,236C,298C,309C 'neutral':67C 'noth':212C 'notic':78C 'open':85C 'org.apache.wicket.ajax.ajaxnewwindownotifyingbehavior':77C 'origin':59B,256C 'packag':22B 'page':8A,40B,65B,72C,81C,129C,140C,147C,156C,187C,260C 'paramet':109C 'part':126C,279C 'path':215C 'precondit':162C,184C,193C 'quot':176C,209C,240C 'random':314C 'raw':189C 'reach':103C 'recommend':341C 'rememb':3A,112C,135C,170C,235C 'render':62B,153C,263C 'report':116C,307C 'request':108C 'rest':246C 'run':9A,53B,249C 'script':11A,54B,200C,251C 'second':88C 'serial':131C 'server':105C 'singl':175C,239C 'single-quot':174C 'state':132C 'stay':137C 'store':30B,141C 'string':51B,178C 'substitut':168C 'suppli':201C,225C,321C 'tab':92C 'time':258C 'unescap':38B 'upgrad':343C 'use':292C 'user':339C 'uuid':315C 'valid':230C 'valu':99C,136C,171C,218C 'version':345C 'web':24B,71C 'web-app':23B 'wicket':2A,20B,27B,76C,181C,227C,326C 'window':4A,44B,90C,220C 'window.name':34B,101C 'windownam':110C 'without':208C 'write':36B,182C","nicknames":[],"mitigations":[],"who_affected":"Only applications that have explicitly added AjaxNewWindowNotifyingBehavior to a component are exposed, since the framework does not install it by default. Any app on an affected Wicket line that uses this behaviour should move to a fixed version; apps that do not use it can skip it.","tier":"B","verified":{},"analyst_revisit_at":null,"fix_status":"available","audience":"developers","plain_action":null,"first_public_at":"2026-11-01T23:17:29+00:00","kev":null,"cvss_vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:P/VC:H/VI:H/VA:N/SC:N/SI:N/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":"security@apache.org","poc_count":0,"sources":[{"source":"nvd","external_id":"CVE-2026-82956","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-82956","severity":null,"published_at":"2026-11-01T23:17:29+00:00","modified_at":"2026-11-01T23:17:29+00:00","first_seen_at":"2026-11-01T23:22:39+00:00","fetched_at":"2026-11-01T23:22:39+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"}