Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessObtain bound Wicket session
-
DeliveryRead resource name from page
-
ExploitOpen WebSocket naming the resource
-
ExecutionReach onConnect/onMessage unchecked
-
ImpactDrive resource callbacks with chosen payload
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V8 - Authorization Authorization checks on every request
MITRE ATT&CK
1 technique across 1 tactic: Privilege Escalation The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires a specific, non-default application pattern: the app must register an org.apache.wicket.protocol.ws.api.WebSocketResource as a shared resource AND depend on the Wicket IAuthorizationStrategy (e.g. an @AuthorizeResource annotation) to restrict access to it - apps that do not expose WebSocketResource shared resources, or that already gate them with an IWebSocketConnectionFilter, are not affected. The attacker needs a bound Wicket session (trivially obtained by any visitor, not true authentication) and the resource name, which Wicket writes into the page that opens the connection and is therefore not secret. Limiting factors: impact is bounded to whatever the targeted resource's callbacks do with an attacker-supplied message, and the connection registers under the attacker's own session, giving no access to other users' connections. |
| Impact | This is a genuine but constrained authorization-bypass (CWE-862) in Apache Wicket's native WebSocket transport, best characterized as a moderate, conditional issue rather than a top-tier emergency. The vendor CVSS 4.0 vector (AV:N/AC:L/AT:P/PR:N/UI:N) scores 6.3 and signals network reach with no privileges or user interaction, but the AT:P flag (attack requirement) is material: the flaw only exists where an application both registers a WebSocketResource as a shared resource AND relies on IAuthorizationStrategy to restrict it. Impact is explicitly limited (VC:L/VI:L/VA:N) - the caller gains only whatever that specific resource's onConnect/onMessage callbacks do with an attacker-chosen text or binary message, scoped to the caller's own session, so there is no cross-user access and no availability impact. No KEV listing, no EPSS score, and no PoC or exploit reference are present in the input, so exploitation signals are all absent rather than conflicting: exploitation status is 'no public exploit identified at time of analysis.' The vuln.today decision label is 'this_month,' consistent with a patch-this-cycle priority rather than act_now/emergency. Note one signal to verify: CVSS marks PR:N, yet the description requires a 'bound Wicket session' - a session is trivially obtained by any visitor and is not authentication, so PR:N is defensible, but teams relying on CVSS alone should understand the real gate is the vulnerable app pattern, not network exposure. |
| Exploit ScenarioDerived | An application registers a WebSocketResource as a shared resource and annotates it with @AuthorizeResource expecting the authorization strategy to block unauthorized users. A remote attacker who can obtain a Wicket session reads the resource name (Wicket writes it into the page that opens the connection, so it is not secret), opens a WebSocket naming that resource, and reaches onConnect() and onMessage() directly - the authorization check is never consulted. No public exploit code or PoC reference is identified in the available data. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Nov 01, 2026
Missing authorization in Apache Wicket's native WebSocket transport allows a remote caller who holds a bound Wicket session to invoke the callbacks of a registered WebSocketResource shared resource without the application's IAuthorizationStrategy ever being consulted, so class-level restrictions such as @AuthorizeResource are silently ignored. The flaw is unauthenticated per the CVSS vector (PR:N) and affects Wicket 8.0.0 through 8.19.0, 9.0.0 through 9.24.0, 10.0.0 through 10.11.0, and older unsupported 7.x releases, but only where an application registers a WebSocketResource as a shared resource and relies on the authorization strategy to protect it. Impact is bounded to whatever the targeted resource's onConnect() and onMessage() callbacks do with an attacker-supplied text or binary message, and because the connection registers under the caller's own session there is no path to another user's connection; no public exploit code has been identified at time of analysis, and the vendor has released fixed versions 8.20.0, 9.25.0 and 10.12.0.
RemediationAI
Upgrade to a fixed release: Apache Wicket 8.20.0 for the 8.x line, 9.25.0 for the 9.x line, or 10.12.0 for the 10.x line, as directed by the advisory at https://lists.apache.org/thread.html/0lj9og7vp22ps77nrwdj42f64cfb9g4c; the vendor-released patch is the only complete fix because it restores the authorization check on the WebSocket call path itself. Where an immediate upgrade is not possible, two workarounds are available and both must be applied deliberately rather than assumed. The first is to register an IWebSocketConnectionFilter through WebSocketSettings#setConnectionFilter() that rejects unauthorized connections before the resource is resolved; the trade-off is that this filter becomes the sole authorization gate for every WebSocket connection, so it must be written to cover all registered resources and kept in sync as new ones are added, and an overly broad rule will drop legitimate clients. The second is to repeat the authorization check at the start of each callback (onConnect() and both onMessage() overloads), which confines the change to the affected resource but relies on every callback being audited and on future callbacks being treated the same way, so a single missed entry point reopens the bypass. Inventories should first be filtered to deployments that register a WebSocketResource as a shared resource, since only those carry exposure.
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
Wicket's native WebSocket support routes an incoming frame through org.apache.wicket.protocol.ws.api.WebSocketMessageBroadcastHandler, which resolves the shared resource named by the client's handshake parameter and calls WebSocketResource#onPayload() on it directly. The framework's single enforcement point for this check is org.apache.wicket.request.handler.resource.ResourceRequestHandler, which the WebSocket transport never passes through, and WebSocketResource#respond() is both final and empty - so no code path reaching a WebSocketResource ever asks the configured IAuthorizationStrategy#isResourceAuthorized(). This is a CWE-862 (Missing Authorization) defect: the authorization decision exists and is correctly implemented, but is simply not on the WebSocket call path. Because a request naming a resource is served with a throwaway page, no application page is involved, and every callback of the resource - onConnect() and both onMessage() overloads - is reachable this way, with anything the resource pushes back through WebSocketRequestHandler delivered to the caller's own connection. The resource name is not a secret: Wicket embeds it in the page that opens the connection, so discovery is trivial once a session exists. Whether a given deployment is actually exposed therefore depends entirely on its registration pattern rather than on any code-level subtlety.
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:N/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N
PR:N because a bound session is trivially obtained and the resource name is public; C:L/I:L and A:N because impact is limited to the targeted resource's callbacks with no availability effect.
Primary rating from Vendor (apache).
CVSS VectorVendor: apache
DescriptionCVE.org
Missing authorization in Apache Wicket.
org.apache.wicket.protocol.ws.api.WebSocketMessageBroadcastHandler, the request handler Wicket's native WebSocket support uses to deliver an incoming frame, resolves the shared resource named by the client's handshake parameter and calls WebSocketResource#onPayload() on it directly, without consulting IAuthorizationStrategy#isResourceAuthorized(). That method has a single enforcement point in the framework, org.apache.wicket.request.handler.resource.ResourceRequestHandler, which the WebSocket transport does not pass through, and WebSocketResource#respond() is final and empty. No route to a WebSocketResource therefore asks the configured authorization strategy whether the caller may use it, and an @AuthorizeResource annotation on such a class has no effect.
A caller needs a bound Wicket session and the name of the resource. The name is not a secret: Wicket writes it into the page that opens the connection. No page of the application is otherwise involved, because a request naming a resource is served with a throwaway page. All of the resource's callbacks are reached this way, including onConnect() and both onMessage() overloads, and what a callback pushes back through WebSocketRequestHandler goes to the caller's own connection.
An application is affected where it registers a WebSocketResource as a shared resource and relies on the authorization strategy to restrict it. What the caller gains is whatever that resource's callbacks do with a text or binary message of the caller's choosing. The connection is registered under the caller's own session, so it gives no access to another user's connection.
As a workaround, reject unauthorized connections with an IWebSocketConnectionFilter registered through WebSocketSettings#setConnectionFilter(), or repeat the authorization check at the start of each callback.
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. Older, unsupported releases from 7.0.0 onwards are also affected. Users are recommended to upgrade to version 8.20.0, 9.25.0 or 10.12.0, which fix the issue.
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
Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.
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
Cross-site scripting in Apache Wicket 8.0.0 through 8.19.0 lets remote attackers get script executed in the application'
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
EUVD-2026-114886
GHSA-fcp8-rfgx-8mhm
NVD
CVE.org
EPSS
VulDB
Exploit-DB