Skip to main content

Eclipse Jetty CVE-2026-10050

| EUVDEUVD-2026-52656 HIGH
Improper Handling of Alternate Encoding (CWE-173)
2026-07-22 https://github.com/jetty/jetty.project GHSA-2fvj-hgj9-j2gr
8.7
CVSS 4.0 · Vendor: https://github.com/jetty/jetty.project
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Identify username via API or directory
  2. Delivery
    Infer non-Latin-1 password characters from user locale
  3. Exploit
    Compute collision password substituting '?' for all non-Latin-1 chars
  4. Execution
    Send crafted Digest auth response with collision hash
  5. Persist
    Server computes matching ISO-8859-1 hash
  6. Impact
    Authenticate as victim

Vulnerability Assessment

Weakness
CWE
Exploitation Conditions

Exploitation requires three concurrent conditions: (1) the target application must use HTTP Digest Authentication - Basic auth, Bearer tokens, or any non-Digest scheme are not affected; (2) the targeted user account must have at least one password character with a Unicode code point above U+00FF, which covers all CJK (U+4E00-U+9FFF), Hangul (U+AC00-U+D7AF), Cyrillic (U+0400-U+04FF), Arabic (U+0600-U+06FF), Greek extended (U+0370-U+03FF), and many accented Latin characters (U+0100-U+024F); and (3) the attacker must know the target account's username. Exploitation is limited by: accounts with purely ASCII or Latin-1 passwords (U+0000-U+00FF) are not vulnerable to the collision attack; the attacker must correctly identify which non-Latin-1 characters appear in the password to construct the collision, though any '?' substitution across all positions is sufficient; and services enforcing account lockout policies may impede trial-and-error username enumeration. The secondary DoS impact (legitimate users unable to authenticate) requires only that the user has a non-Latin-1 password and the server computes hashes with UTF-8 while Jetty's client computes with ISO-8859-1.

Impact

The CVSS 4.0 score of 8.7 with vector AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:N/VA:N reflects a worst-case scenario: network-exploitable, no complexity barriers, no privileges needed, high confidentiality impact. The PR:N is meaningful here - an attacker submitting Digest credentials does not need any pre-existing access, only the target username, which is often observable from application logs, directory services, or API responses. The AC:L rating is defensible because the attack is deterministic once the attacker knows which characters to replace; no brute-forcing or timing attacks are required. Critically, the attack is limited to accounts whose passwords contain at least one character above U+00FF, which is common in applications serving non-European users but rare in purely ASCII-password environments. The official CVSS 4.0 vector omits availability impact (VA:N), but a secondary DoS vector exists: legitimate users with non-Latin-1 passwords will permanently fail authentication because the client-computed hash will not match a server storing UTF-8-derived hashes. This discrepancy between the CVSS vector and the described availability impact should be flagged for remediation prioritization. A publicly available PoC (including hash collision demonstrations across four scripts) lowers the bar for exploitation significantly, but no CISA KEV listing exists, suggesting targeted rather than opportunistic exploitation at this time. Real-world risk is highest for applications serving Asian, Eastern European, or Arabic-language user bases with Digest auth enabled.

Exploit ScenarioDerived

An attacker targeting a Jetty-based application with Digest auth discovers the username 'li.wei@corp.example' through a publicly visible API or directory listing; knowing the application serves Chinese-language users, they guess the password likely contains CJK characters. The attacker submits a Digest auth response computed using a collision password where all CJK characters are replaced with '?', producing a byte-for-byte identical MD5 hash under ISO-8859-1 encoding. The server's Digest validator, using the same lossy encoding, computes the same hash and grants access - requiring no knowledge of the original password. A publicly available PoC demonstrates this collision deterministically across Chinese, Korean, Cyrillic, and Greek password patterns.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available 0.4% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv2 – Aug 04, 2026

Authentication bypass in Eclipse Jetty's HTTP Digest authentication implementation allows an unauthenticated attacker who knows a target username to authenticate as any user whose password contains non-Latin-1 characters (CJK, Cyrillic, Arabic, Greek, emoji, etc.) by substituting those characters with literal '?' characters. The root defect is in DigestAuthentication.java, which uses ISO-8859-1 encoding at three points when computing H(A1), H(A2), and the final MD5 response hash - silently collapsing all code points above U+00FF to 0x3F, making collision credentials cryptographically indistinguishable from the original. A publicly available proof-of-concept demonstrates hash collision across Chinese, Korean, Cyrillic, and Greek passwords; no active exploitation has been confirmed by CISA KEV at time of analysis.

Earlier versions of this analysis (1)
v1 Jul 22, 2026 - 23:17

