Skip to main content

netty-tcnative CVE-2026-116542

| EUVDEUVD-2026-109912 MEDIUM
Improper Handling of Unicode Encoding (CWE-176)
2026-10-26 VulnCheck GHSA-98m4-7wj9-fxmw
6.9
CVSS 4.0 · Vendor: VulnCheck
View

Attack ChainAIDerived

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

  1. Access
    Connect to netty-tcnative TLS server
  2. Delivery
    Send ClientHello with 0xC0 0x80 in server_name
  3. Exploit
    NewStringUTF decodes overlong bytes to embedded U+0000
  4. Execution
    SniHostNameMatcher/getSniHostname returns corrupted hostname
  5. Impact
    Spoof 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.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.2% exploitation probability (EPSS)

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

Alert me

AnalysisAIv1 – 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

netty-tcnative 0 <2.0.84.Final
netty-tcnative-boringssl-static 0 <2.0.84.Final

Affected Packages

euvd netty_tcnative fix: 2.0.84.Final
euvd netty_tcnative_boringssl_static fix: 2.0.84.Final

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

Vendor (VulnCheck) PRIMARY 6.9 MEDIUM
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
vuln.today AI 6.5 MEDIUM

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.

3.1 AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:N
4.0 AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:L/VA:N/SC:N/SI:N/SA:N

Primary rating from Vendor (VulnCheck).

CVSS VectorVendor: VulnCheck

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

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

EPSS Score
0.2%
Top 89% exploitable
Prevalence
High
optional native OpenSSL/TLS component widely used across Netty-based Java servers
Data Quality
4 sources
Confidence: Medium

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 MEDIUM
CISA KEV No
Public POC No
EPSS 0.2%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.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
Scheduled
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
Yes
Human Impact· derived
High

Priority Score

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

Attack Technique

Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.

More in Netty

View all
CVE-2023-44487 HIGH POC
7.5 Oct 10

Denial of service against HTTP/2 server implementations allows remote unauthenticated attackers to exhaust server resour

CVE-2019-16869 HIGH POC
7.5 Sep 26

Netty before 4.1.42.Final mishandles whitespace before the colon in HTTP headers (such as a "Transfer-Encoding : chunked

CVE-2026-56820 CRITICAL POC
9.1 Jul 21

Certificate revocation-check bypass in the Netty network framework's OCSP client (io.netty:netty-handler-ssl-ocsp) affec

CVE-2024-36121 CRITICAL POC
9.1 Jun 04

netty-incubator-codec-ohttp is the OHTTP implementation for netty. Rated critical severity (CVSS 9.1), this vulnerabilit

CVE-2024-40642 HIGH POC
8.1 Jul 18

The netty incubator codec.bhttp is a java language binary http parser. Rated high severity (CVSS 8.1), this vulnerabilit

CVE-2025-24970 HIGH POC
7.5 Feb 10

Netty, an asynchronous, event-driven network application framework, has a vulnerability starting in version 4.1.91.Final

CVE-2026-59902 HIGH POC
7.5 Aug 17

Memory exhaustion in Netty's SctpMessageCompletionHandler (netty-transport-sctp) allows unauthenticated remote peers to

CVE-2026-55833 HIGH POC
7.5 Jul 20

Compression-amplification denial of service in the Netty network framework (versions prior to 4.1.136.Final and 4.2.16.F

CVE-2026-55831 HIGH POC
7.5 Jul 20

Memory-amplification denial of service in the Netty network framework (SPDY/3.1 codec) prior to 4.1.136.Final and 4.2.16

CVE-2026-56816 HIGH POC
7.5 Jul 21

Memory-exhaustion denial of service in Netty's HTTP/3 codec (Http3FrameCodec) affects all releases prior to 4.2.16.Final

CVE-2026-59903 HIGH POC
7.5 Aug 17

Netty's HTTP CORS handler silently rewrites the Vary response header to Vary: Origin in releases before 4.1.137.Final an

CVE-2026-48748 HIGH POC
7.5 Jun 12

Denial of service in the Netty HTTP/3 codec (io.netty:netty-codec-http3) prior to version 4.2.15.Final allows remote una

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