CVE-2026-82898: Wicket: resource isolation bypass replays forged forms

LOW
Published November 1, 2026
CISO Take

Apache Wicket's opt-in cross-origin protection (ResourceIsolationRequestCycleListener) can be skipped when an app refuses anonymous visitors by throwing RestartResponseAtInterceptPageException. The stored URL, query string included, is replayed after login as a same-origin request. That lets an attacker-chosen form submission run in the victim's newly authenticated session. Severity is rated low and there is no CVSS, EPSS, KEV listing, public exploit or Nuclei template, so exploitation likelihood is currently unquantified and appears low. It also requires a user to click a crafted link and then sign in. Wicket is a general-purpose Java web framework, not an AI component, so exposure is relevant only if you host AI/ML dashboards or internal tooling built on wicket-core 9.1.0 to 9.24.0 or 10.0.0 to 10.11.0. Upgrade to 9.25.0 or 10.12.0, or switch unauthorized-access handling to RestartResponseException as a workaround.

Sources:NVDlists.apache.org

What is the risk?

Low overall. The flaw is an incorrect order of security checks (CWE-696) and only affects applications that register the opt-in ResourceIsolationRequestCycleListener and use RestartResponseAtInterceptPageException with continueToOriginalDestination(). Exploitation needs a victim who is not yet signed in to follow an attacker-supplied link and then authenticate. The attacker controls only the form values in a GET query string, not the response. No exploitation evidence, EPSS or KEV data is available. Impact depends on what the targeted Form#onSubmit() does, for example state-changing admin actions. There is no direct AI/ML-specific risk; this is a generic web framework CSRF-style bypass.

How does the attack unfold?

Initial Access
The attacker lures a signed-out victim to a crafted cross-origin link whose query string carries chosen form values.
AML.T0011.003
Isolation Bypass
Wicket instantiates the target page before running isolation policies, so the authorization exception replaces the handler and the policies are never consulted.
Replay After Login
After the victim signs in, Wicket redirects to the stored same-origin URL, which the policies allow.
Impact
The Form#onSubmit() handler runs in the authenticated session with attacker-chosen values, causing unauthorized state changes.

What systems are affected?

PackageEcosystemVulnerable RangePatched
org.apache.wicket:wicket-core——No patch

Do you use org.apache.wicket:wicket-core? You're affected.

How severe is it?

CVSS 3.1
N/A
EPSS
N/A
Exploitation Status
No known exploitation
Sophistication
Moderate

What should I do?

1 step
  1. 1) Upgrade wicket-core to 9.25.0 (9.x line) or 10.12.0 (10.x line). 2) Workaround: refuse unauthorized access with RestartResponseException instead of RestartResponseAtInterceptPageException, which does not store the original destination. Users then land on a default page after sign-in. 3) Inventory Java applications that depend on org.apache.wicket:wicket-core, including transitive uses in ML tooling and internal portals, using SBOM or dependency scanning. 4) For apps on versions before 9.1.0, plan an upgrade to 9.x or 10.x and register ResourceIsolationRequestCycleListener, since CsrfPreventionRequestCycleListener is not a reliable cross-origin defence. 5) Detection: review logs for post-login redirects to intercepted URLs carrying unusual query parameters, particularly requests that match state-changing form handlers and have a cross-site Sec-Fetch-Site or an external Referer on the initial unauthenticated request. 6) Make sensitive form handlers require POST and an explicit confirmation or token.

How is it classified?

Which compliance frameworks are affected?

This CVE is relevant to:

ISO 42001
A.10.3-Suppliers
NIST AI RMF
MANAGE 2.3-Responses to previously unknown risks and supply chain risks are managed

Frequently Asked Questions

What is CVE-2026-82898?

Apache Wicket's opt-in cross-origin protection (ResourceIsolationRequestCycleListener) can be skipped when an app refuses anonymous visitors by throwing RestartResponseAtInterceptPageException. The stored URL, query string included, is replayed after login as a same-origin request. That lets an attacker-chosen form submission run in the victim's newly authenticated session. Severity is rated low and there is no CVSS, EPSS, KEV listing, public exploit or Nuclei template, so exploitation likelihood is currently unquantified and appears low. It also requires a user to click a crafted link and then sign in. Wicket is a general-purpose Java web framework, not an AI component, so exposure is relevant only if you host AI/ML dashboards or internal tooling built on wicket-core 9.1.0 to 9.24.0 or 10.0.0 to 10.11.0. Upgrade to 9.25.0 or 10.12.0, or switch unauthorized-access handling to RestartResponseException as a workaround.

Is CVE-2026-82898 actively exploited?

No confirmed active exploitation of CVE-2026-82898 has been reported, but organizations should still patch proactively.

How to fix CVE-2026-82898?

1) Upgrade wicket-core to 9.25.0 (9.x line) or 10.12.0 (10.x line). 2) Workaround: refuse unauthorized access with RestartResponseException instead of RestartResponseAtInterceptPageException, which does not store the original destination. Users then land on a default page after sign-in. 3) Inventory Java applications that depend on org.apache.wicket:wicket-core, including transitive uses in ML tooling and internal portals, using SBOM or dependency scanning. 4) For apps on versions before 9.1.0, plan an upgrade to 9.x or 10.x and register ResourceIsolationRequestCycleListener, since CsrfPreventionRequestCycleListener is not a reliable cross-origin defence. 5) Detection: review logs for post-login redirects to intercepted URLs carrying unusual query parameters, particularly requests that match state-changing form handlers and have a cross-site Sec-Fetch-Site or an external Referer on the initial unauthenticated request. 6) Make sensitive form handlers require POST and an explicit confirmation or token.

