Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessIdentify username via API or directory
-
DeliveryInfer non-Latin-1 password characters from user locale
-
ExploitCompute collision password substituting '?' for all non-Latin-1 chars
-
ExecutionSend crafted Digest auth response with collision hash
-
PersistServer computes matching ISO-8859-1 hash
-
ImpactAuthenticate 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. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv2 – 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)
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
Affected Packages
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
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
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.
AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
Primary rating from Vendor (https://github.com/jetty/jetty.project).
CVSS VectorVendor: https://github.com/jetty/jetty.project
Lifecycle Timeline
3DescriptionCVE.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:
// 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 ← IDENTICALMulti-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- 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
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.
Apply vendor patch.
Threat Intelligence Overview
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.
What every action level means
SSVC AssessmentENISA
Priority Score
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.
Oracle Java SE 7 Update 6 and earlier contains multiple sandbox bypass vulnerabilities via the ClassFinder and forName m
Remote code execution in IBM Sterling B2B Integrator, Sterling Integrator, and Tivoli Common Reporting allows unauthenti
Java Runtime Environment sandbox bypass via incorrect image channel verification in 2D component allows remote unauthent
Oracle Java SE JDK/JRE 7 and 6 Update 27 and earlier allows remote code execution with complete system compromise throug
JBoss Seam 2 in Red Hat JBoss EAP 4.3.0 fails to sanitize JBoss Expression Language inputs, allowing remote attackers to
Unspecified vulnerability in the Java Runtime Environment (JRE) component in Oracle Java SE 7 update 4 and earlier, 6 up
Multiple vulnerabilities in Oracle Java 7 before Update 11 allow remote attackers to execute arbitrary code by (1) using
Unspecified vulnerability in the Java Runtime Environment (JRE) component in Oracle Java SE 7 Update 2 and earlier, 6 Up
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
Unspecified vulnerability in the Java Runtime Environment (JRE) component in Oracle Java SE 7 Update 7 and earlier allow
Remote unauthenticated attackers can execute arbitrary code on Adobe ColdFusion servers through Java deserialization fla
The ExceptionDelegator component in Apache Struts before 2.2.3.1 interprets parameter values as OGNL expressions during
Same weakness CWE-173 – Improper Handling of Alternate Encoding
View allSame technique Authentication Bypass
View allVendor 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 |
| SUSE Linux Enterprise Server for SAP Applications 15 SP7 | Affected |
| SUSE Linux Enterprise High Performance Computing 15 SP4 | Affected |
| SUSE Linux Enterprise High Performance Computing 15 SP4-LTSS | Affected |
| SUSE Linux Enterprise High Performance Computing 15 SP5 | Affected |
| SUSE Linux Enterprise High Performance Computing 15 SP5-LTSS | Affected |
| SUSE Linux Enterprise Module for Development Tools 15 SP4 | Affected |
| SUSE Linux Enterprise Module for Development Tools 15 SP5 | Affected |
| SUSE Linux Enterprise Module for Development Tools 15 SP6 | Affected |
| SUSE Linux Enterprise Server 15 SP4 | Affected |
| SUSE Linux Enterprise Server 15 SP4-LTSS | Affected |
| SUSE Linux Enterprise Server 15 SP5 | Affected |
| SUSE Linux Enterprise Server 15 SP5-LTSS | Affected |
| SUSE Linux Enterprise Server 15 SP6 | Affected |
| SUSE Linux Enterprise Server 15 SP6-LTSS | Affected |
| SUSE Linux Enterprise Server for SAP Applications 15 SP6 | Affected |
| SUSE Manager Proxy 4.3 | Affected |
| SUSE Manager Retail Branch Server 4.3 | Affected |
| SUSE Manager Server 4.3 | Affected |
| SUSE Enterprise Storage 7 | Affected |
| SUSE Enterprise Storage 7.1 | Affected |
| SUSE Linux Enterprise Desktop 15 SP2 | Affected |
| SUSE Linux Enterprise Desktop 15 SP3 | Affected |
| SUSE Linux Enterprise Desktop 15 SP4 | Affected |
| SUSE Linux Enterprise Desktop 15 SP5 | Affected |
| SUSE Linux Enterprise Desktop 15 SP6 | Affected |
| SUSE Linux Enterprise High Performance Computing 15 SP2 | Affected |
| SUSE Linux Enterprise High Performance Computing 15 SP2-ESPOS | Affected |
| SUSE Linux Enterprise High Performance Computing 15 SP2-LTSS | Affected |
| SUSE Linux Enterprise High Performance Computing 15 SP3 | Affected |
| SUSE Linux Enterprise High Performance Computing 15 SP3-ESPOS | Affected |
| SUSE Linux Enterprise High Performance Computing 15 SP3-LTSS | Affected |
| SUSE Linux Enterprise High Performance Computing 15 SP4-ESPOS | Affected |
| SUSE Linux Enterprise High Performance Computing 15 SP5-ESPOS | Affected |
| SUSE Linux Enterprise High Performance Computing 15 SP6 | Affected |
| SUSE Linux Enterprise Module for Development Tools 15 SP2 | Affected |
| SUSE Linux Enterprise Module for Development Tools 15 SP3 | Affected |
| SUSE Linux Enterprise Module for Package Hub 15 SP6 | Affected |
| SUSE Linux Enterprise Real Time 15 SP2 | Affected |
| SUSE Linux Enterprise Real Time 15 SP3 | Affected |
| SUSE Linux Enterprise Real Time 15 SP4 | Affected |
| SUSE Linux Enterprise Server 15 SP2 | Affected |
| SUSE Linux Enterprise Server 15 SP2-BCL | Affected |
| SUSE Linux Enterprise Server 15 SP2-LTSS | Affected |
| SUSE Linux Enterprise Server 15 SP3 | Affected |
| SUSE Linux Enterprise Server 15 SP3-BCL | Affected |
| SUSE Linux Enterprise Server 15 SP3-LTSS | Affected |
| SUSE Linux Enterprise Server for SAP Applications 15 SP2 | Affected |
| SUSE Linux Enterprise Server for SAP Applications 15 SP3 | Affected |
| SUSE Linux Enterprise Server for SAP Applications 15 SP4 | Affected |
| SUSE Linux Enterprise Server for SAP Applications 15 SP5 | Affected |
| SUSE Manager Proxy 4.1 | Affected |
| SUSE Manager Proxy 4.2 | Affected |
| SUSE Manager Retail Branch Server 4.1 | Affected |
| SUSE Manager Retail Branch Server 4.2 | Affected |
| SUSE Manager Server 4.1 | Affected |
| SUSE Manager Server 4.2 | Affected |
| openSUSE Leap 15.3 | Affected |
| openSUSE Leap 15.4 | Affected |
| openSUSE Leap 15.5 | Affected |
| openSUSE Leap 15.6 | Affected |
EUVD-2026-52656
GHSA-2fvj-hgj9-j2gr
NVD
CVE.org
EPSS
VulDB
Exploit-DB