CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



CVE-2026-8384

CVE-2026-8384: URI Path Parameter Parser State-Desynchronization Path Traversal in Eclipse Jetty

Amit Schendel
Amit Schendel
Senior Security Researcher

Jul 23, 2026·7 min read·2 visits

Executive Summary (TL;DR)

Eclipse Jetty suffers from a path traversal vulnerability where state desynchronization in the URI parsing code allows unnormalized paths containing directory traversal sequences (such as '/public;/../admin') to be forwarded to downstream security components, leading to authentication and authorization bypasses.

A path traversal vulnerability exists in Eclipse Jetty due to a state-desynchronization defect in the URI parsing state machine inside URIUtil.java. This defect allows unauthenticated remote attackers to bypass path-based security constraints enforced by downstream filters, application gateways, or authorization modules by crafting URIs with path parameter delimiters and parent directory traversal sequences.

Vulnerability Overview

Eclipse Jetty processes HTTP request URIs to canonicalize resource locations and determine access controls. A path-traversal vulnerability, tracked as CVE-2026-8384, resides within the URI parser component in org.eclipse.jetty.util.URIUtil. When a request URI contains path parameters delimited by semicolons (;) adjacent to relative path traversal segments (..), the parser fails to identify and resolve these traversal segments.

Because the internal state machine tracking directory boundaries becomes desynchronized during parser execution, the canonicalization process skips the normalization step. Consequently, unresolved paths containing raw relative path elements are handed over to the servlet API and downstream web applications.

While Jetty's internal static resource alias checker prevents direct local file exposure from its resource handlers, the vulnerability exposes critical attack surface in multi-tier applications. Downstream components, such as Spring Security, reverse proxies, and servlet filters, rely on Jetty's canonicalization output to enforce authorization policies. If these filters evaluate the unnormalized path, an attacker can bypass pattern-matching rules and access restricted application context handlers.

Root Cause Analysis

The root cause of this vulnerability lies in the parser state tracking within URIUtil.canonicalPath() and URIUtil.decodePath(). During tokenization, the parser utilizes a boolean flag named slash to record whether the previously processed character was a forward slash (/). This flag is critical because the parser determines if a sequence of dot characters represents a relative path traversal sequence (. or ..) based on whether it is preceded by a directory separator.

When a semicolon (;) is processed inside the main state switch block, the parser enters a nested while loop designed to skip the path parameters until the next path boundary is reached. The nested loop increments the string index pointer i and searches for the next forward slash character, successfully advancing past the parameter content. Once it locates a slash, it appends it to the path builder block and exits the nested loop.

However, the parser fails to update the local loop-control variable c with the newly encountered slash character inside this nested sub-loop. When control returns to the main loop, a trailing state assignment is executed: slash = (c == '/'). Because the variable c still stores the stale semicolon character, the slash flag is incorrectly set to false, even though a slash character was just written to the path output.

On the next iteration of the main loop, the parser processes the dot characters (.). Because the slash flag is false, the parser assumes the dot is part of a standard filename rather than a structural traversal element. It bypasses the safety assignment normal = false, leaving the state variable normal marked as true. This prevents the parser from calling normalizePath(), leaving the .. segments unresolved in the final output stream.

Code-Level Analysis and Patch Verification

The vulnerability is resolved by ensuring the state variable c is updated inside all nested parameter-skipping loops before the parser exits them. This synchronizes the loop control variable with the structural state.

Below is a comparison of the parser logic in URIUtil.java before and after the application of the official security patch:

// Vulnerable Code Path (Prior to Fix)
while (++i < end)
{
    // The index is advanced and slash is checked
    if (encodedPath.charAt(i) == '/')
    {
        builder.append('/');
        break; // Exits loop while 'c' remains set to ';'
    }
}
// Trailing state assignment updates with stale 'c'
slash = (c == '/'); // Evaluates to false
// Patched Code Path (Post-Fix)
while (++i < end)
{
    // Synchronize the current state variable 'c' with the active character pointer
    c = encodedPath.charAt(i);
    if (c == '/')
    {
        builder.append('/');
        break; // Exits loop with 'c' correctly representing '/'
    }
}
// Trailing state assignment updates with correct 'c'
slash = (c == '/'); // Evaluates to true

