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
Share

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/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
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
qualitative

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

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

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
None
Scope
X

Lifecycle Timeline

6
Analysis Updated
Aug 04, 2026 - 11:44 vuln.today
v2 (cvss_changed)
Re-analysis Queued
Aug 04, 2026 - 11:38 vuln.today
cvss_changed
CVSS changed
Aug 04, 2026 - 11:38 NVD
8.7 (HIGH)
Source Code Evidence Fetched
Jul 22, 2026 - 23:17 vuln.today
Analysis Generated
Jul 22, 2026 - 23:17 vuln.today
CVE Published
Jul 22, 2026 - 22:55 cve.org
HIGH

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.

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.

AnalysisAI

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.

Technical ContextAI

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.

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.

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

Share

CVE-2026-10050 vulnerability details – vuln.today

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