Netty is an asynchronous, event-driven network application framework. Prior to 4.2.13.Final and 4.1.133.Final, HttpContentDecompressor accepts a maxAllocation parameter to limit decompression buffer size and prevent decompression bomb attacks. This limit is correctly enforced for gzip and deflate encodings via ZlibDecoder, but is silently ignored when the content encoding is br (Brotli), zstd, or snappy. An attacker can bypass the configured decompression limit by sending a compressed payload with Content-Encoding: br instead of Content-Encoding: gzip, causing unbounded memory allocation and out-of-memory denial of service. The same vulnerability exists in DelegatingDecompressorFrameListener for HTTP/2 connections. This vulnerability is fixed in 4.2.13.Final and 4.1.133.Final.
The product does not properly control the allocation and maintenance of a limited resource.
| Name | Vendor | Start Version | End Version |
|---|---|---|---|
| Netty | Netty | * | 4.1.133 (excluding) |
| Netty | Netty | 4.2.0 (including) | 4.2.13 (excluding) |
| Cryostat 4 on RHEL 9 | RedHat | cryostat/cryostat-reports-rhel9:4.2.0-10 | * |
| Cryostat 4 on RHEL 9 | RedHat | cryostat/cryostat-rhel9:4.2.0-10 | * |
| Cryostat 4 on RHEL 9 | RedHat | cryostat/jfr-datasource-rhel9:4.2.0-10 | * |
| Red Hat build of Quarkus 3.27.4 | RedHat | netty-codec-http | * |
| Red Hat build of Quarkus 3.27.4 | RedHat | netty-codec-http2 | * |
| Red Hat build of Quarkus 3.33.2 | RedHat | * | |
| Red Hat OpenShift Dev Spaces 3.28 | RedHat | devspaces/openvsx-rhel9:1780948325 | * |
| Red Hat OpenShift Dev Spaces 3.28 | RedHat | devspaces/pluginregistry-rhel9:1780696380 | * |
| Red Hat OpenShift Dev Spaces 3.28 | RedHat | devspaces/server-rhel9:1780694994 | * |
| Netty | Ubuntu | upstream | * |
Mitigation of resource exhaustion attacks requires that the target system either:
The first of these solutions is an issue in itself though, since it may allow attackers to prevent the use of the system by a particular valid user. If the attacker impersonates the valid user, they may be able to prevent the user from accessing the server in question.
The second solution is simply difficult to effectively institute – and even when properly done, it does not provide a full solution. It simply makes the attack require more resources on the part of the attacker.