Goal Reached Thanks to every supporter — we hit 100%!

Goal: 1000 CNY · Raised: 1359 CNY

100%

CVE-2026-95863— Apache Wicket: XSS via a component id or markup id written unescaped into generated JavaScript and markup

Quick assessment

Affected
Apache Software Foundation Apache Wicket
Exploitation
No confirmed in-the-wild exploitation; assess based on exposure
Recommended action
Check the vendor advisory and references for a fixed version. If immediate upgrade is impossible, restrict exposure and increase monitoring.

Apache Wicket 在生成网页时未能正确净化输入数据,存在安全漏洞。 Apache Wicket 会生成引用其所渲染元素的 JavaScript 代码,并将两个由其自身生成的值写入该 JavaScript:组件的标记 ID(markup id)和表单组件的输入名称(input name,该名称由组件 ID 构建而成)。这两个值均被直接放入单引号包裹的 JavaScript 字符串字面量中,且未针对该上下文进行转义。因此,若这些值包含单引号或反斜杠,将导致字符串字面量提前终止,其后的内容会被解析为脚本,并在页

CVSS 7.6 · High

Possible ATT&CK Techniques 1 AI

T1193
Get alerts for future matching vulnerabilities Log in to subscribe

I. Basic Information for CVE-2026-95863

Vulnerability Information

Have questions about the vulnerability? See if Shenlong's analysis helps!
View Shenlong Deep Dive ↗

Although we use advanced large model technology, its output may still contain inaccurate or outdated information.Shenlong tries to ensure data accuracy, but please verify and judge based on the actual situation.

Vulnerability Title
Apache Wicket: XSS via a component id or markup id written unescaped into generated JavaScript and markup
Source: CVE Program / CVE List V5
Vulnerability Description
Improper neutralization of input during web page generation in Apache Wicket. Apache Wicket generates JavaScript that refers to the elements it renders, and writes into that JavaScript two values it derives itself: a component's markup id, and the input name of a form component, which is built from component ids. Both are placed inside single-quoted JavaScript string literals without being escaped for that context, so a value containing a single quote or a backslash ends the literal, and what follows is parsed as script and runs in the application's origin when the page loads. A markup id is the value passed to org.apache.wicket.Component#setMarkupId(String), or the id attribute written in the component's markup, or an id Wicket generates, in that order. The first two are supplied by the application in an HTML context, where both characters are legal and where Wicket escapes them correctly when it writes the same value into the id attribute of the element; a generated id cannot contain either. An input name is derived from the ids of the components between the form and the form component, and a component id was rejected only for ':' and '~'. In org.apache.wicket:wicket-core on 9.x and 10.x, org.apache.wicket.markup.head.OnEventHeaderItem#forMarkupId(String, String, CharSequence) quotes the id it is given into a Wicket.Event.add call, and components in both wicket-core and wicket-extensions reach it through #forComponent(Component, String, CharSequence). On every affected version, org.apache.wicket.markup.html.form.Form writes its markup id and the id of its hidden-fields container into such literals, org.apache.wicket.markup.html.form.FormComponentUpdatingBehavior writes an input name, and org.apache.wicket.markup.html.form.upload.MultiFileUploadField writes two markup ids and an input name. On 8.x, Form also writes an input name into the action of a submitting link, and on 8.x and 9.x Form#appendDefaultButtonField writes an input name into a name attribute with no escaping at all, so a value containing a double quote escapes the attribute into markup. org.apache.wicket:wicket-extensions is affected in its own right and not only through wicket-core: AjaxEditableLabel, AjaxIndicatorAppender, AjaxDisableComponentListener, UploadProgressBar, KittenCaptchaPanel, Palette, FilterForm and, on 9.x and 10.x, TrapFocusBehavior and AjaxListPanel each build their own JavaScript containing a markup id. An application is affected where a markup id or a component id carries one of those characters. Wicket does not put one there itself, so the value comes from the application: an id set on a component, an id attribute in a template, or a component id derived from data. None of those is a JavaScript context from the application's point of view. The Content-Security-Policy that Apache Wicket 9.x and 10.x send by default does not prevent this. The generated script is written into a script element carrying the per-response nonce, so the injected code is part of a script the policy admits. The fixed versions check an id where it enters instead of escaping each place it is written. A component id and a markup id may no longer contain a quote, a backquote, a backslash, braces, angle brackets, a semicolon, an ampersand or a control character, and a markup id may not contain parentheses or square brackets either; a component constructed with such an id, or given such a markup id, fails with an exception. 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.
Source: CVE Program / CVE List V5
CVSS Information
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
Source: CVE Program / CVE List V5
Vulnerability Type
在Web页面生成时对输入的转义处理不恰当(跨站脚本)
Source: CVE Program / CVE List V5

Affected Products

Vendor Product Affected Versions CPE Subscribe
Apache Software Foundation Apache Wicket 8.0.0 ~ 8.19.0 -

II. Public POCs for CVE-2026-95863

# POC Description Source Link Shenlong Link
AI-Generated POC Premium

No public POC found.

Login to generate AI POC

III. Intelligence Information for CVE-2026-95863

请登录查看更多情报信息。

Other References for CVE-2026-95863 (1)

Same Patch Batch · Apache Software Foundation · 2026-11-01 · 19 CVEs total

CVE-2026-84170 8.3 HIGH Apache Wicket: Configured upload limits are not enforced by the standalone file upload res
CVE-2026-83594 8.3 HIGH Apache Wicket: FileUploadToResourceField accepts a client-asserted upload result and alloc
CVE-2026-111089 7.6 HIGH Apache Wicket: XSS via a resource bundle text written unescaped into generated JavaScript
CVE-2026-82956 7.6 HIGH Apache Wicket: XSS in AjaxNewWindowNotifyingBehavior via the client-supplied window name
CVE-2026-84231 7.4 HIGH Apache Wicket: XSS in ExternalLink via the model URL when the component is bound to a non-
CVE-2026-83559 7.4 HIGH Apache Wicket: JavaScriptUtils#escapeQuotes does not escape the backslash, so its output c
CVE-2026-83539 7.4 HIGH Apache Wicket: XSS in SmartLinkLabel and SmartLinkMultiLineLabel via a javascript: URL in
CVE-2026-82840 7.2 HIGH Apache Wicket: The session id is renewed only on the first sign in, not on re-authenticati
CVE-2026-82557 6.9 MEDIUM Apache Wicket: A disabled or invisible form submitting component is still invoked on a pla
CVE-2026-82704 6.9 MEDIUM Apache Wicket: A listener is invoked on a page instance the request itself created and nev
CVE-2026-82115 6.3 MEDIUM Apache Wicket: The configured authorization strategy is not applied to a shared WebSocketR
CVE-2026-82705 6.3 MEDIUM Apache Wicket: The configured authorization strategy is not applied to an IResource embedd
CVE-2026-84172 6.3 MEDIUM Apache Wicket: Component markup is served as a package resource when wicket-core has its o
CVE-2026-84177 6.3 MEDIUM Apache Wicket: A component's markup is served as a package resource when its class name co
CVE-2026-82559 2.3 LOW Apache Wicket: WebSocket messages are processed against an HTTP session snapshot that surv
CVE-2026-82558 2.3 LOW Apache Wicket: WebSocketBehavior delivers client messages to a component the client may no
CVE-2026-87718 2.3 LOW Apache Wicket: CSP headers silently omitted for pages served through nested request handle
CVE-2026-82898 2.1 LOW Apache Wicket: A cross-origin listener invocation stopped by a login wall is replayed afte

IV. Related Vulnerabilities