Skip to main content

Apache Wicket CVE-2026-82704

| EUVDEUVD-2026-114890 MEDIUM
Missing Authorization (CWE-862)
2026-11-01 apache GHSA-6m6x-fvwc-5g3p
6.9
CVSS 4.0 · Vendor: apache
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Request bookmarkable listener URL omitting page identifier
  2. Delivery
    New page instance constructed, configure()/onConfigure() skipped
  3. Exploit
    Constructor-default visibility flag counts component visible
  4. Execution
    Invoke listener on RENDER-denied component
  5. Impact
    Perform unauthorized action on attacker-supplied models

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

Exploitable only against a Wicket application that withholds an individual component in one of two specific ways: (1) denying the Component.RENDER action through IAuthorizationStrategy - including MetaDataRoleAuthorizationStrategy and AuthorizeAction from wicket-auth-roles - or (2) setting the component's visible/enabled flag inside Component#onConfigure(), the callback Wicket's docs recommend for both. The page carrying that component must also be constructible from a bookmarkable or mounted URL, i.e. it must have a public constructor taking no arguments or a PageParameters argument. Attached AJAX behaviours pass the same gate and are equally exposed. Two trigger routes exist, neither needing more than a request: on a stateful page the caller omits the page identifier from the listener URL; on a page Wicket treats as stateless (which a RENDER-denied component can itself cause) Wicket already emits page-id-less listener URLs, so nothing must be altered. Limiting factors: no authentication is required (PR:N); instantiation authorization (isInstantiationAuthorized()) still runs, so page-level guards remain effective; the ENABLE decision and requests supplying a real identifier of an already-rendered page still refuse - but components disabled only in onConfigure() are protected by none of these because that callback never runs. Upgrading to 8.20.0, 9.25.0, or 10.12.0 is the stated fix.

Impact

Signals are moderate and broadly consistent. The vendor-supplied CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:N/UI:N) with a vulnerable-system impact of integrity-low only (VC:N/VI:L/VA:N, score 6.9 MEDIUM) describes a remote, unauthenticated authorization-bypass whose damage is confined to invoking a single withheld component's listener/behaviour and acting on attacker-supplied models - not data theft or service disruption. The vuln.today decision label is this_month, i.e. patch on a normal cycle rather than emergency. There is no CISA KEV listing and no EPSS score in the input, so exploitation status is: no public exploit identified at time of analysis; the only reference is the Apache advisory thread, not a PoC. The gap between the CVSS 'AC:L/PR:N' rating and real-world reach is the application-specific precondition: exploitation only matters where an app actually withholds a component via IAuthorizationStrategy RENDER denial or via onConfigure() visibility/enablement, and where the hosting page is constructible from a bookmarkable/mounted URL. This makes it a genuine but conditional priority - serious for apps using wicket-auth-roles or onConfigure-based hiding, largely moot for apps that guard whole pages (isInstantiationAuthorized() is unaffected). No key signals conflict; the main missing data is EPSS and any independent exploitation telemetry.

Exploit ScenarioDerived

An application hides an admin-only link or AJAX behaviour by denying its RENDER action (e.g. via MetaDataRoleAuthorizationStrategy/AuthorizeAction) or by clearing its visibility in Component#onConfigure(). An unauthenticated attacker requests a bookmarkable/mounted listener URL for that component with the page identifier omitted, so Wicket builds a fresh page instance and invokes the listener before configure()/onConfigure() ever run, executing the denied callback on models derived from the attacker's own page parameters. No public exploit code is identified at time of analysis; only the vendor advisory is referenced.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
No patch listed yet 0.3% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Nov 01, 2026

Missing authorization in Apache Wicket 8.x, 9.x and 10.x allows unauthenticated remote attackers to invoke a component's IRequestListener even though the application's IAuthorizationStrategy denied the Component.RENDER action for that component, or even though the application set the component invisible or disabled in Component#onConfigure(). The flaw is reachable with nothing more than a crafted or simply unmodified request, because Wicket can build a listener URL without a page identifier and then invokes the listener on a freshly constructed page instance before any render pass has populated the authorization-derived visibility flag; the impact is limited to integrity (low), with no confidentiality or availability effect assessed. Exploitation requires a Wicket application that withholds an individual component via a RENDER denial or via visibility/enablement set in onConfigure(), on a page that is reachable from a bookmarkable or mounted URL and has a public no-argument or PageParameters constructor; signals are moderate and broadly consistent, and no public exploit identified at time of analysis.

RemediationAI

