CVE-2026-83559: Apache Wicket: JS escaping flaw enables XSS
HIGHApache Wicket's JavaScriptUtils#escapeQuotes() fails to escape backslashes, so an attacker-controlled value that contains a backslash before a quote can break out of a JavaScript string literal and run script in the victim's session. This is a generic Java web framework flaw, not an AI-specific one. It matters to AI teams only where Wicket serves ML dashboards, model-management consoles, or internal AI tooling. No CVSS, EPSS, KEV or SSVC data is available yet, and no public exploit or Nuclei template exists, so urgency rests on the high severity rating alone. Exposure is conditional: an application is affected only if it passes attacker-influenced data through the method, or uses AjaxEditableLabel with a custom validation message that interpolates the submitted input (the default Wicket bundles do not). Inventory Wicket-based applications and upgrade to 8.20.0, 9.25.0 or 10.12.0, prioritizing apps that handle sensitive model, data or admin sessions.
What is the risk?
Risk is moderate to high but conditional. The flaw is network-reachable and gives script execution in the user's origin and session. It requires a code path that places attacker-influenced data into a JavaScript string literal, and the victim must view the affected page or Ajax response. Without a CVSS score or EPSS data, exploitation likelihood is unquantified, there is no known public exploit, and it is not in CISA KEV. AI/ML relevance is indirect: the package is not in our tracked AI package list and the 'ml_ui' category is a loose fit. Real exposure exists only if Wicket fronts AI/ML administration or data-labeling interfaces.
How does the attack unfold?
How severe is it?
What should I do?
5 stepsUpgrade Apache Wicket to 8.20.0, 9.25.0 or 10.12.0. Wicket 7.x and older are unsupported, so migrate to a supported line.
Inventory applications and dependencies, including transitive and third-party components, that call JavaScriptUtils.escapeQuotes().
Until patched, avoid placing user-influenced data into JavaScript string literals. Review AjaxEditableLabel validators and remove any custom message that interpolates the submitted input or other attacker-influenced variables.
Add a strict Content-Security-Policy that disallows inline script, and set HttpOnly and SameSite attributes on session cookies to limit impact.
Detection: review Ajax responses and WAF or application logs for backslash-quote sequences (\\' or \\") in form inputs and validation-failure paths, and watch for unexpected script-like content in submitted values.
How is it classified?
Which compliance frameworks are affected?
This CVE is relevant to:
Frequently Asked Questions
What is CVE-2026-83559?
Apache Wicket's JavaScriptUtils#escapeQuotes() fails to escape backslashes, so an attacker-controlled value that contains a backslash before a quote can break out of a JavaScript string literal and run script in the victim's session. This is a generic Java web framework flaw, not an AI-specific one. It matters to AI teams only where Wicket serves ML dashboards, model-management consoles, or internal AI tooling. No CVSS, EPSS, KEV or SSVC data is available yet, and no public exploit or Nuclei template exists, so urgency rests on the high severity rating alone. Exposure is conditional: an application is affected only if it passes attacker-influenced data through the method, or uses AjaxEditableLabel with a custom validation message that interpolates the submitted input (the default Wicket bundles do not). Inventory Wicket-based applications and upgrade to 8.20.0, 9.25.0 or 10.12.0, prioritizing apps that handle sensitive model, data or admin sessions.
Is CVE-2026-83559 actively exploited?
No confirmed active exploitation of CVE-2026-83559 has been reported, but organizations should still patch proactively.
How to fix CVE-2026-83559?
1. Upgrade Apache Wicket to 8.20.0, 9.25.0 or 10.12.0. Wicket 7.x and older are unsupported, so migrate to a supported line. 2. Inventory applications and dependencies, including transitive and third-party components, that call JavaScriptUtils.escapeQuotes(). 3. Until patched, avoid placing user-influenced data into JavaScript string literals. Review AjaxEditableLabel validators and remove any custom message that interpolates the submitted input or other attacker-influenced variables. 4. Add a strict Content-Security-Policy that disallows inline script, and set HttpOnly and SameSite attributes on session cookies to limit impact. 5. Detection: review Ajax responses and WAF or application logs for backslash-quote sequences (\\' or \\") in form inputs and validation-failure paths, and watch for unexpected script-like content in submitted values.
What systems are affected by CVE-2026-83559?
This vulnerability affects the following AI/ML architecture patterns: ML administration and dashboard web UIs built on Apache Wicket, Model management and registry consoles, Data labeling and annotation tools, Java-based web front ends to AI services.
What is the CVSS score for CVE-2026-83559?
No CVSS score has been assigned yet.
What is the AI security impact?
Affected AI Architectures
MITRE ATLAS Techniques
AML.T0049Exploit Public-Facing ApplicationCompliance Controls Affected
What are the technical details?
Original Advisory
Improper encoding or escaping of output in Apache Wicket. org.apache.wicket.core.util.string.JavaScriptUtils#escapeQuotes() replaces each single quote in its input with a backslash and a single quote, and each double quote with a backslash and a double quote, so that the value can be placed inside a JavaScript string literal. It does not escape the backslash, which is the character that has to be escaped, and escaped first, for the rest of that escaping to hold. A value that already holds a backslash immediately before a quote therefore ends up with two backslashes in front of that quote: the first escapes the second, the quote itself is left unescaped, and it closes the literal. Whatever the value carries after that point is no longer text but JavaScript, and it runs in the application's origin and in the session of the user looking at the page. The method is public, is not deprecated, and its documentation states that its result can be part of a JavaScript call such as an alert; the only limitation it notes concerns JSON values, which need different escaping. An application is affected wherever it calls the method itself and places the result inside a JavaScript string literal, from its own code or from a component of its own or of a third party, and the value it escapes holds data an attacker can influence. There is no further condition, and no component of Wicket has to be involved: the application is using the method for what its documentation offers, and the method does not deliver it. Two components shipped with Wicket Extensions pass a value through the method. org.apache.wicket.extensions.ajax.markup.html.AjaxEditableLabel writes the editor's first error feedback message into a single-quoted JavaScript string literal in the Ajax response, so an application is affected through that component where the message shown for a failed edit holds data an attacker can influence, whether that is the submitted value itself or another variable the application sets on the validation error. A validation message can carry the submitted value, because input is a message variable that every form component supplies for its own validation errors, and the documentation shows overriding a validator's message to include it; none of the message bundles shipped with Wicket interpolates it, so an application that has not written such a message is not affected through this component. org.apache.wicket.extensions.ajax.markup.html.repeater.AjaxListPanel passes the serialized markup tag of an appended component through the method and is not affected: the tag comes from the panel's own markup file, and a quote in any of its attribute values, the component's markup id included, is written as a character reference by the tag serialization and cannot close the literal. This 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. Users of Apache Wicket 7.x or older, which are no longer supported, should upgrade to a supported version. Users are recommended to upgrade to version 8.20.0, 9.25.0 or 10.12.0, which fix the issue.
Exploitation Scenario
An organization runs an internal Wicket-based console for managing ML datasets and model deployments. A form uses AjaxEditableLabel, and the team wrote a custom validator message that includes the submitted value. An attacker with low-privilege access submits a value containing a backslash before a quote, followed by JavaScript. The failed-validation Ajax response writes the message into a single-quoted JavaScript literal. The doubled backslash leaves the quote unescaped, the literal closes, and the payload runs. The script then steals the session or calls the console's APIs to read dataset locations, rotate keys, or change model deployment settings, using the victim's privileges. The same effect applies if the victim is lured into submitting the crafted value.
Weaknesses (CWE)
CWE-116 — Improper Encoding or Escaping of Output: The product prepares a structured message for communication with another component, but encoding or escaping of the data is either missing or done incorrectly. As a result, the intended structure of the message is not preserved.
- [Architecture and Design] Use a vetted library or framework that does not allow this weakness to occur or provides constructs that make this weakness easier to avoid. For example, consider using the ESAPI Encoding control [REF-45] or a similar tool, library, or framework. These will help the programmer encode outputs in a manner less prone to error. Alternately, use built-in functions, but consider using wrappers in case those functions are discovered to have a vulnerability.
- [Architecture and Design] If available, use structured mechanisms that automatically enforce the separation between data and code. These mechanisms may be able to provide the relevant quoting, encoding, and validation automatically, instead of relying on the developer to provide this capability at every point where output is generated. For example, stored procedures can enforce database query structure and reduce the likelihood of SQL injection.
Source: MITRE CWE corpus.
Timeline
Related Vulnerabilities
CVE-2025-5952810.0Flowise: Unauthenticated RCE via MCP config injection
Same attack type: Code ExecutionCVE-2024-291210.0BentoML: RCE via insecure deserialization (CVSS 10)
Same attack type: Code ExecutionCVE-2023-376510.0MLflow: path traversal allows arbitrary file read
Same attack type: Data LeakageCVE-2025-512010.0smolagents: sandbox escape enables unauthenticated RCE
Same attack type: Data LeakageCVE-2026-2185810.0n8n: Input Validation flaw enables exploitation
Same attack type: Code Execution