Netty: SNI handler pre-allocates up to 16 MiB from nine attacker bytes
Netty is a network application framework for development of protocol servers and clients. Prior to versions 4.1.135.Final and 4.2.15.Final, SslClientHelloHandler.decode() reads the 24-bit TLS handshake length and, when the ClientHello does not fit in the first record, eagerly allocates `ctx.alloc().buffer(handshakeLength)` (line 161). The guard at line 140 is `handshakeLength > maxClientHelloLength && maxClientHelloLength != 0`, and the commonly-used SniHandler/AbstractSniHandler constructors (SniHandler(Mapping), SniHandler(AsyncMapping), AbstractSniHandler()) pass maxClientHelloLength=0 and handshakeTimeoutMillis=0, so the length guard is disabled and no timeout is scheduled. A 16 MiB request exceeds the default pooled chunk size and becomes a huge/unpooled allocation performed immediately. The buffer is retained in the handler until the channel closes. Versions 4.1.135.Final and 4.2.15.Final patch the issue.
- Products
- Not specified
- Affected versions
- Not specified
- Fixed versions
- Not specified
- CVEs
- CVE-2026-45416
- Confirmed fixed CVEs
- Not specified
- Updated in this feed
- 4 Nov 2026, 03:06 UTC · Revision 1
Source evidence
Netty: SNI handler pre-allocates up to 16 MiB from nine attacker bytes
core-osv · Original sourcePublished 12 Jun 2026, 14:10 UTC
Netty is a network application framework for development of protocol servers and clients. Prior to versions 4.1.135.Final and 4.2.15.Final, SslClientHelloHandler.decode() reads the 24-bit TLS handshake length and, when the ClientHello does not fit in the first record, eagerly allocates `ctx.alloc().buffer(handshakeLength)` (line 161). The guard at line 140 is `handshakeLength > maxClientHelloLength && maxClientHelloLength != 0`, and the commonly-used SniHandler/AbstractSniHandler constructors (SniHandler(Mapping), SniHandler(AsyncMapping), AbstractSniHandler()) pass maxClientHelloLength=0 and handshakeTimeoutMillis=0, so the length guard is disabled and no timeout is scheduled. A 16 MiB request exceeds the default pooled chunk size and becomes a huge/unpooled allocation performed immediately. The buffer is retained in the handler until the channel closes. Versions 4.1.135.Final and 4.2.15.Final patch the issue.
osv:CVE-2026-45416
Complete source record
{
"id": "9dd2917450b8e379749abb12e331317bb60116b9ff79de7937c5873121a40237",
"url": "https://osv.dev/vulnerability/CVE-2026-45416",
"method": "structured",
"payload": {
"kind": "advisory",
"title": "Netty: SNI handler pre-allocates up to 16 MiB from nine attacker bytes",
"summary": "Netty is a network application framework for development of protocol servers and clients. Prior to versions 4.1.135.Final and 4.2.15.Final, SslClientHelloHandler.decode() reads the 24-bit TLS handshake length and, when the ClientHello does not fit in the first record, eagerly allocates `ctx.alloc().buffer(handshakeLength)` (line 161). The guard at line 140 is `handshakeLength > maxClientHelloLength && maxClientHelloLength != 0`, and the commonly-used SniHandler/AbstractSniHandler constructors (SniHandler(Mapping), SniHandler(AsyncMapping), AbstractSniHandler()) pass maxClientHelloLength=0 and handshakeTimeoutMillis=0, so the length guard is disabled and no timeout is scheduled. A 16 MiB request exceeds the default pooled chunk size and becomes a huge/unpooled allocation performed immediately. The buffer is retained in the handler until the channel closes. Versions 4.1.135.Final and 4.2.15.Final patch the issue.",
"evidence": "osv:CVE-2026-45416",
"products": [],
"severity": "high",
"structured": {
"id": "CVE-2026-45416",
"aliases": [
"CVE-2026-45416",
"GHSA-x4gw-5cx5-pgmh"
],
"metrics": [
{
"type": "CVSS_V3",
"score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H"
}
],
"affected": [
{
"ranges": [
{
"repo": "https://github.com/netty/netty",
"type": "GIT",
"events": [
{
"introduced": "0"
},
{
"fixed": "f05f765d81460799c53123a207f665bf3b465171"
},
{
"introduced": "09e64d259c99be8b5b2a471a78f11e65eb82598a"
},
{
"fixed": "a41f7b289ce1d697c50846f3ade3983e22b2ed40"
}
],
"database_specific": {
"extracted_events": [
{
"cpe": "cpe:2.3:a:netty:netty:*:*:*:*:*:*:*:*",
"range": [
{
"introduced": "0"
},
{
"fixed": "4.1.135"
}
],
"source": "CPE_RANGE"
},
{
"cpe": "cpe:2.3:a:netty:netty:*:*:*:*:*:*:*:*",
"range": [
{
"introduced": "4.2.0"
},
{
"fixed": "4.2.15"
}
],
"source": "CPE_RANGE"
},
{
"range": [
{
"fixed": "f05f765d81460799c53123a207f665bf3b465171"
}
],
"source": "REFERENCES_TAG",
"original_tag": "netty-4.1.135.Final"
},
{
"range": [
{
"fixed": "a41f7b289ce1d697c50846f3ade3983e22b2ed40"
}
],
"source": "REFERENCES_TAG",
"original_tag": "netty-4.2.15.Final"
}
]
}
}
],
"versions": [
"netty-4.1.134.Final",
"netty-4.2.14.Final",
"netty-4.1.133.Final",
"netty-4.2.13.Final",
"netty-4.2.12.Final",
"netty-4.1.132.Final",
"netty-4.2.11.Final",
"netty-4.1.131.Final",
"netty-4.2.10.Final",
"netty-4.2.9.Final",
"netty-4.1.130.Final",
"netty-4.2.8.Final",
"netty-4.1.129.Final",
"netty-4.1.128.Final",
"netty-4.2.7.Final",
"netty-4.2.6.Final",
"netty-4.1.127.Final",
"netty-4.2.5.Final",
"netty-4.1.126.Final",
"netty-4.1.125.Final",
"netty-4.2.4.Final",
"netty-4.1.124.Final",
"netty-4.1.123.Final",
"netty-4.2.3.Final",
"netty-4.2.2.Final",
"netty-4.1.122.Final",
"netty-4.2.1.Final",
"netty-4.1.121.Final",
"netty-4.1.120.Final",
"netty-4.2.0.Final",
"netty-4.1.119.Final",
"netty-4.1.118.Final",
"netty-4.1.117.Final",
"netty-4.1.116.Final",
"netty-4.1.115.Final",
"netty-4.1.114.Final",
"netty-4.1.113.Final",
"netty-4.1.112.Final",
"netty-4.1.111.Final",
"netty-4.1.110.Final",
"netty-4.1.109.Final",
"netty-4.1.108.Final",
"netty-4.1.107.Final",
"netty-4.1.106.Final",
"netty-4.1.105.Final",
"netty-4.1.104.Final",
"netty-4.1.103.Final",
"netty-4.1.102.Final",
"netty-4.1.101.Final",
"netty-4.1.100.Final",
"netty-4.1.99.Final",
"netty-4.1.98.Final",
"netty-4.1.97.Final",
"netty-4.1.96.Final",
"netty-4.1.95.Final",
"netty-4.1.94.Final",
"netty-4.1.93.Final",
"netty-4.1.92.Final",
"netty-4.1.91.Final",
"netty-4.1.90.Final",
"netty-4.1.89.Final",
"netty-4.1.88.Final",
"netty-4.1.87.Final",
"netty-4.1.86.Final",
"netty-4.1.85.Final",
"netty-4.1.84.Final",
"netty-4.1.83.Final",
"netty-4.1.82.Final",
"netty-4.1.81.Final",
"netty-4.1.80.Final",
"netty-4.1.79.Final",
"netty-4.1.78.Final",
"netty-4.1.77.Final",
"netty-4.1.76.Final",
"netty-4.1.75.Final",
"netty-4.1.74.Final",
"netty-4.1.73.Final",
"netty-4.1.72.Final",
"netty-4.1.71.Final",
"netty-4.1.70.Final",
"netty-4.1.69.Final",
"netty-4.1.68.Final",
"netty-4.1.67.Final",
"netty-4.1.66.Final",
"netty-4.1.65.Final",
"netty-4.1.64.Final",
"netty-4.1.63.Final",
"netty-4.1.62.Final",
"netty-4.1.61.Final",
"netty-4.1.60.Final",
"netty-4.1.59.Final",
"netty-4.1.58.Final",
"netty-4.1.57.Final",
"netty-4.1.56.Final",
"netty-4.1.55.Final",
"netty-4.1.54.Final",
"netty-4.1.53.Final",
"netty-4.1.52.Final",
"netty-4.1.51.Final",
"netty-4.1.50.Final",
"netty-4.1.49.Final",
"netty-4.1.48.Final",
"netty-4.1.47.Final",
"netty-4.1.46.Final",
"netty-4.1.45.Final",
"netty-4.1.44.Final",
"netty-4.1.43.Final",
"netty-4.1.42.Final",
"netty-4.1.41.Final",
"netty-4.1.40.Final",
"netty-4.1.39.Final",
"netty-4.1.38.Final",
"netty-4.1.37.Final",
"netty-4.1.36.Final",
"netty-4.1.35.Final",
"netty-4.1.34.Final",
"netty-4.1.33.Final",
"netty-4.1.32.Final",
"netty-4.1.31.Final",
"netty-4.1.30.Final",
"netty-4.1.29.Final",
"netty-4.1.28.Final",
"netty-4.1.27.Final",
"netty-4.1.26.Final",
"netty-4.1.25.Final",
"netty-4.1.24.Final",
"netty-4.1.23.Final",
"netty-4.1.22.Final",
"netty-4.1.21.Final",
"netty-4.1.20.Final",
"netty-4.1.19.Final",
"netty-4.1.18.Final",
"netty-4.1.17.Final",
"netty-4.1.16.Final",
"netty-4.1.15.Final",
"netty-4.1.14.Final",
"netty-4.1.13.Final",
"netty-4.1.12.Final",
"netty-4.1.11.Final",
"netty-4.1.10.Final",
"netty-4.1.9.Final",
"netty-4.1.8.Final",
"netty-4.1.7.Final",
"netty-4.1.6.Final",
"netty-4.1.5.Final",
"netty-4.1.4.Final",
"netty-4.1.3.Final",
"netty-4.1.2.Final",
"netty-4.1.1.Final",
"netty-4.1.0.Final",
"netty-4.1.0.CR7",
"netty-4.1.0.CR6",
"netty-4.1.0.CR5",
"netty-4.1.0.CR4",
"netty-4.1.0.CR3",
"netty-4.1.0.CR2",
"netty-4.1.0.CR1",
"netty-4.1.0.Beta8",
"netty-4.1.0.Beta7",
"netty-4.1.0.Beta6",
"netty-4.1.0.Beta5",
"netty-4.1.0.Beta4",
"netty-4.1.0.Beta3",
"netty-4.1.0.Beta2",
"netty-4.1.0.Beta1",
"netty-4.0.15.Final",
"netty-4.0.14.Final",
"netty-4.0.14.Beta1",
"netty-4.0.13.Final",
"netty-4.0.12.Final",
"netty-4.0.11.Final",
"netty-4.0.10.Final",
"netty-4.0.8.Final",
"netty-4.0.7.Final",
"netty-4.0.6.Final",
"netty-4.0.5.Final",
"netty-4.0.4.Final",
"netty-4.0.3.Final",
"netty-4.0.2.Final",
"netty-4.0.1.Final",
"netty-4.0.0.Final",
"netty-4.0.0.CR9",
"netty-4.0.0.CR8",
"netty-4.0.0.CR7",
"netty-4.0.0.CR5",
"netty-4.0.0.CR4",
"netty-4.0.0.CR3",
"netty-4.0.0.CR2",
"netty-4.0.0.CR1",
"netty-4.0.0.Beta3",
"netty-4.0.0.Beta2",
"netty-4.0.0.Beta1",
"netty-4.0.0.Alpha8",
"netty-4.0.0.Alpha7",
"netty-4.0.0.Alpha6",
"netty-4.0.0.Alpha5",
"netty-4.0.0.Alpha4",
"netty-4.0.0.Alpha3",
"netty-4.0.0.Alpha2",
"netty-4.0.0.Alpha1"
],
"database_specific": {
"source": "https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-45416.json"
}
}
],
"modified": "2026-10-28T02:30:33.062524248Z",
"provider": "osv",
"references": [
"https://github.com/netty/netty/releases/tag/netty-4.1.135.Final",
"https://github.com/netty/netty/releases/tag/netty-4.2.15.Final",
"https://security.access.redhat.com/data/csaf/v2/vex/2026/cve-2026-45416.json",
"https://access.redhat.com/errata/RHSA-2026:26017",
"https://access.redhat.com/errata/RHSA-2026:26018",
"https://access.redhat.com/errata/RHSA-2026:26586",
"https://access.redhat.com/errata/RHSA-2026:28573",
"https://access.redhat.com/errata/RHSA-2026:34608",
"https://access.redhat.com/errata/RHSA-2026:37390",
"https://access.redhat.com/errata/RHSA-2026:41951",
"https://access.redhat.com/errata/RHSA-2026:48151",
"https://access.redhat.com/errata/RHSA-2026:49700",
"https://access.redhat.com/errata/RHSA-2026:49701",
"https://access.redhat.com/errata/RHSA-2026:50085",
"https://access.redhat.com/errata/RHSA-2026:53644",
"https://access.redhat.com/errata/RHSA-2026:53645",
"https://access.redhat.com/errata/RHSA-2026:53646",
"https://access.redhat.com/errata/RHSA-2026:54435",
"https://access.redhat.com/errata/RHSA-2026:62260",
"https://access.redhat.com/errata/RHSA-2026:65126",
"https://access.redhat.com/errata/RHSA-2026:66488",
"https://access.redhat.com/errata/RHSA-2026:66545",
"https://access.redhat.com/security/cve/CVE-2026-45416",
"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/45xxx/CVE-2026-45416.json",
"https://github.com/netty/netty/security/advisories/GHSA-x4gw-5cx5-pgmh",
"https://nvd.nist.gov/vuln/detail/CVE-2026-45416",
"https://bugzilla.redhat.com/show_bug.cgi?id=2488391"
],
"provider_metadata": {
"cwe_ids": [
"CWE-770"
],
"cna_assigner": "GitHub_M",
"osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/45xxx/CVE-2026-45416.json"
}
},
"related_cves": [
{
"value": "CVE-2026-45416",
"evidence": "/id"
}
],
"security_relevant": true,
"severity_evidence": "/severity/0/score"
},
"source_id": "core-osv",
"document_id": 499900,
"published_at": "2026-06-12T14:10:05.585+00:00"
}