The implementation of c = encodedPath.charAt(i) ensures that when a directory boundary slash is consumed to terminate the matrix-skipping loop, the character state tracks the transition. Consequently, when the main parsing loop resumes, the subsequent dots are correctly identified as directory traversal operators.

Exploitation Methodology

Exploitation of CVE-2026-8384 depends on a specific layout of security layers upstream from the Jetty servlet context. An attacker target must feature a gateway, reverse proxy, or servlet filter that performs pattern-matching on the request URI to restrict access to privileged administrative paths (e.g., /admin/*).

To perform the bypass, the attacker initiates an HTTP request targeting a public endpoint, appends a semicolon path-parameter delimiter, and immediately appends path traversal sequences pointing to the restricted path.

GET /public;/../admin/secret.txt HTTP/1.1
Host: vulnerable-application.local
Connection: close

When the security module (such as a pattern-matching filter or custom security gateway) evaluates the request URI, it receives /public/../admin/secret.txt directly from the container's unnormalized path state. If the security module checks for explicit matches like /admin/*, the validation is bypassed because the prefix is evaluated as /public/.

Once the security validation passes, the request is dispatched to the target application context. The downstream servlet dispatcher or system context resolves the relative path on the target filesystem or mapping context, translating /public/../admin/secret.txt to the restricted destination /admin/secret.txt, resulting in unauthorized access.

Impact Assessment

The CVSS v3.1 base score is 5.3 (Medium). This severity rating reflects the constraint that Jetty's default static file handler itself does not serve arbitrary filesystem resources via this vector due to alias checking controls. Therefore, Confidentiality and Availability are scored as None (C:N/A:N) in isolated, generic environments.

However, the real-world impact in enterprise enterprise-grade microservices is often High. Because Jetty acts as a primary application servlet engine for massive web ecosystems, the parsing desynchronization results in complete authentication and authorization bypasses on custom downstream filters. When path-based access control is neutralized, unauthenticated remote attackers can gain full read and write access to administrative actions and databases exposed through internal servlet mappings.

According to EPSS data, the active exploitation probability remains low, but security administrators must treat any custom application stack running affected versions of Jetty with high priority due to the ease of exploitation.

Remediation and Detection

The primary recommendation is to update Eclipse Jetty to a non-vulnerable release branch. If upgrading Jetty is not immediately feasible, deploy immediate structural workarounds.

Upstream Normalization

Configure front-end proxies, load balancers, or API Gateways (such as NGINX, HAProxy, or Envoy) to strictly normalize URIs prior to routing requests to the Jetty backend. Ensure that the proxy is configured to strip or block matrix parameters containing semicolons (%3b or ;) from paths, or reject requests matching traversal vectors.

Detection Signatures

Security operations teams should monitor incoming web server access logs and Web Application Firewall (WAF) logs for URI patterns matching semicolon delimiters followed by relative traversal patterns.

# Example WAF / Snort pattern logic
(?i);\/.*?\/\.\.\/

This pattern flags instances where matrix segments are chained with back-to-back path transitions, which is a signature of exploitation attempts targeting this parsing flaw.

Official Patches

Eclipse Jetty ProjectPR 14969 addressing Jetty 12.0 branch fix
Eclipse Jetty ProjectPR 14973 addressing Jetty 12.1 branch fix

Fix Analysis (2)

Technical Appendix

CVSS Score
5.3/ 10
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N
EPSS Probability
0.20%
Top 90% most exploited

Affected Systems

Eclipse Jetty 12.0.0 through 12.0.34Eclipse Jetty 12.1.0 through 12.1.8

Affected Versions Detail

Product
Affected Versions
Fixed Version
Eclipse Jetty
Eclipse Foundation
>= 12.0.0, <= 12.0.3412.0.35
Eclipse Jetty
Eclipse Foundation
>= 12.1.0, <= 12.1.812.1.9
AttributeDetail
CWE IDCWE-647 (Improper Neutralization of Sanitization-Related Special Elements)
Attack VectorNetwork
CVSS v3.1 Score5.3 (Medium)
EPSS Score0.00198
Exploit Statuspoc
CISA KEV StatusNot Listed

MITRE ATT&CK Mapping

T1190Exploit Public-Facing Application
Initial Access
T1556Modify Authentication Process
Credential Access
CWE-647
Improper Neutralization of Sanitization-Related Special Elements

The product receives input from an upstream component, but it does not neutralize or incorrectly neutralizes special elements that are used to denote boundaries or structure when the input is sent to a downstream component.

Known Exploits & Detection

GitHub Security AdvisoryOfficial advisory containing reproduction details for the URI path desynchronization issue.

References & Sources

  • [1]GitHub Advisory: GHSA-w7x5-g22v-xqhr
  • [2]Eclipse Security CVE Assignment Issue 108
  • [3]Eclipse Jetty Release 12.0.35
  • [4]Eclipse Jetty Release 12.1.9

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•14 minutes ago•CVE-2026-6790
5.3

CVE-2026-6790: Host/Authority Header Desynchronization in Eclipse Jetty

A host/authority desynchronization vulnerability exists in Eclipse Jetty's handling of HTTP/2 and HTTP/3 requests. When both an ':authority' pseudo-header and a standard 'Host' header are present in a request, Jetty fails to validate that they represent the same target host. This desynchronization creates a host-confusion or 'split-brain' state, enabling attackers to bypass access control lists, escape virtual host isolation, poison web caches, or manipulate redirect targets in backend applications.

Amit Schendel
Amit Schendel
0 views•5 min read
•about 2 hours ago•GHSA-WHVH-WF3X-G77J
0.0

GHSA-WHVH-WF3X-G77J: Improper Access Control and Listing Bypass in JupyterLab Extension Manager

An improper access control vulnerability in JupyterLab allows programmatic installation of blocked or non-allowed extensions. The vulnerability is caused by a missing await keyword when invoking the asynchronous checking method, leading Python to evaluate the returned coroutine object as truthy. Furthermore, the check lacks proper canonicalization of package names, enabling an attacker to bypass blocklists using casing or character variants.

Amit Schendel
Amit Schendel
3 views•6 min read
•about 3 hours ago•CVE-2026-42980
7.8

CVE-2026-42980: Windows Kernel Local Privilege Escalation via WMI Integer Underflow

An unsigned 32-bit integer underflow vulnerability in the Windows Management Instrumentation (WMI) serialization subsystem of ntoskrnl.exe allows local authenticated users with low privileges to corrupt adjacent kernel pool allocations, execute arbitrary kernel-mode read and write operations, and perform a Token Swap attack to escalate their privileges to NT AUTHORITY\SYSTEM.

Amit Schendel
Amit Schendel
4 views•7 min read
•about 3 hours ago•GHSA-H5V5-8746-G7MM
6.0

GHSA-H5V5-8746-G7MM: JupyterLab PluginManager Lock-Rule Enforcement Bypass

JupyterLab's PluginManager contains an authorization bypass vulnerability allowing authenticated users to modify the state of locked extensions or plugins. Although the frontend user interface visually locks and disables toggle components for administrative configurations, the backend API fails to perform robust validation. Standard users can craft direct HTTP API requests to modify plugin states, completely bypassing administrative restrictions.

Amit Schendel
Amit Schendel
5 views•5 min read
•about 4 hours ago•GHSA-89VP-JRXV-24W8
6.1

GHSA-89VP-JRXV-24W8: Extension Manager Blocklist Canonicalization Bypass in JupyterLab

GHSA-89VP-JRXV-24W8 is a security bypass vulnerability in the JupyterLab Extension Manager. Authenticated users can install unauthorized or blocklisted extension packages from PyPI. This bypass occurs due to improper canonicalization of package names and the incorrect synchronous invocation of an asynchronous permission-checking method.

Amit Schendel
Amit Schendel
9 views•5 min read
•about 5 hours ago•GHSA-GX64-GJ6P-PC4C
8.2

GHSA-GX64-GJ6P-PC4C: Stored Cross-Site Scripting in JupyterLab Image Viewer

A stored Cross-Site Scripting (XSS) vulnerability exists in JupyterLab's Image Viewer component when processing Scalable Vector Graphics (SVG) images. Due to the lingering lifecycle of generated object URLs and the inheritance of the application origin by client-side Blobs, an attacker can execute arbitrary JavaScript within the victim's active session. This execution occurs when a user views an SVG file in the JupyterLab image viewer, right-clicks the image, and selects 'Open image in new tab'.

Amit Schendel
Amit Schendel
6 views•7 min read