Digest authentication bypass in Eclipse Jetty's HTTP client (DigestAuthentication) stems from lossy ISO-8859-1 encoding that silently collapses every character above U+00FF to '?' (0x3F) when computing MD5 Digest hashes, so any password containing CJK, Cyrillic, Arabic, Greek, or emoji characters produces the same response hash as a '?'-substituted collision password. An attacker who knows a target username can therefore authenticate as a user whose password uses non-Latin-1 characters, and legitimate non-Latin-1-password users are also silently locked out (a denial-of-service/correctness bug). No public exploit identified at time of analysis beyond the advisory's hash-collision proof-of-concept; not listed in CISA KEV.

RemediationAI

The primary fix is to upgrade to a patched Jetty release: 9.4.63 for the 9.4.x train, 10.0.31 for 10.0.x, 11.0.31 for 11.0.x, 12.0.36 for 12.0.x, or 12.1.10 for 12.1.x, as documented in the GitHub advisory at https://github.com/jetty/jetty.project/security/advisories/GHSA-2fvj-hgj9-j2gr and patch PRs https://github.com/jetty/jetty.project/pull/15160 and https://github.com/jetty/jetty.project/pull/15183. If upgrading is not immediately feasible, the most effective compensating control is to disable HTTP Digest authentication entirely and migrate to a stronger mechanism (e.g., Bearer tokens over TLS, HTTP Basic auth over TLS, or form-based auth), which eliminates the vulnerable code path - the trade-off is a migration effort. A second compensating control is to enforce a password policy that restricts user passwords to Latin-1 characters only (U+0000-U+00FF), which eliminates collision candidates - but this degrades security for internationalized user bases and may break existing accounts. There is no runtime configuration switch to change the encoding without patching. Organizations that cannot patch should also monitor Digest authentication logs for accounts where the authenticated username has known non-Latin-1 password characteristics and flag anomalous login patterns.

Affected VersionsENISA

Eclipse Jetty 11.0.0 ≤11.0.30
Eclipse Jetty - EE9 12.1.0 ≤12.1.9
Eclipse Jetty - EE8 12.0.0 ≤12.0.35
Eclipse Jetty 10.0.0 ≤10.0.30
Eclipse Jetty 9.4.0 ≤9.4.62
Eclipse Jetty 12.0.0 ≤12.0.35
Eclipse Jetty 12.1.0 ≤12.1.9
Eclipse Jetty - EE8 12.1.0 ≤12.1.9
Eclipse Jetty - EE9 12.0.0 ≤12.0.35

Affected Packages

maven org.eclipse.jetty.ee8:jetty-ee8-security fix: 12.0.36, 12.1.10
maven org.eclipse.jetty.ee9:jetty-ee9-security fix: 12.0.36, 12.1.10
maven org.eclipse.jetty:jetty-security fix: 9.4.63, 10.0.31, 11.0.31, 12.0.36, 12.1.10
euvd eclipse_jetty no fix
euvd eclipse_jetty_ee8 no fix
euvd eclipse_jetty_ee9 no fix

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 6 packages in maven, euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

Eclipse Jetty implements HTTP Digest Authentication per RFC 2617/7616 in DigestAuthentication.java (jetty-client module). The three-step hash chain - H(A1) = MD5(username:realm:password), H(A2) = MD5(method:uri), response = MD5(H(A1):nonce:...:H(A2)) - requires consistent character encoding to be collision-resistant. The defect (CWE-173: Improper Handling of Alternate Encoding) is that Java's String.getBytes(StandardCharsets.ISO_8859_1) silently replaces any Unicode code point above U+00FF with the byte 0x3F ('?') rather than throwing an exception or warning. This means any two passwords that differ only in non-Latin-1 characters will produce byte-identical inputs to the MD5 digester, yielding identical hashes. The attack is purely algebraic - no hash cracking is required. Affected Maven artifacts span four Jetty generations: org.eclipse.jetty:jetty-security (9.4.x through 12.0.x), org.eclipse.jetty.ee8:jetty-ee8-security, and org.eclipse.jetty.ee9:jetty-ee9-security. The fix in PR #15160 and #15183 adds RFC 7616 charset negotiation, using server-advertised UTF-8 when available and retaining ISO-8859-1 only for backward compatibility with servers that do not send a charset parameter.