Upgrade to a fixed release on the applicable branch: Apache Wicket 8.20.0 (from 8.0.0-8.19.0), 9.25.0 (from 9.0.0-9.24.0), or 10.12.0 (from 10.0.0-10.11.0), as stated in the Apache advisory at https://lists.apache.org/thread.html/yrtov7vfmj7c7wl7j1tt0dsv2t0zwy9b. Because the defect is bypassed at listener dispatch time, the protections that remain effective pending upgrade are precisely those that run on the request path in the affected code: a guard placed on the page through IAuthorizationStrategy#isInstantiationAuthorized(), which is still consulted when the new page instance is created and therefore still holds against the page-id-less route, and a component withheld through the ENABLE decision of IAuthorizationStrategy, which is re-evaluated on every invocation and still refuses. A component whose visibility or enabled flag is set only inside Component#onConfigure() is protected by neither of these, since that callback never runs on the affected path, so such components must be moved behind a page-level instantiation guard or an ENABLE denial until the upgrade is applied. Denying RENDER is itself insufficient and can even cause the page to be treated as stateless, which produces the page-id-less listener URLs automatically.

Affected VersionsENISA

Apache Wicket 10.0.0 ≤10.11.0
Apache Wicket 9.0.0 ≤9.24.0
Apache Wicket 8.0.0 ≤8.19.0

Affected Packages

euvd apache_wicket no fix

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 root cause is a CWE-862 missing authorization defect in Wicket's listener dispatch path. org.apache.wicket.core.request.handler.ListenerRequestHandler invokes an IRequestListener only when Component#canCallListener() permits it, and that method is the conjunction of isEnabledInHierarchy() and isVisibleInHierarchy(). The visibility half reads a flag that caches the outcome of IAuthorizationStrategy#isActionAuthorized() for the Component.RENDER action, and that flag is written in exactly one place, Component#configure(), during the render phase. Listener URLs produced by subclasses of org.apache.wicket.core.request.mapper.AbstractBookmarkableMapper pack the page identifier and the component path into a single parameter, and the page identifier may be empty. When it is empty, a new page instance is constructed, PageProvider#wasExpired() returns false because no identifier was supplied, and PageAndComponentProvider#getComponent() resolves the component directly on that new instance, so neither a render pass nor Component#configure() ever runs before the listener fires. The flag retains its constructor default, the component is treated as visible, and the denied listener executes. The same request also skips Component#onConfigure(), so visibility and enablement that an application sets there are likewise not applied. Two routes reach this state and neither needs more than a request: on a stateful page the caller omits the page identifier from a listener URL that would otherwise carry it, and on a page Wicket considers stateless nothing has to be altered at all, because Wicket itself emits page-id-less listener URLs for those pages and a component denied RENDER is treated as stateless (so denying RENDER can itself produce the page-id-less form). The ENABLE decision of IAuthorizationStrategy is consulted on every invocation and still refuses, as does a request that supplies the real identifier of an already-rendered page instance, but a component disabled only in Component#onConfigure() is protected by neither. Behaviours pass through the same gate, so an AJAX behaviour attached to such a component is equally exposed, and separately a listener on a page Wicket considers stateful is invoked on an instance constructed by the request itself, acting on models built from caller-supplied page parameters rather than on the state the application last rendered. Instantiation authorization is unaffected: IAuthorizationStrategy#isInstantiationAuthorized() is still consulted when the new page instance is created, so guards placed on the page rather than on the individual component continue to hold.

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

Vendor (apache) PRIMARY 6.9 MEDIUM
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:L/VA:N/SC:N/SI:N/SA:N
vuln.today AI 5.3 MEDIUM

Remote, unauthenticated, single request (AV:N/AC:L/PR:N/UI:N); only a withheld component's action runs, giving limited integrity impact (I:L) with no confidentiality or availability loss.

3.1 AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N
4.0 AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:L/VA:N/SC:N/SI:N/SA:N

Primary rating from Vendor (apache).

CVSS VectorVendor: apache

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
None
Privileges Required
None
User Interaction
None
Vulnerable system: Confidentiality
None
Vulnerable system: Integrity
Low
Vulnerable system: Availability
None
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

DescriptionCVE.org

Missing authorization in Apache Wicket.

