Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessIdentify Wicket app serving restricted resource via IResource component
-
DeliveryRequest the component-listener URL rendered in the page
-
ExploitIResource#respond() invoked without authorization handler
-
ExecutionisResourceAuthorized/@AuthorizeResource check bypassed
-
ImpactRetrieve protected resource contents
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 that the application (a) restricts a resource via IAuthorizationStrategy#isResourceAuthorized() or a wicket-auth-roles @AuthorizeResource annotation, AND (b) hands that same restricted resource to a component as an IResource instance rather than as a ResourceReference - specifically ResourceLink(String, IResource), Image, ImageButton, or wicket-extensions AjaxDownloadBehavior, or any use of ExportToolbar (which internally builds export links from IResource). The decisive factor is which constructor the application used, which is invisible in the rendered page. For Image and ImageButton the listener URL is written into the tag's src attribute, so no user interaction is needed - the browser fetches it automatically. Explicit limiting factors stated in the advisory: applications that do not restrict resources at all are not affected, and resources that are only mounted or registered as shared resources (served through ResourceRequestHandler) are not affected because that handler does consult the authorization strategy. |
| Impact | The vendor-supplied CVSS 4.0 vector (CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:L/VI:L/VA:N, base 6.3, medium) is the only quantitative signal in the input: EPSS is not provided and the issue is not listed in CISA KEV, so there is no public-exploitation telemetry to weigh. AV:N/PR:N/UI:N means a remote, unauthenticated request can reach the flaw, and AC:L means the attacker side is simple; the moderating factor is AT:P (an attack requirement), which here corresponds to the fact that the target application must have been written using the vulnerable IResource-constructor pattern against an authorization-restricted resource - the condition is a property of the deployed application, not something the attacker controls or something visible in the rendered page. Impact is deliberately scored low (VC:L/VI:L, VA:N): the flaw exposes or serves a resource that should have been authorization-checked (e.g. data-table exports, model-backed images), not full system compromise. The vuln.today decision label is 'this_month' rather than 'act_now' or 'emergency', and there is no public exploit reference, so this is a genuine but conditional authorization-enforcement gap of moderate priority - not a drop-everything issue, but one that matters specifically for Wicket applications that rely on isResourceAuthorized()/@AuthorizeResource. Missing signals to note: no EPSS score and no KEV entry were supplied, so widespread or active exploitation can neither be confirmed nor ruled out from this data. |
| Exploit ScenarioDerived | A Wicket application protects a resource (for example data-table exports via @AuthorizeResource, or a model-backed Image) with a custom isResourceAuthorized() check, but hands that same resource to a component as an IResource - such as ExportToolbar, which builds every export link from an IResource instance. Because Image/ImageButton write the component-listener URL into the rendered src attribute, an unauthenticated attacker (or even a victim browser) can request that listener URL directly and receive the resource's contents without the authorization strategy ever being consulted. No public exploit was identified at time of analysis. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Nov 01, 2026
Apache Wicket's resource authorization check is bypassed when a restricted resource is served through a component that was constructed with an IResource instance instead of a ResourceReference. The framework enforces IAuthorizationStrategy#isResourceAuthorized() and the wicket-auth-roles @AuthorizeResource annotation at only one point - ResourceRequestHandler - so ResourceLink(String, IResource), Image, ImageButton and AjaxDownloadBehavior call IResource#respond() directly from their own request listener and never consult the strategy; for Image and ImageButton the listener URL is written into the tag's src attribute, so a browser fetches the protected content with no user action. Affected versions are 8.0.0 through 8.19.0, 9.0.0 through 9.24.0 and 10.0.0 through 10.11.0; only applications that actually restrict a resource and then hand that same instance to one of these components are exposed, and ExportToolbar in wicket-extensions triggers the pattern for data-table exports. No public exploit code and no confirmed active exploitation were identified at time of analysis, and EPSS data was not provided; severity is rated medium (vendor CVSS 4.0 base 6.3).
RemediationAI
Vendor-released patch: upgrade to Apache Wicket 8.20.0, 9.25.0 or 10.12.0, which fix the issue for the 8.x, 9.x and 10.x branches respectively; the vendor advisory is at https://lists.apache.org/thread.html/t9y3sho3wkqkr1vsf74xn8tzmgdr1tgo. Applications that cannot upgrade immediately can apply the workaround documented by the vendor: register the resource in the application's shared resources and pass the resulting ResourceReference to the component instead of the IResource instance, so that the request is routed through ResourceRequestHandler and the authorization strategy is consulted. This requires source changes at each affected call site and does not cover components whose resource originates from the component's model; it also means auditing uses of ExportToolbar, whose export links are built internally from IResource instances and therefore need either the upgrade or replacement of that toolbar. Note that the difference between an authorized and an unauthorized usage is not visible in the rendered page - only the constructor used at build time determines it - so impacted applications need to search their codebase for ResourceLink, Image, ImageButton, AjaxDownloadBehavior and ExportToolbar construction that passes an IResource.
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
The flaw is a CWE-862 missing authorization case rooted in Apache Wicket's request-routing architecture. org.apache.wicket.authorization.IAuthorizationStrategy declares isResourceAuthorized(), and the framework has exactly one enforcement point for it: org.apache.wicket.request.handler.resource.ResourceRequestHandler, the handler that serves a resource reached through a mounted or shared ResourceReference. Components that are handed an org.apache.wicket.request.resource.IResource instance instead invoke IResource#respond() themselves from their own request listener and never construct that handler. In wicket-core these components are org.apache.wicket.markup.html.link.ResourceLink, org.apache.wicket.markup.html.image.Image and org.apache.wicket.markup.html.form.ImageButton; in wicket-extensions it is org.apache.wicket.extensions.ajax.AjaxDownloadBehavior. Which path is taken depends solely on the constructor the application chose: ResourceLink(String, ResourceReference) renders a resource URL whose request is authorized, while ResourceLink(String, IResource) renders a component listener URL that is not; Image, ImageButton and AjaxDownloadBehavior expose the same pair of constructors with the same behaviour. Image and ImageButton emit the listener URL into the src attribute of the rendered tag, so the browser requests it automatically, and an Image may additionally source its content from the component's model. The practical consequence is that an authorization decision invisible in the rendered page governs whether a restricted resource is protected. The supplied CPE (cpe:2.3:a:apache_software_foundation:apache_wicket) confirms the affected platform is the Apache Wicket framework itself. The trigger is a request routed to a component listener rather than to ResourceRequestHandler; the sources do not describe any further precondition beyond that routing and the application-side configuration.
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
Remote unauthenticated request reaches the unguarded listener URL (AV:N/PR:N/UI:N, AC:L); impact limited to disclosing/serving one authorization-restricted resource, so C:L/I:L and A:N.
Primary rating from Vendor (apache).
CVSS VectorVendor: apache
DescriptionCVE.org
Missing authorization in Apache Wicket.
org.apache.wicket.authorization.IAuthorizationStrategy declares isResourceAuthorized(), and that method has a single enforcement point in the framework: org.apache.wicket.request.handler.resource.ResourceRequestHandler, the handler that serves a resource reached through a mounted or shared ResourceReference. Components that are handed an org.apache.wicket.request.resource.IResource instance instead call IResource#respond() themselves from their own request listener and never construct that handler. In wicket-core these are org.apache.wicket.markup.html.link.ResourceLink, org.apache.wicket.markup.html.image.Image and org.apache.wicket.markup.html.form.ImageButton; in wicket-extensions it is org.apache.wicket.extensions.ajax.AjaxDownloadBehavior. A resource restricted by a custom isResourceAuthorized() implementation, or by an @AuthorizeResource annotation from wicket-auth-roles, is therefore enforced when it is requested through its own resource URL and is not enforced when the same instance is served through the component that holds it.
Which of the two happens is decided by the constructor the application used, and not by anything the application can see in the rendered page. ResourceLink(String, ResourceReference) renders a resource URL and the request is authorized; ResourceLink(String, IResource) renders a component listener URL and it is not. Image, ImageButton and AjaxDownloadBehavior each offer the same pair of constructors and behave the same way. Image and ImageButton write that listener URL into the src attribute of the tag they render, so a browser requests it without any action by the user, and the resource an Image serves may also come from the component's model.
An application is affected where it restricts a resource through IAuthorizationStrategy#isResourceAuthorized() or an @AuthorizeResource annotation and then hands that same resource to one of those components as an IResource. An application that does not restrict resources at all is not affected, and neither is a resource that is only mounted or registered as a shared resource. The pattern does not have to be written by the application itself: org.apache.wicket.extensions.markup.html.repeater.data.table.export.ExportToolbar builds each of its export links from an IResource instance, so the exported contents of a data table are served without the resource check in any application that adds that toolbar.
As a workaround, register the resource in the application's shared resources and pass the resulting ResourceReference to the component instead of the IResource, so that the request is routed through the handler that consults the authorization strategy.
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 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-114891
GHSA-c8q4-2mh6-cqxp
NVD
CVE.org
EPSS
Exploit-DB