What systems are affected by CVE-2026-82898?

This vulnerability affects the following AI/ML architecture patterns: Java web applications on Apache Wicket, ML operations dashboards and admin portals, Internal AI tooling front-ends built on wicket-core.

What is the CVSS score for CVE-2026-82898?

No CVSS score has been assigned yet.

What is the AI security impact?

Affected AI Architectures

Java web applications on Apache WicketML operations dashboards and admin portalsInternal AI tooling front-ends built on wicket-core

MITRE ATLAS Techniques

AML.T0011.003Malicious Link
AML.T0049Exploit Public-Facing Application

Compliance Controls Affected

ISO 42001: A.10.3
NIST AI RMF: MANAGE 2.3

What are the technical details?

Original Advisory

Incorrect order of security checks in Apache Wicket. org.apache.wicket.protocol.http.ResourceIsolationRequestCycleListener obtains the page a request targets before it consults its resource isolation policies, because those policies are passed that page. Obtaining the page instantiates it, and instantiating a page runs the configured org.apache.wicket.authorization.IAuthorizationStrategy. An application that refuses an unauthenticated visitor by throwing org.apache.wicket.RestartResponseAtInterceptPageException therefore throws it from inside the isolation listener, before any policy has run. That exception replaces the request handler, so the policies are never consulted and a request that came from another origin is not refused. The exception's constructor stores the URL of the request it interrupted, so that Component#continueToOriginalDestination() can resume it once the visitor has signed in. The stored URL is the one the policies would have refused. On sign in Wicket redirects to it, and that redirect is same-origin, so the policies allow it and the listener runs in the newly authenticated session. The whole URL is stored, its query string included, so an ordinary org.apache.wicket.markup.html.form.Form is resumed with the field values the original request carried in its query string and Form#onSubmit() runs with values another origin chose. A form POST is not needed for this; a plain top-level navigation carries them. An application is affected where it registers ResourceIsolationRequestCycleListener, which is opt-in and is not registered by default, and where it refuses unauthorized access with RestartResponseAtInterceptPageException followed by continueToOriginalDestination(). No application override is involved on that path: IAuthorizationStrategy#isInstantiationAuthorized() documents throwing that exception, org.apache.wicket.authroles.authentication.AuthenticatedWebApplication throws it and org.apache.wicket.authroles.authentication.panel.UsernamePasswordPanel continues to the original destination, and org.apache.wicket.authorization.strategies.page.SimplePageAuthorizationStrategy in wicket-core installs the same pattern. A visitor who is already signed in is not affected, because no interception occurs. Request-body parameters stored alongside the intercepted URL are not applied to the resumed form: the resumption is a redirect, so the resumed request is a GET, and form components read their values from the query string on a GET. As a workaround, refuse unauthorized access with org.apache.wicket.RestartResponseException instead, which does not store the original destination; visitors are then not returned to the page they asked for after signing in. This issue affects Apache Wicket: from 9.1.0 through 9.24.0, from 10.0.0 through 10.11.0. Releases before 9.1.0, which is every 8.x release and 9.0.0, are not affected, because the resource isolation this issue concerns was introduced in 9.1.0. They are not protected either. Their only cross-origin defence is org.apache.wicket.protocol.http.CsrfPreventionRequestCycleListener, which works out where a request came from by reading its Origin header and falling back to its Referer header. Neither header need arrive: a browser does not send Origin on the plain GET a link uses, and the document on the other origin decides through its own referrer policy whether a Referer reaches the application at all. That mechanism therefore never made the guarantee the Fetch Metadata based policy makes, and on those releases a listener invocation from another origin is not reliably refused in the first place. Anyone on a release before 9.1.0 who wants this protection should upgrade to 9.x or 10.x and register ResourceIsolationRequestCycleListener. Users are recommended to upgrade to version 9.25.0 or 10.12.0, which fix the issue.

Exploitation Scenario

An attacker identifies an internal ML operations portal built on Wicket that redirects anonymous visitors to a login page. They craft a link to a protected form URL with query parameters that set attacker-chosen values, for example changing a model deployment setting or a user role. They deliver it by phishing or a malicious page. The victim clicks while signed out, Wicket throws RestartResponseAtInterceptPageException inside the isolation listener before any policy runs, and the victim is sent to the login page. After the victim signs in, Wicket redirects to the stored URL, which is same-origin and therefore allowed, and Form#onSubmit() executes with the attacker's values in the victim's authenticated session.

Weaknesses (CWE)

CWE-696 — Incorrect Behavior Order: The product performs multiple related behaviors, but the behaviors are performed in the wrong order in ways that may produce resultant weaknesses.

Source: MITRE CWE corpus.

Timeline

Published
November 1, 2026
Last Modified
November 1, 2026
First Seen
November 2, 2026

Related Vulnerabilities