CVE-2026-75802: Apache Wicket: XSS in AjaxEditableLabel and its subclasses via IChoiceRenderer and defaultNullLabel
AjaxEditableChoiceLabel in wicket-extensions, when constructed with a non-null IChoiceRenderer, writes the display value obtained from that renderer into the label's markup without applying the HTML escaping Wicket performs by default for component model values. An attacker who can influence the choice or model data rendered by such a label can inject HTML or script that executes in the browser of any user who views the page. The same value is correctly escaped when the component's dropdown editor renders it as an option, so only the label rendering is affected.
AjaxEditableLabel, AjaxEditableChoiceLabel and AjaxEditableMultiLineLabel write the value returned by the protected defaultNullLabel() method into the label's markup the same way when the component's model is empty, while the model value they show otherwise is escaped. The default implementation returns a constant, so an application is affected where it overrides that method and returns a value an attacker can influence.
Neither value could be escaped by configuration, because escapeModelStrings had no effect on any of the three components: it is read by the label they render with rather than by the component itself, and nothing carried the setting across.
This issue affects Apache Wicket: from 8.0.0 through 8.18.0, from 9.0.0 through 9.23.0, from 10.0.0 through 10.10.0. Older, unsupported releases are also affected; the display value from the renderer since 6.22.0 and the null label since 1.4.0. Users are recommended to upgrade to version 8.19.0, 9.24.0 or 10.11.0, which fix the issue.
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Upgrade
Upgrade
Apache Wicketto a version that resolves this vulnerability.Fixed in 8.19.0 - Upgrade
Upgrade
Apache Wicketto a version that resolves this vulnerability.Fixed in 9.24.0 - Upgrade
Upgrade
Apache Wicketto a version that resolves this vulnerability.Fixed in 10.11.0 - Upgrade
Upgrade to a fixed release to a version that resolves this vulnerability.
Patch CVE-2026-75802
Event History
Frequently Asked Questions
Which application patterns should be prioritized for review?
Review uses of AjaxEditableChoiceLabel constructed with a non-null IChoiceRenderer where an untrusted party can influence the choice or model data used for the displayed label. Also review AjaxEditableLabel, AjaxEditableChoiceLabel, and AjaxEditableMultiLineLabel subclasses that override defaultNullLabel() and can return attacker-influenced content when their model is empty.
What access does an attacker need to exploit this issue?
The attacker must be able to influence data that is rendered as the label display value, either through the choice or model data used by a non-null IChoiceRenderer or through an attacker-influenced value returned by an overridden defaultNullLabel(). Successful exploitation requires a user to view the affected page in a browser.
Is the editable dropdown option rendering also vulnerable?
No. The display value is correctly escaped when the dropdown editor renders it as an option; the unescaped output is limited to the label rendering.
Can escapeModelStrings be used as a temporary mitigation?
No. escapeModelStrings has no effect on these three components because it is read by the label they render rather than by the component itself.