CVE-2026-27017
Cipher Suite Mismatch Vulnerability in uTLS GREASE ECH
Publication date: 2026-02-20
Last updated on: 2026-02-20
Assigner: GitHub, Inc.
Description
Description
CVSS Scores
EPSS Scores
| Probability: | |
| Percentile: |
Meta Information
Affected Vendors & Products
| Vendor | Product | Version / Range |
|---|---|---|
| refraction-networking | utls | From 1.6.0 (inc) to 1.8.1 (exc) |
Helpful Resources
Exploitability
| CWE ID | Description |
|---|---|
| CWE-1240 | To fulfill the need for a cryptographic primitive, the product implements a cryptographic algorithm using a non-standard, unproven, or disallowed/non-compliant cryptographic implementation. |
Attack-Flow Graph
AI Powered Q&A
What immediate steps should I take to mitigate this vulnerability?
[{'type': 'paragraph', 'content': 'The vulnerability has been fixed in uTLS version 1.8.1.'}, {'type': 'paragraph', 'content': "Immediate mitigation involves upgrading the uTLS library to version 1.8.1 or later to ensure the cipher suite selection behavior matches Chrome's and eliminates the fingerprint mismatch."}, {'type': 'paragraph', 'content': 'If upgrading is not immediately possible, consider disabling GREASE ECH usage in uTLS to avoid triggering the vulnerable code path.'}] [1]
Can you explain this vulnerability to me?
[{'type': 'paragraph', 'content': "This vulnerability exists in the uTLS Go package versions 1.6.0 through 1.8.0 and relates to how it handles GREASE ECH (Encrypted ClientHello) in a Chrome 'parrot' implementation."}, {'type': 'paragraph', 'content': 'The issue is a mismatch in cipher suite selection between the outer ClientHello and the ECH ClientHello. Chrome consistently selects cipher suites based on hardware support, so if AES is preferred for the outer ClientHello, AES is also used for ECH.'}, {'type': 'paragraph', 'content': 'However, uTLS hardcodes AES preference for the outer ClientHello but randomly chooses between AES and ChaCha20 for the ECH cipher suite. This creates a 50% chance of selecting ChaCha20 for ECH while AES is used outside, a combination that never occurs in real Chrome.'}, {'type': 'paragraph', 'content': "This discrepancy allows fingerprinting of clients using uTLS because the behavior differs from real Chrome's consistent cipher suite selection."}, {'type': 'paragraph', 'content': 'The vulnerability only affects GREASE ECH and was fixed in version 1.8.1.'}] [1]
How can this vulnerability impact me? :
This vulnerability can impact you by enabling fingerprinting of clients using the affected uTLS versions.
Because the cipher suite selection behavior in uTLS differs from real Chrome, an attacker can distinguish uTLS clients from genuine Chrome clients, potentially reducing anonymity or privacy.
The severity of this issue is rated low.
How does this vulnerability affect compliance with common standards and regulations (like GDPR, HIPAA)?:
I don't know
How can this vulnerability be detected on my network or system? Can you suggest some commands?
[{'type': 'paragraph', 'content': "This vulnerability involves a fingerprint mismatch in the uTLS library's handling of GREASE ECH cipher suite selection, specifically a 50% chance of selecting ChaCha20 for ECH while AES is used for the outer ClientHello cipher suite, which is impossible in real Chrome."}, {'type': 'paragraph', 'content': 'Detection would involve monitoring TLS ClientHello messages for inconsistent cipher suite selections between the outer ClientHello and the ECH ClientHello, particularly looking for cases where AES is used outside but ChaCha20 is selected inside ECH.'}, {'type': 'paragraph', 'content': 'Since this is a subtle fingerprinting issue in TLS handshake behavior, detection might require capturing and analyzing TLS handshake packets with tools like Wireshark or tshark, focusing on GREASE ECH ClientHello messages.'}, {'type': 'list_item', 'content': 'Use tshark or Wireshark to capture TLS ClientHello messages and inspect cipher suites in both outer and ECH ClientHello.'}, {'type': 'list_item', 'content': "Example tshark command to capture TLS handshakes: tshark -i <interface> -Y 'tls.handshake.type == 1' -V"}, {'type': 'list_item', 'content': 'Filter for GREASE ECH ClientHello messages and compare cipher suites between outer and inner ClientHello to identify mismatches.'}] [1]