org.apache.wicket.core.request.handler.ListenerRequestHandler invokes an IRequestListener only when org.apache.wicket.Component#canCallListener() allows it, and that method is isEnabledInHierarchy() && isVisibleInHierarchy(). The visibility half reads a flag that carries the outcome of IAuthorizationStrategy#isActionAuthorized() for the Component.RENDER action, and that flag is written in one place only, Component#configure(), during the render phase. A listener URL built by a subclass of org.apache.wicket.core.request.mapper.AbstractBookmarkableMapper carries the page identifier and the component path in a single parameter, and the page identifier may be empty. When it is, a new page instance is constructed, PageProvider#wasExpired() is false because no identifier was supplied, and PageAndComponentProvider#getComponent() finds the component directly on the new instance, so neither a render pass nor Component#configure() runs before the listener is invoked. The flag therefore still holds its constructor default, the component counts as visible, and the listener of a component the authorization strategy denied RENDER for is executed. The same request also skips Component#onConfigure(), so visibility and enablement an application sets there are not applied either.

There are two ways to reach this, and neither requires anything but a request. On a page that is stateful, the caller omits the page identifier from a listener URL that would otherwise carry it. On a page that Wicket considers stateless, nothing has to be altered at all: Wicket itself writes listener URLs without a page identifier for such pages, and a component the strategy denies RENDER for is treated as stateless and therefore does not keep the page stateful, so denying RENDER can itself produce the page-id-less form. The second route has never been refused. The ENABLE decision of IAuthorizationStrategy is consulted on every invocation and still refuses, as does a request that supplies the real identifier of a page instance that has already been rendered; a component the application disabled in Component#onConfigure() is protected by neither, because that callback has not run.

An application is affected where it withholds an individual component from the caller, either by denying the RENDER action through IAuthorizationStrategy, including through the MetaDataRoleAuthorizationStrategy and AuthorizeAction facilities of wicket-auth-roles, or by setting the component's visibility or enabled flag in Component#onConfigure(), the callback Wicket's own documentation directs applications to use for both. The page carrying such a component has to be constructible from a bookmarkable or mounted URL, which requires a public constructor taking either no arguments or a PageParameters argument. Behaviours pass through the same gate, so an AJAX behaviour attached to such a component is equally exposed. Separately, and whether or not any component is withheld, a listener on a page Wicket considers stateful is invoked on an instance the request itself constructed, so it acts on models built from page parameters the caller supplied rather than on the state the application last rendered. Instantiation authorization is unaffected: IAuthorizationStrategy#isInstantiationAuthorized() is still consulted when the new page instance is created, so a guard placed on the page rather than on the individual component continues to hold.

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

EPSS Score
0.3%
Top 83% exploitable
Prevalence
Medium
component-based Java web framework, moderate enterprise adoption, not ubiquitous
Data Quality
3 sources
Confidence: Low

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.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC No
EPSS 0.3%
Patch available No
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
Yes
Human Impact· derived
Medium

Priority Score

34
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +34
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0
CVE-2026-43975 MEDIUM POC
6.5 May 06

Path traversal vulnerability in Apache Wicket's FolderUploadsFileManager allows unauthenticated attackers to read arbitr

CVE-2026-84170 HIGH
8.3 Nov 01

Apache Wicket's form-less upload endpoint (AbstractFileUploadResource, the server side of FileUploadToResourceField, or

CVE-2026-83594 HIGH
8.3 Nov 01

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

CVE-2026-111089 HIGH
7.6 Nov 01

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

CVE-2026-95863 HIGH
7.6 Nov 01

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

CVE-2026-82956 HIGH
7.6 Nov 01

Stored cross-site scripting in Apache Wicket's AjaxNewWindowNotifyingBehavior allows a client-supplied browser window na

CVE-2026-84231 HIGH
7.4 Nov 01

Cross-site scripting in Apache Wicket 8.0.0 through 8.19.0 lets remote attackers get script executed in the application'

CVE-2026-83559 HIGH
7.4 Nov 01

Apache Wicket's public JavaScriptUtils.escapeQuotes() helper fails to escape backslashes before quotes, so attacker-infl

CVE-2026-83539 HIGH
7.4 Nov 01

Cross-site scripting in Apache Wicket's SmartLinkLabel and SmartLinkMultiLineLabel components turns attacker-influenced

CVE-2026-82840 HIGH
7.2 Nov 01

Session fixation in Apache Wicket's role-based authentication module leaves the container session id unchanged when an a

CVE-2026-82557 MEDIUM
6.9 Nov 01

Missing authorization in Apache Wicket 10.3.0 through 10.11.0 allows a remote unauthenticated caller to invoke the serve

CVE-2026-66391 MEDIUM
6.5 Jul 27

Unauthenticated remote attackers can partially read and modify data in Apache Wicket versions 9.0.0 through 9.23.0 and 1

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy