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-6790

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

Amit Schendel
Amit Schendel
Senior Security Researcher

Jul 23, 2026·5 min read·4 visits

Executive Summary (TL;DR)

Eclipse Jetty's HTTP/2 and HTTP/3 pipelines fail to verify that the ':authority' pseudo-header matches the 'Host' header, leading to host-confusion, proxy bypass, and virtual host escapes.

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.

Vulnerability Overview

Eclipse Jetty fails to validate that the HTTP/2 and HTTP/3 request authority, provided via the :authority pseudo-header, matches the standard HTTP Host header. This omission violates strict host/authority alignment mandates set forth in modern specifications, namely RFC 9110, RFC 9112, RFC 9113, and RFC 9114.\n\nHistorically, earlier specifications like RFC 2616 did not strictly enforce this consistency check. Consequently, legacy software architectures frequently permitted divergent values. Modern web infrastructures, however, rely heavily on matching hosts for virtual hosting, logging, access control, and URI construction, making this desynchronization a security concern.\n\nWithout strict matching, Jetty enters a split-brain state where the servlet API uses the pseudo-header value for internal routing, while down-stream applications or proxies parse the raw Host header. This discrepancy opens a vector for host-evasion attacks across multiple protocols.

Root Cause Analysis

The root cause lies in how Jetty processes pseudo-headers in HTTP/2 and HTTP/3 requests. The :authority pseudo-header is parsed and mapped directly to the internal HttpURI state of the request, which API calls like Request.getServerName() rely on. However, the Host header is preserved as a standard header in the HTTP request map without cross-verification.\n\nWhile Jetty's HTTP/1.1 implementation contained verification steps to ensure consistency between target host authorities and the Host header, this validation logic was completely bypassed during HTTP/2 and HTTP/3 parsing. The MetaDataBuilder implementations for both protocols failed to align the :authority pseudo-header and the Host header, treating them as separate variables.\n\nThis desynchronization manifests when a client supplies conflicting values in :authority and Host headers. If an intermediate reverse proxy forwards the request without normalizing these parameters, the container evaluates access control lists based on one value while application business logic processes the other, subverting architectural boundaries.

Code Analysis & Patch Inspection

The vulnerability was resolved by refactoring the verification mechanism out of protocol-specific layers and moving it directly into the central dispatch flow. The fix, introduced in commit 67ba9e6b39661810123680d9c894e99a7940c73d, establishes centralized checks via ComplianceUtils.verify() within the core HttpChannelState pipeline.\n\nThe logic extracts the host and port segments from the HttpURI representing the parsed pseudo-header and compares them with the extracted values from the standard Host header using authorityMatches(). The following code block demonstrates this validation flow:\n\njava\n// Centralized verification logic from ComplianceUtils.java\npublic static void verify(HttpURI httpURI, HttpFields requestHeaders, HttpCompliance httpCompliance, ComplianceViolation.Listener listener)\n{\n // ... [validation setup] ...\n if (!authorityMatches(httpURI, requestHeaders.get(HttpHeader.HOST)))\n {\n // Verify if compliance configuration allows mismatched authorities\n if (!ComplianceUtils.allows(httpCompliance, HttpCompliance.Violation.MISMATCHED_AUTHORITY, \"Authority!=Host\", listener))\n throw new HttpException.RuntimeException(HttpStatus.BAD_REQUEST_400, \"Authority!=Host\");\n }\n}\n\n\nThe check evaluates the effective port configuration of both inputs, resolving default ports (such as port 80 for HTTP or 443 for HTTPS) using URIUtil.getDefaultPortForScheme(). A case-insensitive comparison is then executed on the hostname to ensure structural identity. If a mismatch is detected, Jetty raises a 400 Bad Request exception under strict compliance profiles.

Exploitation Methodology

To trigger the vulnerability, an attacker must construct an HTTP/2 or HTTP/3 request specifying conflicting values in the :authority pseudo-header and the standard Host header. The attacker requires direct network access to either the Jetty instance or an intermediate proxy that forwards raw HTTP/2 or HTTP/3 frames without validation.\n\nConsider a deployment utilizing an intermediate reverse proxy that routes requests based on the Host header, while Jetty serves virtual hosts based on the :authority pseudo-header. An attacker can set :authority: internal-admin.local and Host: public-site.com. The proxy permits the request because Host points to a public site, but Jetty receives the frame and processes it internally under the security context of the internal admin virtual host.\n\nFurthermore, if the application framework generates OAuth redirect URLs using Host header values while validating incoming sessions using the servlet API's target host, an attacker can hijack OAuth validation steps. This divergence allows redirection targets to point to attacker-controlled domains, resulting in session exposure or authorization bypasses.\n\nmermaid\ngraph LR\n Client[\"Client Request\"] -->|\":authority: internal-admin\"| JettyAPI[\"Jetty HttpURI State\"]\n Client -->|\"Host: public-site.com\"| AppLogic[\"Application/Proxy Headers\"]\n JettyAPI -->|\"Access Decisions (getServerName)\"| AuthZ[\"Authorized (Internal)\"]\n AppLogic -->|\"Redirects / DB Queries\"| AppRoute[\"Public Routing / Tenant Bypass\"]\n