Know when Java gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (https://github.com/jetty/jetty.project) PRIMARY 8.7 HIGH
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N
vuln.today AI 8.2 HIGH

Network-accessible Digest endpoint, no privileges needed to submit credentials; high confidentiality from auth bypass; low availability from DoS on legitimate non-Latin-1 users.

3.1 AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:L
4.0 AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:N/VA:L/SC:N/SI:N/SA:N
SUSE 7.5 HIGH
AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
Red Hat 9.1 HIGH

Primary rating from Vendor (https://github.com/jetty/jetty.project).

CVSS VectorVendor: https://github.com/jetty/jetty.project

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
None
Privileges Required
None
User Interaction
None
Vulnerable system: Confidentiality
High
Vulnerable system: Integrity
None
Vulnerable system: Availability
None
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

Lifecycle Timeline

3
Analysis Updated
Aug 04, 2026 - 11:44 vuln.today
v2 - CVSS changed
CVSS changed
Aug 04, 2026 - 11:38 NVD
8.7 (HIGH)
CVE Published
Jul 22, 2026 - 22:55 cve.org
HIGH

DescriptionCVE.org

Summary

The DigestAuthentication.apply() method in Jetty's HTTP client uses getBytes(StandardCharsets.ISO_8859_1) at three locations (lines 171, 179, 196) to compute Digest auth response hashes. ISO-8859-1 silently replaces any character above U+00FF (Chinese, Japanese, Cyrillic, Arabic, Emoji, etc.) with 0x3F (?), causing all such characters to produce identical hash contributions. An attacker who knows a victim's username can bypass Digest authentication by replacing all non-Latin-1 characters in the password with ? characters, since the collision password produces the same MD5-based Digest response hash as the original password.

Details

Root Cause

In jetty-core/jetty-client/src/main/java/org/eclipse/jetty/client/DigestAuthentication.java, the apply() method computes the three Digest auth hashes (H(A1), H(A2), and the final response) using ISO-8859-1 character encoding:

java
// Line 171 - H(A1)
String hashA1 = toHexString(digester.digest(a1.getBytes(StandardCharsets.ISO_8859_1)));

// Line 179 - H(A2)
String hashA2 = toHexString(digester.digest(a2.getBytes(StandardCharsets.ISO_8859_1)));

// Line 196 - Final response hash
final String hashA3 = toHexString(digester.digest(a3.getBytes(StandardCharsets.ISO_8859_1)));

ISO-8859-1 (Latin-1) can only encode characters in the range U+0000-U+00FF. Any character outside this range - including all CJK, Cyrillic, Arabic, Greek, Hangul, and emoji characters - is silently replaced with the byte 0x3F (?). String.getBytes(ISO_8859_1) in Java performs this replacement without any warning or exception.

PoC

Password: "我爱Java!密码123★" (7 non-Latin-1 characters)

UTF-8 encoding:    45 bytes → MD5 H(A1) = 9a4e61484f228633d5d0f95d1bbb0a99
ISO-8859-1:        31 bytes → MD5 H(A1) = d60ddc903d71913bcc3ab4a94f7fc239
Collision "??...": 31 bytes → MD5 H(A1) = d60ddc903d71913bcc3ab4a94f7fc239 ← IDENTICAL

Multi-language confirmation - all four language passwords below produce the same hash:

Chinese (密码123)  → H(A1) = db87f31e8d96cd15f9acec7eabdc4560
Korean  (비번123)  → H(A1) = db87f31e8d96cd15f9acec7eabdc4560
Cyrillic(аб123)    → H(A1) = db87f31e8d96cd15f9acec7eabdc4560
Greek   (αβ123)    → H(A1) = db87f31e8d96cd15f9acec7eabdc4560
Attacker(??123)    → H(A1) = db87f31e8d96cd15f9acec7eabdc4560 ← all collide!

Impact

Scenario 1: Authentication Bypass (Collision Attack)

If a service using Jetty for Digest authentication has a user with a non-Latin-1 password (e.g., Chinese, Japanese, Russian), an attacker can authenticate as that user using a collision password where all non-Latin-1 characters are replaced with ?:

  • Original password: 我爱Java!密码123★
  • Collision password: ??Java!??123?
  • Both produce identical MD5 hashes under ISO-8859-1 → Authentication succeeds

This affects any password containing characters > U+00FF, which covers:

  • Chinese (CJK): U+4E00-U+9FFF
  • Japanese (Hiragana/Katakana/Kanji): U+3040-U+30FF, U+4E00+
  • Korean (Hangul): U+AC00-U+D7AF
  • Cyrillic: U+0400-U+04FF (Russian, Ukrainian, Bulgarian, etc.)
  • Arabic: U+0600-U+06FF
  • Greek: U+0370-U+03FF
  • Latin Extended: U+0100-U+024F (accented European characters like ĉ, ğ, ñ when > U+00FF)
  • Emoji / Symbols > U+00FF

Scenario 2: Denial of Service for Non-Latin-1 Users

Most modern web applications store password hashes computed using UTF-8. When Jetty's Digest client computes a hash with ISO-8859-1, the bytes differ from what the server stored/expects. This means any user with non-ASCII (Latin-1+) characters in their password can never successfully authenticate via Digest auth - even the legitimate user. This is not just a security issue but a functional correctness bug that silently breaks authentication for most non-European-language users.

Blast Radius

ecosystem impact
† from your stack dependencies † transitive graph · vuln.today resolves 4-path depth
  • 16 maven packages depend on org.eclipse.jetty.ee8:jetty-ee8-security (2 direct, 14 indirect)
  • 23 maven packages depend on org.eclipse.jetty.ee9:jetty-ee9-security (4 direct, 19 indirect)
  • 80 maven packages depend on org.eclipse.jetty:jetty-security (7 direct, 73 indirect)

Ecosystem-wide dependent count for version 12.0.0 and other introduced versions.

Executive ViewAI

Why It Matters

Eclipse Jetty's HTTP Digest authentication implementation contains an encoding flaw that allows unauthenticated attackers to impersonate any user whose password contains non-Latin characters (CJK, Cyrillic, Arabic, Greek, emoji) by substituting those characters with literal '?' characters. This authentication bypass exposes customer data, internal systems, and regulatory compliance to unauthorized access, particularly affecting organizations with international workforces or diverse user bases.

Business Impact: High
Compensating Controls

Apply vendor patch.

Threat Intelligence Overview

EPSS Score
0.4%
Top 66% exploitable
Prevalence
High
widely embedded Java server/client in enterprise and OSS stacks
Threat Intel
1
1 source
Exploit
POC
Public exploit code exists
Social Media
1
Sightings
Data Quality
6 sources
Confidence: High

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity HIGH
CISA KEV No
Public POC Yes
EPSS 0.4%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Out-of-Cycle
Exploitation· derived
Poc
System Exposure· derived
Open
Automatable· derived
Yes
Human Impact
High

Priority Score

64
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +44
PoC: +20
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.

Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.

More in Java

View all
CVE-2012-4681 CRITICAL POC
9.8 Aug 28

Oracle Java SE 7 Update 6 and earlier contains multiple sandbox bypass vulnerabilities via the ClassFinder and forName m

CVE-2015-7450 CRITICAL POC
9.8 Jan 02

Remote code execution in IBM Sterling B2B Integrator, Sterling Integrator, and Tivoli Common Reporting allows unauthenti

CVE-2013-2465 CRITICAL POC
9.8 Jun 18

Java Runtime Environment sandbox bypass via incorrect image channel verification in 2D component allows remote unauthent

CVE-2011-3544 CRITICAL POC
9.8 Oct 19

Oracle Java SE JDK/JRE 7 and 6 Update 27 and earlier allows remote code execution with complete system compromise throug

CVE-2010-1871 HIGH POC
8.8 Aug 05

JBoss Seam 2 in Red Hat JBoss EAP 4.3.0 fails to sanitize JBoss Expression Language inputs, allowing remote attackers to

CVE-2012-1723 CRITICAL POC
9.8 Jun 16

Unspecified vulnerability in the Java Runtime Environment (JRE) component in Oracle Java SE 7 update 4 and earlier, 6 up

CVE-2013-0422 CRITICAL POC
9.8 Jan 10

Multiple vulnerabilities in Oracle Java 7 before Update 11 allow remote attackers to execute arbitrary code by (1) using

CVE-2012-0507 CRITICAL POC
9.8 Jun 07

Unspecified vulnerability in the Java Runtime Environment (JRE) component in Oracle Java SE 7 Update 2 and earlier, 6 Up

CVE-2015-4852 CRITICAL POC
9.8 Nov 18

The WLS Security component in Oracle WebLogic Server 10.3.6.0, 12.1.2.0, 12.1.3.0, and 12.2.1.0 allows remote attackers

CVE-2012-5076 CRITICAL POC
9.8 Oct 16

Unspecified vulnerability in the Java Runtime Environment (JRE) component in Oracle Java SE 7 Update 7 and earlier allow

CVE-2017-3066 CRITICAL POC
9.8 Apr 27

Remote unauthenticated attackers can execute arbitrary code on Adobe ColdFusion servers through Java deserialization fla

CVE-2012-0391 CRITICAL POC
9.8 Jan 08

The ExceptionDelegator component in Apache Struts before 2.2.3.1 interprets parameter values as OGNL expressions during

Vendor StatusVendor

SUSE

Severity: Important
Product Status
SUSE Linux Enterprise Desktop 15 SP7 Affected
SUSE Linux Enterprise High Performance Computing 15 SP7 Affected
SUSE Linux Enterprise Module for Development Tools 15 SP7 Affected
SUSE Linux Enterprise Module for Package Hub 15 SP7 Affected
SUSE Linux Enterprise Server 15 SP7 Affected

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy