Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessConnect to netty-tcnative TLS server
-
DeliverySend ClientHello with 0xC0 0x80 in server_name
-
ExploitNewStringUTF decodes overlong bytes to embedded U+0000
-
ExecutionSniHostNameMatcher/getSniHostname returns corrupted hostname
-
ImpactSpoof SNI access/cert selection or inject truncated hostname downstream
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Unicode normalization
|
| Exploitation Conditions | The library-level corruption is unconditional and affects all backends (OpenSSL-dynamic, BoringSSL-static, LibreSSL) at versions <= 2.0.83.Final, triggered by any remote client placing 0xC0 0x80 in the ClientHello server_name - no special server configuration or authentication is required to reach the vulnerable NewStringUTF path. Security IMPACT, however, is gated on the integrating application actually relying on the SNI hostname for a trust decision: specifically (a) using a SniHostNameMatcher or SSL.getSniHostname() for certificate/virtual-host selection, routing, or access control, and/or (b) downstream logic that re-encodes the hostname to standard UTF-8 (reintroducing a literal 0x00) or passes it to NUL-sensitive native/C, file-path, or logging consumers. Applications that do not use SNI-based matching or that treat the hostname as opaque are not meaningfully exposed. The limiting factors are therefore application behavior and affected version, not attacker reachability. |
| Impact | This is a genuine but moderate-priority issue, not a top-tier emergency. The input CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:N/UI:N) and the vendor GHSA CVSS 3.1 vector (AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:N, 6.5 Medium) agree: the flaw is remotely reachable, requires no authentication (PR:N) and no user interaction, and is deterministically triggerable by any TLS client via the ClientHello. However, impact is rated Low/Low because the confidentiality and integrity consequences are contingent on how the integrating application consumes the SNI hostname downstream - the library unconditionally manufactures the embedded-NUL string, but whether that leads to an access-control bypass, hostname spoofing, or log/truncation injection depends on application code. No EPSS score and no KEV listing were provided, and there is no public exploit reference in the input, so there is no signal of active or widespread exploitation. The vuln.today decision label is 'this_month,' consistent with a patch-on-normal-cadence posture rather than act_now/emergency. Note the CWE disagreement: NVD lists CWE-176 (improper Unicode encoding handling) while the vendor GHSA cites CWE-20/CWE-172/CWE-838 - a classification nuance, not a conflict in mechanism. |
| Exploit ScenarioDerived | A remote unauthenticated client opens a TLS connection to a netty-tcnative-backed server and sends a ClientHello whose server_name extension embeds the modified-UTF-8 overlong sequence 0xC0 0x80. OpenSSL's own embedded-NUL check passes it through, but JNI NewStringUTF() decodes those bytes into a genuine U+0000 inside the Java hostname string handed to SniHostNameMatcher.match() and SSL.getSniHostname(). If the application uses that hostname for certificate/virtual-host selection, routing, logging, or access decisions, the attacker can confuse those decisions or inject a truncated hostname downstream. The reporter (VulnCheck) reproduced the library-level corruption deterministically (3/3), but no public weaponized exploit is referenced. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 26, 2026
netty-tcnative through 2.0.83.Final passes the raw SNI server_name from the ClientHello into JNI's NewStringUTF(), which decodes modified UTF-8 rather than standard UTF-8. A remote, unauthenticated client can therefore place the overlong two-byte sequence 0xC0 0x80 in the SNI extension and have it materialize as an embedded U+0000 character inside the Java hostname string handed to SniHostNameMatcher and returned by SSL.getSniHostname(), letting the attacker influence SNI-based certificate selection, access-control decisions and logging. The assessed severity is CVSS 3.1 6.5 (AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:N); the library-level corruption is unconditional, but real-world impact is gated on the integrating application actually relying on that hostname for a trust decision or re-encoding it downstream. The advisory documents a deterministic researcher reproduction against an unmodified build; no public exploit code is referenced, and there is no KEV or EPSS signal in the provided data.
RemediationAI
Upgrade to netty-tcnative 2.0.84.Final (or later) for every artifact in use - io.netty:netty-tcnative and io.netty:netty-tcnative-boringssl-static are both fixed in that version; this is the vendor-released patch. The fix (commit a879c85b9776cf478aada3ca69e60b8c0a99ed38) replaces NewStringUTF() with the length-bounded tcn_new_stringn(e, servername, strlen(servername)) in both sslcontext.c (ssl_servername_cb) and ssl.c (SSL.getSniHostname), so the hostname is constructed from bounded bytes instead of modified-UTF-8 decoding; verify the shipped native libraries actually carry that commit, since the native binaries must be rebuilt, not just the Java dependency bumped. Until the upgrade is deployed, the practical compensating control lives in the application: do not treat the SniHostNameMatcher or SSL.getSniHostname() value as a trusted identity for certificate or virtual-host selection without first rejecting hostnames that are non-ASCII or contain U+0000, and avoid re-encoding the hostname to standard UTF-8 or passing it into NUL-sensitive native, file-path or syslog consumers - the trade-off is that strict rejection may break legitimate internationalized SNI values, which RFC 6066 does not actually permit in HostName. Applications that never use SNI matching and treat the hostname as opaque are not meaningfully exposed, so inventory usage of SniHostNameMatcher and SSL.getSniHostname() before prioritizing. Advisory: https://github.com/netty/netty-tcnative/security/advisories/GHSA-2784-hxmm-4hgf and https://www.vulncheck.com/advisories/netty-netty-tcnative-before-2.0.84-final-sni-hostname-spoofing-via-modified-utf-8-decoding.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 2 packages in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
OpenSSL, BoringSSL and LibreSSL guarantee only that SSL_get_servername(ssl, TLSEXT_NAMETYPE_host_name) returns a C string free of a literal 0x00 byte - not that it is valid ASCII or UTF-8. netty-tcnative relied on that single invariant in two places: the ssl_servername_cb internal callback (openssl-dynamic/src/main/c/sslcontext.c) that feeds the application's SniHostNameMatcher.match(long, String), and the public SSL.getSniHostname() getter (openssl-dynamic/src/main/c/ssl.c), both of which called JNI NewStringUTF(). Modified UTF-8 encodes U+0000 as the overlong pair 0xC0 0x80, so those wire bytes pass OpenSSL's embedded-NUL check but are decoded by the JVM into a genuine NUL character inside the resulting Java String - manufacturing an embedded-NUL hostname from bytes that never contained one (CWE-176 Improper Handling of Unicode Encoding, with the advisory also classifying it as CWE-838, CWE-20 and CWE-172). The defect is in the generic JNI wrapper layer, so every backend is affected: netty-tcnative (OpenSSL dynamic), BoringSSL static and LibreSSL. Notably, the ALPN/NPN paths in the same files already use the length-bounded, encoding-agnostic tcn_new_stringn(e, data, len), which is exactly the fix the commit a879c85b9776cf478aada3ca69e60b8c0a99ed38 applies to both SNI sinks. A downstream consumer that re-encodes the hostname with StandardCharsets.UTF_8 reintroduces a literal 0x00 byte, the classic precondition for NUL truncation or injection in file-path construction, C interop or syslog.
Know when Netty 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:N/VI:L/VA:N/SC:N/SI:N/SA:N
SNI is sent pre-auth in the ClientHello so AV:N/PR:N/UI:N, the 0xC0 0x80 trigger is deterministic giving AC:L, and access-control/encoding confusion yields C:L/I:L with no availability impact.
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
DescriptionCVE.org
Netty netty-tcnative before 2.0.84.Final contains an SNI hostname spoofing vulnerability that allows remote unauthenticated clients to alter hostnames via JNI NewStringUTF decoding. Attackers can send overlong encodings like 0xC0 0x80 in the ClientHello server_name to confuse SNI-based certificate selection, access decisions, and logging.
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
Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.
Denial of service against HTTP/2 server implementations allows remote unauthenticated attackers to exhaust server resour
Netty before 4.1.42.Final mishandles whitespace before the colon in HTTP headers (such as a "Transfer-Encoding : chunked
Certificate revocation-check bypass in the Netty network framework's OCSP client (io.netty:netty-handler-ssl-ocsp) affec
netty-incubator-codec-ohttp is the OHTTP implementation for netty. Rated critical severity (CVSS 9.1), this vulnerabilit
The netty incubator codec.bhttp is a java language binary http parser. Rated high severity (CVSS 8.1), this vulnerabilit
Netty, an asynchronous, event-driven network application framework, has a vulnerability starting in version 4.1.91.Final
Memory exhaustion in Netty's SctpMessageCompletionHandler (netty-transport-sctp) allows unauthenticated remote peers to
Compression-amplification denial of service in the Netty network framework (versions prior to 4.1.136.Final and 4.2.16.F
Memory-amplification denial of service in the Netty network framework (SPDY/3.1 codec) prior to 4.1.136.Final and 4.2.16
Memory-exhaustion denial of service in Netty's HTTP/3 codec (Http3FrameCodec) affects all releases prior to 4.2.16.Final
Netty's HTTP CORS handler silently rewrites the Vary response header to Vary: Origin in releases before 4.1.137.Final an
Denial of service in the Netty HTTP/3 codec (io.netty:netty-codec-http3) prior to version 4.2.15.Final allows remote una
EUVD-2026-109912
GHSA-98m4-7wj9-fxmw
NVD
CVE.org
EPSS
Exploit-DB