Netty: SNI handler pre-allocates up to 16 MiB from nine attacker bytes
Package
Affected versions
>= 4.2.0.Final, <= 4.2.14.Final
<= 4.1.134.Final
Patched versions
4.2.15.Final
4.1.135.Final
Description
Published to the GitHub Advisory Database
Jun 8, 2026
Reviewed
Jun 8, 2026
Published by the National Vulnerability Database
Jun 12, 2026
Last updated
Jun 12, 2026
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 ishandshakeLength > 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.References