Skip to main content
COSMICBYTEZLABS
NewsSecurityHOWTOsToolsStudyTraining
ProjectsChecklistsAI RankingsNewsletterStatusTagsAbout
Subscribe

Press Enter to search or Esc to close

News
Security
HOWTOs
Tools
Study
Training
Projects
Checklists
AI Rankings
Newsletter
Status
Tags
About
RSS Feed
Reading List
Subscribe

Stay in the Loop

Get the latest security alerts, tutorials, and tech insights delivered to your inbox.

Subscribe NowFree forever. No spam.
COSMICBYTEZLABS

Your trusted source for IT intelligence, cybersecurity insights, and hands-on technical guides.

951+ Articles
124+ Guides

CONTENT

  • Latest News
  • Security Alerts
  • HOWTOs
  • Projects
  • Exam Prep

RESOURCES

  • Search
  • Browse Tags
  • Newsletter Archive
  • Reading List
  • RSS Feed

COMPANY

  • About Us
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CosmicBytez Labs. All rights reserved.

System Status: Operational
  1. Home
  2. Security
  3. CVE-2026-40010: Apache Wicket Session Fixation Enables Account Hijacking
CVE-2026-40010: Apache Wicket Session Fixation Enables Account Hijacking

Critical Security Alert

This vulnerability is actively being exploited. Immediate action is recommended.

SECURITYCRITICALCVE-2026-40010

CVE-2026-40010: Apache Wicket Session Fixation Enables Account Hijacking

A critical session fixation vulnerability in Apache Wicket allows attackers to hijack authenticated user sessions. The flaw affects Wicket 8.x through 8.17.0, 9.0.0, and 10.x through 10.8.0, scoring CVSS 9.1.

Dylan H.

Security Team

May 6, 2026
6 min read

Affected Products

  • Apache Wicket 8.0.0 through 8.17.0
  • Apache Wicket 9.0.0
  • Apache Wicket 10.0.0 through 10.8.0

Executive Summary

A critical session fixation vulnerability (CVE-2026-40010) has been identified in Apache Wicket, a widely used Java web application framework. The flaw arises from the framework's failure to invoke changeSessionId() after session binding during the HTTP request lifecycle — a standard web security requirement that prevents session fixation attacks.

The vulnerability carries a CVSS score of 9.1 and affects multiple major Wicket release lines. An attacker who can observe or inject session identifiers can pre-set a session token, wait for a legitimate user to authenticate, and then use that session to access the authenticated user's account without knowing their credentials.

Applications running any affected Wicket version should be treated as at risk and updated immediately to the patched releases.


Vulnerability Overview

AttributeValue
CVE IDCVE-2026-40010
CVSS Score9.1 (Critical)
CWECWE-384 — Session Fixation
TypeSession Fixation / Account Hijacking
Attack VectorNetwork
Privileges RequiredNone
User InteractionRequired (victim must authenticate)
Patch AvailableYes — upgrade to latest patched version

Affected Versions

ProductAffected RangeFixed Version
Apache Wicket8.0.0 – 8.17.08.18.0+
Apache Wicket9.0.09.0.1+
Apache Wicket10.0.0 – 10.8.010.9.0+

Technical Analysis

Root Cause

The vulnerability stems from missing invocation of Servlet.changeSessionId() after session binding in Apache Wicket's HTTP request handling pipeline. According to the OWASP Session Management Cheat Sheet and the Servlet specification, a web application must regenerate the session identifier after any privilege change — most critically after a user logs in.

When changeSessionId() is not called post-authentication, the session ID established before login remains valid after login. This is the classic session fixation condition:

  1. An attacker obtains a valid (but unauthenticated) session ID for the target application
  2. The attacker delivers that session ID to the victim (via URL parameter, cookie injection, subdomain attack, etc.)
  3. The victim navigates to the login page using the attacker-supplied session ID and authenticates successfully
  4. Wicket authenticates the session without regenerating the session token
  5. The attacker — who already holds the original session ID — is now authenticated as the victim

Exploitation Vectors

Session fixation attacks commonly work through:

  • URL-based session IDs: If the application accepts ?jsessionid=ATTACKER_VALUE in URLs, the attacker can craft a link for the victim
  • Cookie injection via subdomain: A misconfigured subdomain (static.example.com) can set cookies on the parent domain, fixing the session
  • Network interception: On shared or insecure networks, an attacker can observe session tokens before authentication
  • Application-level injection: Any reflected injection point that sets cookie values can be abused

Attack Flow

1. Attacker visits target Wicket application → receives SESSION_ID=AAA111
2. Attacker crafts a login link: https://app.example.com/login?jsessionid=AAA111
   OR injects Set-Cookie: JSESSIONID=AAA111 via a side-channel
3. Victim receives attacker's link, clicks it, and authenticates
4. Wicket does NOT call changeSessionId() — session AAA111 is now authenticated
5. Attacker sends request with Cookie: JSESSIONID=AAA111
6. Application responds as if attacker is the authenticated victim