Impact Assessment & Security Analysis

The impact of this vulnerability depends on the topology of the target web environment and the specific APIs consumed by the backend application. Because the vulnerability results in host/authority desynchronization, it breaks security invariants that isolate tenants, control access, or structure fully qualified URLs.\n\nIn multi-tenant environments, virtual host isolation can be compromised if security checks are bound to the HttpURI context while downstream database querying uses the Host header. Additionally, web cache poisoning can occur if a caching reverse proxy hashes responses based on the Host header while the origin server returns content dynamically determined by the :authority pseudo-header.\n\nThe CVSS score is established at 5.3 (Medium), reflecting low-complexity network vectors with partial impact on integrity. However, in complex proxy-to-origin architectures, this mismatch can act as a primitive for escalating to high-severity access control bypasses.

Remediation & Compliance Controls

Upgrading to patched releases of Jetty is the recommended path to resolve this vulnerability. The fix is backported across all active branches, including 9.x, 10.x, 11.x, and 12.x. These releases transition the compliance layer to fail-closed behavior for mismatched headers.\n\nIf immediate updates are unfeasible, administrators can implement a compliance listener to log mismatch attempts or enforce custom validation rules. The following listener registers violations and generates alerts when MISMATCHED_AUTHORITY occurs:\n\njava\nHttpConfiguration httpConfig = new HttpConfiguration();\nhttpConfig.addComplianceViolationListener(new ComplianceViolation.Listener() {\n @Override\n public void onComplianceViolation(ComplianceViolation.Event event) {\n if (event.violation() == HttpCompliance.Violation.MISMATCHED_AUTHORITY) {\n // Custom security log implementation\n logger.warn(\"Authority mismatch detected: \" + event.details());\n }\n } \n});\n\n\nAdditionally, edge proxies should be configured to strictly reject or normalize HTTP/2 and HTTP/3 requests where the :authority pseudo-header diverges from the Host header before passing traffic to Jetty backend servers.

Official Patches

Eclipse JettyPull Request 14871 for 12.0.x compliance refactoring
Eclipse JettyPull Request 14897 introducing compliance checks
Eclipse JettyPull Request 14970 adding Request Authority checks

Fix Analysis (3)

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

Affected Versions Detail

Product
Affected Versions
Fixed Version
Eclipse Jetty
Eclipse Foundation
>= 9.4.0, < 9.4.619.4.61
Eclipse Jetty
Eclipse Foundation
>= 10.0.0, < 10.0.2910.0.29
Eclipse Jetty
Eclipse Foundation
>= 11.0.0, < 11.0.2911.0.29
Eclipse Jetty
Eclipse Foundation
>= 12.0.0, < 12.0.3512.0.35
Eclipse Jetty
Eclipse Foundation
>= 12.1.0, < 12.1.912.1.9
AttributeDetail
CWE IDCWE-20
Attack VectorNetwork (AV:N)
CVSS Score5.3 (Medium)
Exploit StatusNone (No public exploits)
CISA KEV StatusNot Listed
ImpactIntegrity (Low)
Attack ComplexityLow (AC:L)

MITRE ATT&CK Mapping

T1190Exploit Public-Facing Application
Initial Access
CWE-20
Improper Input Validation

The product receives input or data, but it does not validate or incorrectly validates that the input has the properties that are required to process the data safely and correctly.

Vulnerability Timeline

Initial JMX and HttpContentFactory refactoring implemented.
2026-01-12
Code merger completed for Jetty 12.1.x codebase.
2026-03-05
Release of Jetty 12.1.8 and subsequent RFC 9113 violation report.
2026-03-31
Simone Bordet commits core fix (67ba9e6b3) refactoring compliance.
2026-04-17
Mismatch checks backported to the 12.0.x branch.
2026-04-20
Additional validation checks merged to enforce request authority.
2026-04-29
Advisory published and CVE-2026-6790 publicly disclosed.
2026-07-14

References & Sources

  • [1]Eclipse Security Issue CVE Assignment Work Item 99
  • [2]Jetty 12.0.35 Release Notes
  • [3]Jetty 12.1.9 Release Notes
  • [4]NVD CVE-2026-6790 Detail
  • [5]Wiz Vulnerability Database CVE-2026-6790

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

•about 2 hours ago•CVE-2026-8384
5.3

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

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.

Amit Schendel
Amit Schendel
4 views•7 min read
•about 4 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
6 views•6 min read
•about 4 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
7 views•7 min read
•about 4 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
8 views•5 min read
•about 5 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
11 views•5 min read
•about 7 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
9 views•7 min read