GHSA-mfg7-5gfp-c4w3
Netty: Memory Leak in DNS Record Decoder via Malformed Domain Names
Quick fix
GHSA-mfg7-5gfp-c4w3 — io.netty:netty-codec-dns: upgrade to the fixed version with the command below.
# pom.xml: bump <version>4.2.16.Final</version> for io.netty:netty-codec-dns Details
### Summary A memory leak can be caused in Netty's DNS codec by sending malicious DNS packets containing invalid domain names. Because the leak occurs incrementally per packet, sustained malicious requests will cause a gradual Denial of Service.
### Details Inside `io.netty.handler.codec.dns.AbstractDnsRecord`, the parsed domain name string is passed to `IDN.toASCII(name)`. If the domain name contains characters that violate IDNA rules, `IDN.toASCII` throws an `IllegalArgumentException`.
Because this exception occurs inside the constructor before the `DnsRecord` instance can assign the buffer to its content field for later release, the ByteBuf whose reference count was incremented (or newly allocated) is never released, resulting in a direct memory leak.
There are several places where variants of this leak happen: - `io.netty.handler.codec.dns.DefaultDnsRecordDecoder#decodeRecord(java.lang.String, io.netty.handler.codec.dns.DnsRecordType, int, long, io.netty.buffer.ByteBuf, int, int)` invokes `in.retainedDuplicate()` or creates a new buffer `out` when constructing `DefaultDnsRawRecord` - `io.netty.handler.codec.dns.DnsCodecUtil#decompressDomainName` allocates a new `ByteBuf` and passes it to `encodeDomainName()`. If the decompressed domain name contains a null byte (`\0`), `encodeDomainName()` throws an `IllegalArgumentException`, leaking the newly allocated buffer.
### Impact Resource Exhaustion. Any application utilizing Netty's DnsRecordDecoder (such as DnsNameResolver or custom DNS servers) is vulnerable.
Are you affected?
Enter the version of the package you're using.
Affected packages
4.2.0.Final Fixed in: 4.2.16.Final # pom.xml: bump <version>4.2.16.Final</version> for io.netty:netty-codec-dns 0 Fixed in: 4.1.136.Final # pom.xml: bump <version>4.1.136.Final</version> for io.netty:netty-codec-dns References
- https://github.com/netty/netty/security/advisories/GHSA-mfg7-5gfp-c4w3 [WEB]
- https://github.com/netty/netty/pull/17063 [WEB]
- https://github.com/netty/netty/pull/17065 [WEB]
- https://github.com/netty/netty/commit/5b68c61f37aa4a3045cba624cbea239655c9003b [WEB]
- https://github.com/netty/netty/commit/bb2ff68a1fb71cb4b0eb9a9e17b66c52aff680c6 [WEB]
- https://github.com/netty/netty [PACKAGE]
- https://github.com/netty/netty/releases/tag/netty-4.1.136.Final [WEB]
- https://github.com/netty/netty/releases/tag/netty-4.2.16.Final [WEB]