Impact Assessment

Impact AreaDescription
Full Account TakeoverAttacker inherits all privileges and data of the targeted user
Admin AccessIf an admin user is targeted, full application administrative control is obtained
Data ExfiltrationAccess to all application data visible to the compromised session
Actions on Behalf of VictimAttacker can submit forms, make API calls, and perform any action the victim is permitted
Persistent AccessUntil the victim logs out or the session expires, the attacker retains access
Audit Trail ContaminationAll attacker actions appear in logs under the victim's identity

The practical severity depends on the application: a low-privilege user session in a public forum is low-risk; an administrator session in a financial or healthcare application is critical.


Immediate Remediation

Step 1: Identify Wicket Version

# Check Maven dependency tree
mvn dependency:tree | grep wicket
 
# Or check the JAR manifest in your deployment
find /opt /app /srv -name "wicket-core-*.jar" 2>/dev/null
 
# Check version in pom.xml or build.gradle
grep -r "wicket" pom.xml build.gradle

Step 2: Upgrade Apache Wicket

Maven (pom.xml):

<!-- Replace with the appropriate patched version for your stream -->
<!-- Wicket 10.x users -->
<dependency>
    <groupId>org.apache.wicket</groupId>
    <artifactId>wicket-core</artifactId>
    <version>10.9.0</version>
</dependency>
 
<!-- Wicket 8.x users -->
<dependency>
    <groupId>org.apache.wicket</groupId>
    <artifactId>wicket-core</artifactId>
    <version>8.18.0</version>
</dependency>

Gradle (build.gradle):

dependencies {
    implementation 'org.apache.wicket:wicket-core:10.9.0'
}

Step 3: Verify Fix Is Applied

After upgrading, confirm that session ID rotation occurs on login by monitoring session tokens:

# Using curl, check that the session ID changes after authentication
SESSION_BEFORE=$(curl -c /tmp/cookies_before.txt -s -o /dev/null -D - \
  https://app.example.com/login | grep -i set-cookie)
 
# After POST with credentials
SESSION_AFTER=$(curl -b /tmp/cookies_before.txt -c /tmp/cookies_after.txt \
  -s -o /dev/null -D - -X POST https://app.example.com/login \
  -d "username=test&password=test123" | grep -i set-cookie)
 
echo "Before: $SESSION_BEFORE"
echo "After:  $SESSION_AFTER"
# The session token value MUST differ after successful authentication

Step 4: Application-Level Mitigations (If Immediate Upgrade Is Not Possible)

// Override sign-in logic to manually rotate session ID
// (Stopgap only — upgrade is required)
@Override
public void onSignIn() {
    super.onSignIn();
    // Manually rotate the session after authentication
    getSession().replaceSession();
}

Detection Indicators

IndicatorDescription
Same session ID before and after login eventsPrimary indicator of session fixation condition
Duplicate authenticated sessions from different IPsTwo clients using the same session token
Login events from IP addresses not in geographic normSuccessful authentication from unexpected locations
Session IDs received via URL parameter on login pagePotential fixation delivery mechanism

Post-Remediation Checklist

  1. Upgrade Apache Wicket to a patched version for your release stream
  2. Rebuild and redeploy the application — the fix must be in the running binary
  3. Invalidate all active sessions to clear any existing fixed sessions
  4. Audit authentication logs for signs of session reuse across different IPs
  5. Disable URL-based session parameters (jsessionid in URLs) if not required
  6. Configure session expiration to limit the window of exposure for any stale sessions
  7. Enable SameSite=Strict and HttpOnly cookie flags to reduce session theft vectors
  8. Review all authentication and session management code for similar issues

References

  • NVD — CVE-2026-40010
  • Apache Wicket Project
  • OWASP — Session Fixation
  • CWE-384 — Session Fixation
#CVE-2026-40010#Apache Wicket#Session Fixation#CWE-384#Java#Web Framework#Account Takeover#NVD

Related Articles

CVE-2026-7679: YunaiV yudao-cloud OAuth2 Improper Authentication

High-severity auth bypass in YunaiV yudao-cloud (≤2026.01) lets attackers manipulate the OAuth2 getAccessToken function to obtain tokens without valid credentials.

5 min read

CVE-2023-54342: Eclipse Equinox OSGi Unauthenticated RCE via Console Fork Command

A CVSS 9.8 critical RCE flaw in Eclipse Equinox OSGi 3.8–3.18 lets unauthenticated attackers execute arbitrary code by sending payloads through the telnet console fork command.

6 min read

CVE-2023-54344: Eclipse Equinox OSGi Pre-3.8 Unauthenticated RCE via Base64 Fork Payloads

Eclipse Equinox OSGi 3.7.2 and earlier contain a CVSS 9.8 unauthenticated RCE flaw — attackers send base64-encoded bash commands via the fork console command to gain full system access.

7 min read
Back to all Security Alerts