Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessSubmit URL with apostrophe-breakout payload into model data
-
DeliveryWicket renders ExternalLink onclick handler on non-anchor tag
-
ExploitVictim activates (clicks) the element
-
ExecutionBrowser decodes entity and closes JS string literal
-
PersistInjected script executes in application origin
-
ImpactSession/credential theft or actions as victim
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Output encoding, context-aware escaping
MITRE ATT&CK
2 techniques across 2 tactics: Initial Access, Execution The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | The affected application must bind org.apache.wicket.markup.html.link.ExternalLink to a markup tag that is NOT an a, link, or area element (for example a button or span), which causes Wicket to build a JavaScript onclick handler, AND the URL in the component's model must hold data an attacker can influence (the vendor describes this as the component's ordinary use). The second affected path requires PopupSettings to be attached, placing the value into the generated window.open() call. Exploitation is unauthenticated (PR:N) and remote (AV:N) but is gated by required victim interaction - nothing executes until a user activates the element (UI:A) - and by the deployment-specific component binding (AT:P), which together are the main real-world limiting factors. Only Wicket 8.0.0 through 8.19.0 are affected; 7.x and older are end-of-life. |
| Impact | This is a genuine but conditional stored/reflected XSS (CWE-79) in Apache Wicket, scored CVSS 4.0 7.4 by the Apache reporter. The 4.0 vector CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:A reflects a network-reachable, unauthenticated (PR:N) flaw that nevertheless requires two things the attacker does not directly control: a specific application coding pattern (the AT:P attack requirement) and a victim actively activating the element (UI:A). Exploitation status is 'no public exploit identified at time of analysis' - there is no KEV listing, no POC reference, and no EPSS value supplied, so the only exploitation signal is the vendor-assigned priority of 'this_week', which indicates it should be addressed promptly but is not flagged as an emergency or as actively exploited. The high VC:H/VI:H impact is the main driver of the 7.4: successful exploitation runs arbitrary script in the application's origin, enabling session/credential theft and unauthorized actions as the victim. The practical risk is tempered by the AT:P condition - the application must bind an ExternalLink to a non-anchor tag (button/span) whose model URL carries attacker-influenced data - and by the UI requirement. Key missing data to note explicitly: EPSS is absent (exploitation probability cannot be quantified), and no POC/KEV data narrows the picture, so prioritization should rest on the vendor 'this_week' label plus the concrete affected-version range rather than on confirmed in-the-wild activity. |
| Exploit ScenarioDerived | An application uses Wicket's ExternalLink bound to a span or button (not an anchor) with a URL drawn from user-controllable data, such as a profile website field. An attacker stores a value containing an apostrophe that closes the generated single-quoted JavaScript string literal and appends script; when any user clicks the rendered element, the payload executes in the application's origin. No public exploit code has been identified, and exploitation requires that specific component-to-non-anchor binding plus a victim click. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Nov 01, 2026
Cross-site scripting in Apache Wicket 8.0.0 through 8.19.0 lets remote attackers get script executed in the application's origin when an ExternalLink component is bound to a markup tag that is not an a, link or area element (such as a button or span) and the URL held in the component's model contains attacker-influenceable data, which the vendor describes as the component's ordinary use rather than a misuse. The URL is concatenated unescaped into a single-quoted JavaScript string inside the generated onclick handler, and also into the window.open() call built by PopupSettings when popup settings are attached; only attribute-level markup escaping is applied, and the browser decodes the apostrophe character reference before compiling the handler, restoring the quote and closing the literal. Exploitation is unauthenticated and remote but conditional: nothing executes until a user activates the affected element, and the deployment must bind the component to a non-anchor tag, which the Apache reporter scores as CVSS 4.0 7.4 (AT:P, UI:A); no public exploit identified at time of analysis.
RemediationAI
Vendor-released patch: upgrade Apache Wicket to 8.20.0, which the Apache advisory states fixes the issue for the 8.x line; installations still on 7.x or earlier should migrate to a supported version since those branches are end-of-life and will not receive a fix. Until the upgrade is applied, the vulnerable code path can be avoided per the vendor's own description of the trigger: bind ExternalLink only to anchor-family tags (a, link, area) so the JavaScript click handler branch is never generated, and avoid attaching PopupSettings where the model URL is attacker-influenceable, since that path feeds the value into window.open() without JavaScript-context escaping. Neither workaround removes the underlying context-escaping defect and both require auditing each affected view template and component binding, with the trade-off that legitimate non-anchor ExternalLink rendering or popup behaviour must be redesigned. Restricting or validating the values that reach the ExternalLink model limits exposure but cannot be relied on as a complete substitute for the 8.20.0 upgrade. Advisory: https://lists.apache.org/thread.html/39kz9838w25797bpkxn1hvfsm8jtc4zv.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
Apache Wicket's org.apache.wicket.markup.html.link.ExternalLink normally renders a plain anchor, but when the markup tag it is bound to is not an a, link or area element the component instead synthesizes a JavaScript click handler and writes it into the tag's onclick attribute. The URL value from the component's model is concatenated directly into a single-quoted JavaScript string literal in that handler without JavaScript-context escaping. The neighbouring branch, taken when PopupSettings are attached, does the same thing inside the window.open() call produced by org.apache.wicket.markup.html.link.PopupSettings#getPopupJavaScript(). The only transformation applied is the standard attribute-value markup escaping performed as the tag is written, which converts an apostrophe into a character reference; because browsers decode character references in an attribute value before compiling the event handler, the apostrophe is reinstated, terminates the string literal, and the remainder of the model value is executed as script in the application's origin. This is a classic CWE-79 context-confusion flaw - markup-safe output is not JavaScript-safe output - and its real-world reach is bounded by two prerequisites captured in the assessed vector CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:C/C:H/I:H/A:N and the reporter's CVSS 4.0 AT:P: the application must be built to bind ExternalLink to a non-anchor tag (or attach PopupSettings), and a victim must act on the rendered element before anything runs. The trigger context is fully described by the vendor; what varies between deployments is which binding and popup configurations are actually in use, which cannot be determined from the advisory alone and must be verified per application.
Know when Apache Wicket gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:A/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N
Network XSS needs no auth (PR:N) but depends on a non-default ExternalLink-to-non-anchor binding (AC:H) and a victim click (UI:R); script runs in the app origin so scope changes with high C/I.
Primary rating from Vendor (apache).
CVSS VectorVendor: apache
DescriptionCVE.org
Improper neutralization of input during web page generation in Apache Wicket.
org.apache.wicket.markup.html.link.ExternalLink builds a JavaScript click handler and writes it into the tag's onclick attribute whenever the markup tag the component is bound to is not an a, link or area element. The URL held in the component's model is concatenated into a single-quoted JavaScript string literal in that handler without being escaped for that context. The same happens on the neighbouring branch, taken when popup settings are attached, where the value is concatenated into the window.open() call built by org.apache.wicket.markup.html.link.PopupSettings#getPopupJavaScript(). The only escaping applied is the markup escaping that every attribute value receives as the tag is written, which replaces an apostrophe with a character reference. A browser decodes character references in an attribute value before it compiles the event handler, so the apostrophe is restored, closes the string literal, and the rest of the model value is executed as script in the application's origin.
An application is affected where it binds an ExternalLink to a markup tag that is not an anchor, such as a button or a span, and the URL in the model holds data an attacker can influence, which is the ordinary use of the component rather than a misuse of it. Nothing runs until a user activates the element.
This issue affects Apache Wicket: from 8.0.0 through 8.19.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, which fixes the issue.
Articles & Coverage 2
Executive ViewAI
A high-severity cross-site scripting vulnerability in Apache Wicket (CVE-2026-84231) exposes organizations running versions 8.0.0 through 8.19.0 to script execution in the application's origin when external links are rendered on non-anchor elements such as buttons or spans. Users of affected applications may unknowingly trigger malicious code, potentially compromising session integrity and data confidentiality. Leadership should prioritize remediation because this flaw affects a widely used Java web framework and could enable credential theft or defacement in customer-facing applications.
No vendor-released patch identified at time of analysis. Interim mitigations include: restrict ExternalLink components to anchor, link, or area tags only; avoid binding attacker-influenceable data to URL models; apply strict input validation and context-aware output encoding to URLs; disable popup settings on affected elements; deploy a web application firewall with XSS detection rules; and conduct user awareness training on suspicious link activation.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Cross-Site Scripting occurs when an application accepts untrusted data and sends it to a web browser without proper validation or encoding.
More in Apache Wicket
View allPath traversal vulnerability in Apache Wicket's FolderUploadsFileManager allows unauthenticated attackers to read arbitr
Apache Wicket's form-less upload endpoint (AbstractFileUploadResource, the server side of FileUploadToResourceField, or
Heap-exhaustion denial of service in Apache Wicket 9.14.0 through 9.24.0 and 10.0.0 through 10.11.0, reachable without a
Cross-site scripting in Apache Wicket 8.0.0 through 8.19.0, 9.0.0 through 9.24.0 and 10.0.0 through 10.11.0 allows text
Cross-site scripting in Apache Wicket 8.0.0 through 8.19.0, 9.0.0 through 9.24.0 and 10.0.0 through 10.11.0 lets a value
Stored cross-site scripting in Apache Wicket's AjaxNewWindowNotifyingBehavior allows a client-supplied browser window na
Apache Wicket's public JavaScriptUtils.escapeQuotes() helper fails to escape backslashes before quotes, so attacker-infl
Cross-site scripting in Apache Wicket's SmartLinkLabel and SmartLinkMultiLineLabel components turns attacker-influenced
Session fixation in Apache Wicket's role-based authentication module leaves the container session id unchanged when an a
Missing authorization in Apache Wicket 8.x, 9.x and 10.x allows unauthenticated remote attackers to invoke a component's
Missing authorization in Apache Wicket 10.3.0 through 10.11.0 allows a remote unauthenticated caller to invoke the serve
Unauthenticated remote attackers can partially read and modify data in Apache Wicket versions 9.0.0 through 9.23.0 and 1
EUVD-2026-114901
GHSA-c66q-rm6m-7cvq
NVD
CVE.org
EPSS
Exploit-DB