CVE-2026-64194
Net::DNS versions through 1.55 for Perl allow Denial of Service via deep DNS compression pointer chains
Net::DNS versions through 1.55 for Perl allow Denial of Service via deep DNS compression pointer chains.
Net::DNS::DomainName::decode follows RFC 1035 compression pointers by recursing into itself with no depth limit. It is possible to construct a name which saturates the call stack (at least with larger TCP responses), leading to a potential Denial of Service.
The guard $link < $offset prevents forward and circular chains, but still allows arbitrarily long backward chains. The per-offset cache ($cache) is populated at the start of each call and short-circuits only re-traverses of the same offset - the initial descent through a fresh chain still recurses at full depth.
A crafted packet can chain two-byte compression pointers so that each one points two bytes earlier than the previous, producing a chain length of offset / 2. For the 14-bit pointer field (max offset 16383) this gives up to ~8191 recursive frames. For a TCP DNS message the limit is the 16-bit length field (~32767 frames). Perl's default C stack handles only a few thousand frames; beyond that the process receives SIGSEGV or similar, which is a denial-of-service for any application parsing untrusted DNS data.
The vulnerability is triggered by Net::DNS::Packet->new(\$wire) i.e. any point where the library decodes a DNS message from the network.
Attack profile
How easy it is to exploit
- Attack vector
- Network
- Complexity
- Low
- Privileges needed
- None
- User interaction
- None
What an attacker can affect
- Confidentiality
- None
- Integrity
- None
- Availability
- High
Exploit likelihood
What each source reports
CVE List Score used
7.5
Net::DNS versions through 1.55 for Perl allow Denial of Service via deep DNS compression pointer chains
Net::DNS versions through 1.55 for Perl allow Denial of Service via deep DNS compression pointer chains.
Net::DNS::DomainName::decode follows RFC 1035 compression pointers by recursing into itself with no depth limit. It is possible to construct a name which saturates the call stack (at least with larger TCP responses), leading to a potential Denial of Service.
The guard $link < $offset prevents forward and circular chains, but still allows arbitrarily long backward chains. The per-offset cache ($cache) is populated at the start of each call and short-circuits only re-traverses of the same offset - the initial descent through a fresh chain still recurses at full depth.
A crafted packet can chain two-byte compression pointers so that each one points two bytes earlier than the previous, producing a chain length of offset / 2. For the 14-bit pointer field (max offset 16383) this gives up to ~8191 recursive frames. For a TCP DNS message the limit is the 16-bit length field (~32767 frames). Perl's default C stack handles only a few thousand frames; beyond that the process receives SIGSEGV or similar, which is a denial-of-service for any application parsing untrusted DNS data.
The vulnerability is triggered by Net::DNS::Packet->new(\$wire) i.e. any point where the library decodes a DNS message from the network.
- Record
CVE-2026-64194- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Weakness
- CWE-674
- Updated
- 2026-11-02
EUVDEUVD-2026-46052
7.5
Net::DNS versions through 1.55 for Perl allow Denial of Service via deep DNS compression pointer chains.
Net::DNS::DomainName::decode follows RFC 1035 compression pointers by recursing into itself with no depth limit. It is possible to construct a name which saturates the call stack (at least with larger TCP responses), leading to a potential Denial of Service.
The guard $link < $offset prevents forward and circular chains, but still allows arbitrarily long backward chains. The per-offset cache ($cache) is populated at the start of each call and short-circuits only re-traverses of the same offset - the initial descent through a fresh chain still recurses at full depth.
A crafted packet can chain two-byte compression pointers so that each one points two bytes earlier than the previous, producing a chain length of offset / 2. For the 14-bit pointer field (max offset 16383) this gives up to ~8191 recursive frames. For a TCP DNS message the limit is the 16-bit length field (~32767 frames). Perl's default C stack handles only a few thousand frames; beyond that the process receives SIGSEGV or similar, which is a denial-of-service for any application parsing untrusted DNS data.
The vulnerability is triggered by Net::DNS::Packet->new(\$wire) i.e. any point where the library decodes a DNS message from the network.
- Record
EUVD-2026-46052- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Updated
- 2026-11-02
GitHub AdvisoriesGHSA-m3gj-74x3-vc94
7.5
Net::DNS versions through 1.55 for Perl allow Denial of Service via deep DNS compression pointer...
Net::DNS versions through 1.55 for Perl allow Denial of Service via deep DNS compression pointer chains.
Net::DNS::DomainName::decode follows RFC 1035 compression pointers by recursing into itself with no depth limit. It is possible to construct a name which saturates the call stack (at least with larger TCP responses), leading to a potential Denial of Service.
The guard $link < $offset prevents forward and circular chains, but still allows arbitrarily long backward chains. The per-offset cache ($cache) is populated at the start of each call and short-circuits only re-traverses of the same offset - the initial descent through a fresh chain still recurses at full depth.
A crafted packet can chain two-byte compression pointers so that each one points two bytes earlier than the previous, producing a chain length of offset / 2. For the 14-bit pointer field (max offset 16383) this gives up to ~8191 recursive frames. For a TCP DNS message the limit is the 16-bit length field (~32767 frames). Perl's default C stack handles only a few thousand frames; beyond that the process receives SIGSEGV or similar, which is a denial-of-service for any application parsing untrusted DNS data.
The vulnerability is triggered by Net::DNS::Packet->new(\$wire) i.e. any point where the library decodes a DNS message from the network.
- Record
GHSA-m3gj-74x3-vc94- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Weakness
- CWE-674
- Updated
- 2026-11-02
NVD
7.5
Net::DNS versions through 1.55 for Perl allow Denial of Service via deep DNS compression pointer chains.
Net::DNS::DomainName::decode follows RFC 1035 compression pointers by recursing into itself with no depth limit. It is possible to construct a name which saturates the call stack (at least with larger TCP responses), leading to a potential Denial of Service.
The guard $link < $offset prevents forward and circular chains, but still allows arbitrarily long backward chains. The per-offset cache ($cache) is populated at the start of each call and short-circuits only re-traverses of the same offset - the initial descent through a fresh chain still recurses at full depth.
A crafted packet can chain two-byte compression pointers so that each one points two bytes earlier than the previous, producing a chain length of offset / 2. For the 14-bit pointer field (max offset 16383) this gives up to ~8191 recursive frames. For a TCP DNS message the limit is the 16-bit length field (~32767 frames). Perl's default C stack handles only a few thousand frames; beyond that the process receives SIGSEGV or similar, which is a denial-of-service for any application parsing untrusted DNS data.
The vulnerability is triggered by Net::DNS::Packet->new(\$wire) i.e. any point where the library decodes a DNS message from the network.
- Record
CVE-2026-64194- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Weakness
- CWE-674
- Updated
- 2026-11-02
OSVDEBIAN-CVE-2026-64194
7.5
Net::DNS versions through 1.55 for Perl allow Denial of Service via deep DNS compression pointer chains. Net::DNS::DomainName::decode follows RFC 1035 compression pointers by recursing into itself with no depth limit. It is possible to construct a name which saturates the call stack (at least with larger TCP responses), leading to a potential Denial of Service. The guard $link < $offset prevents forward and circular chains, but still allows arbitrarily long backward chains. The per-offset cache ($cache) is populated at the start of each call and short-circuits only re-traverses of the same offset - the initial descent through a fresh chain still recurses at full depth. A crafted packet can chain two-byte compression pointers so that each one points two bytes earlier than the previous, producing a chain length of offset / 2. For the 14-bit pointer field (max offset 16383) this gives up to ~8191 recursive frames. For a TCP DNS message the limit is the 16-bit length field (~32767 frames). Perl's default C stack handles only a few thousand frames; beyond that the process receives SIGSEGV or similar, which is a denial-of-service for any application parsing untrusted DNS data. The vulnerability is triggered by Net::DNS::Packet->new(\$wire) i.e. any point where the library decodes a DNS message from the network.
- Record
DEBIAN-CVE-2026-64194- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Updated
- 2026-11-02
OSVUBUNTU-CVE-2026-64194
7.5
Net::DNS versions through 1.55 for Perl allow Denial of Service via deep DNS compression pointer chains. Net::DNS::DomainName::decode follows RFC 1035 compression pointers by recursing into itself with no depth limit. It is possible to construct a name which saturates the call stack (at least with larger TCP responses), leading to a potential Denial of Service. The guard $link < $offset prevents forward and circular chains, but still allows arbitrarily long backward chains. The per-offset cache ($cache) is populated at the start of each call and short-circuits only re-traverses of the same offset - the initial descent through a fresh chain still recurses at full depth. A crafted packet can chain two-byte compression pointers so that each one points two bytes earlier than the previous, producing a chain length of offset / 2. For the 14-bit pointer field (max offset 16383) this gives up to ~8191 recursive frames. For a TCP DNS message the limit is the 16-bit length field (~32767 frames). Perl's default C stack handles only a few thousand frames; beyond that the process receives SIGSEGV or similar, which is a denial-of-service for any application parsing untrusted DNS data. The vulnerability is triggered by Net::DNS::Packet->new(\$wire) i.e. any point where the library decodes a DNS message from the network.
- Record
UBUNTU-CVE-2026-64194- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H - Updated
- 2026-11-02
Show 6 moreShow less
OSVMGASA-2026-0448 No score
Updated perl-Net-DNS packages fix security vulnerabilities
Net::DNS versions through 1.55 for Perl allow remote execution injection via EDNS EXTENDED ERROR. (CVE-2026-64193) Net::DNS versions through 1.55 for Perl allow Denial of Service via deep DNS compression pointer chains. (CVE-2026-64194) Net::DNS versions before 1.57 for Perl allow memory exhaustion via unbounded recursion in sig_data when re-encoding a message with a misplaced TSIG record. (CVE-2026-81928)
- Record
MGASA-2026-0448- Updated
- 2026-11-02
OSVopenSUSE-SU-2026:11396-1 No score
perl-Net-DNS-1.560.0-1.1 on GA media
These are all security issues fixed in the perl-Net-DNS-1.560.0-1.1 package on the GA media of openSUSE Tumbleweed.
- Record
openSUSE-SU-2026:11396-1- Updated
- 2026-11-02
OSVopenSUSE-SU-2026:21437-1 No score
Security update for perl-Net-DNS
This update for perl-Net-DNS fixes the following issues:
Changes in perl-Net-DNS:
- CVE-2026-64194: Fixed a Denial of Service via deep DNS compression pointer chains [bsc#1272214]
- CVE-2026-64193: Fixed a remote execution injection [bsc#1272212]
- Record
openSUSE-SU-2026:21437-1- Updated
- 2026-11-02
OSVopenSUSE-SU-2026:21859-1 No score
Security update for perl-Net-DNS
This update for perl-Net-DNS fixes the following issues:
Changes in perl-Net-DNS:
Updated to 1.570.0 (1.57):
See /usr/share/doc/packages/perl-Net-DNS/Changes .
-
Resync with IANA DNS parameters registry. -
EDNS: Add support for MQTYPE-QUERY option. -
Unbounded recursion when re-encoding message with misplaced TSIG CVE-2026-81928 bsc#1278084 -
UNIX resolver can fail in taint mode -
Documentation issue for Net::DNS::RR::RRSIG::verify() -
Denial of Service via long DNS compression chains CVE-2026-64194 bsc#1272214 -
Remote code injection via EDNS EXTENDED ERROR CVE-2026-64193 bsc#1272212 -
UNIX.pm: Unreachable code warning using Apache/mod_perl
- Record
openSUSE-SU-2026:21859-1- Updated
- 2026-11-02
OSVSUSE-SU-2026:3431-1 No score
Security update for perl-Net-DNS
This update for perl-Net-DNS fixes the following issue
- CVE-2026-64194: RFC 1035 compression pointers are followed via recursion with no depth limit established, which can lead to DoS when specially crafted DNS packets are parsed (bsc#1272214).
- Record
SUSE-SU-2026:3431-1- Updated
- 2026-11-02
OSVSUSE-SU-2026:3456-1 No score
Security update for perl-Net-DNS
This update for perl-Net-DNS fixes the following issue
- CVE-2026-64194: RFC 1035 compression pointers are followed via recursion with no depth limit established, which can lead to DoS when specially crafted DNS packets are parsed (bsc#1272214).
- Record
SUSE-SU-2026:3456-1- Updated
- 2026-11-02
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
libnet-dns-perlDebian:12 |
before 1.36-1+deb12u1, plus listed versions 1.36-1 |
1.36-1+deb12u1 |
libnet-dns-perlDebian:13 |
before 1.56-0+deb13u1, plus listed versions 1.50-11.53-11.54-11.55-1 |
1.56-0+deb13u1 |
libnet-dns-perlDebian:14 |
before 1.56-1, plus listed versions 1.50-11.53-11.54-11.55-1 |
1.56-1 |
perl-Net-DNSMageia:10 From an advisory covering 3 CVEs |
before 1.570.0-1.mga10 | 1.570.0-1.mga10 |
perl-Net-DNSMageia:9 From an advisory covering 3 CVEs |
before 1.360.0-1.1.mga9 | 1.360.0-1.1.mga9 |
perl-Net-DNSSUSE:Linux Enterprise Server 12 SP5-LTSS |
before 0.73-5.3.1 | 0.73-5.3.1 |
perl-Net-DNSSUSE:Linux Enterprise Server LTSS Extended Security 12 SP5 |
before 0.73-5.3.1 | 0.73-5.3.1 |
perl-Net-DNSSUSE:Linux Enterprise Module for Basesystem 15 SP7 |
before 1.14-150000.3.3.1 | 1.14-150000.3.3.1 |
perl-Net-DNSSUSE:Linux Enterprise High Performance Computing 15 SP4-ESPOS |
before 1.14-150000.3.3.1 | 1.14-150000.3.3.1 |
perl-Net-DNSSUSE:Linux Enterprise High Performance Computing 15 SP4-LTSS |
before 1.14-150000.3.3.1 | 1.14-150000.3.3.1 |
Show 19 moreShow less
| Package | Affected | Fixed |
|---|---|---|
perl-Net-DNSSUSE:Linux Enterprise High Performance Computing 15 SP5-ESPOS |
before 1.14-150000.3.3.1 | 1.14-150000.3.3.1 |
perl-Net-DNSSUSE:Linux Enterprise High Performance Computing 15 SP5-LTSS |
before 1.14-150000.3.3.1 | 1.14-150000.3.3.1 |
perl-Net-DNSSUSE:Linux Enterprise Server 15 SP4-LTSS |
before 1.14-150000.3.3.1 | 1.14-150000.3.3.1 |
perl-Net-DNSSUSE:Linux Enterprise Server 15 SP5-LTSS |
before 1.14-150000.3.3.1 | 1.14-150000.3.3.1 |
perl-Net-DNSSUSE:Linux Enterprise Server 15 SP6-LTSS |
before 1.14-150000.3.3.1 | 1.14-150000.3.3.1 |
perl-Net-DNSSUSE:Linux Enterprise Server for SAP Applications 15 SP4 |
before 1.14-150000.3.3.1 | 1.14-150000.3.3.1 |
perl-Net-DNSSUSE:Linux Enterprise Server for SAP Applications 15 SP5 |
before 1.14-150000.3.3.1 | 1.14-150000.3.3.1 |
perl-Net-DNSSUSE:Linux Enterprise Server for SAP Applications 15 SP6 |
before 1.14-150000.3.3.1 | 1.14-150000.3.3.1 |
libnet-dns-perlUbuntu:14.04:LTS |
All versions, plus listed versions 0.68-1.20.68-1.2build1 |
None known |
libnet-dns-perlUbuntu:16.04:LTS |
All versions, plus listed versions 0.81-20.81-2build1 |
None known |
libnet-dns-perlUbuntu:18.04:LTS |
All versions, plus listed versions 1.10-2 |
None known |
libnet-dns-perlUbuntu:20.04:LTS |
All versions, plus listed versions 1.20-11.21-11.22-1 |
None known |
libnet-dns-perlUbuntu:22.04:LTS |
All versions, plus listed versions 1.29-11.32-11.33-1 |
None known |
libnet-dns-perlUbuntu:24.04:LTS |
All versions, plus listed versions 1.39-2ubuntu11.40-1ubuntu11.44-1ubuntu1 |
None known |
libnet-dns-perlUbuntu:26.10 |
All versions, plus listed versions 1.54-1ubuntu11.55-1ubuntu1 |
None known |
libnet-dns-perlUbuntu:26.04:LTS |
All versions, plus listed versions 1.50-1ubuntu11.53-1ubuntu11.54-1ubuntu1 |
None known |
perl-Net-DNSopenSUSE:Tumbleweed From an advisory covering 2 CVEs |
before 1.560.0-1.1 | 1.560.0-1.1 |
perl-Net-DNSopenSUSE:Leap 16.0 From an advisory covering 2 CVEs |
before 1.460.0-bp160.2.1 | 1.460.0-bp160.2.1 |
perl-Net-DNSopenSUSE:Leap 16.0 From an advisory covering 3 CVEs |
before 1.570.0-bp160.1.1 | 1.570.0-bp160.1.1 |
History
| Recorded | Changed | Sources |
|---|---|---|
| affected, facts | ||
| first indexed | CVE List, EUVD, GitHub Advisories, NVD, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2026-64194 is a high vulnerability (CVSS 7.5) in Nlnetlabs Net::dns, published July 20, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.68%, the 52nd percentile. Fixed in libnet-dns-perl 1.36-1+deb12u1.
References
net-dns.org/blog
rt.cpan.org/Ticket/Display.html?id=179946
metacpan.org/release/NLNETLABS/Net-DNS-1.55_01/changes
openwall.com/lists/oss-security/2026/07/20/13
lists.debian.org/debian-lts-announce/2026/08/msg00052.html
nvd.nist.gov/vuln/detail/CVE-2026-64194
Show 25 moreShow less
github.com/advisories/GHSA-m3gj-74x3-vc94
security-tracker.debian.org/tracker/CVE-2026-64194
advisories.mageia.org/MGASA-2026-0448.html
bugs.mageia.org/show_bug.cgi?id=35968
openwall.com/lists/oss-security/2026/07/20/12
rt.cpan.org/Ticket/Display.html?id=179945
lists.debian.org/debian-security-announce/2026/msg00370.html
openwall.com/lists/oss-security/2026/09/02/1
metacpan.org/release/NLNETLABS/Net-DNS-1.56/source/lib/Net/DNS/RR/TSIG.pm
datatracker.ietf.org/doc/html/rfc8945
rt.cpan.org/Ticket/Display.html?id=181125
metacpan.org/release/NLNETLABS/Net-DNS-1.57/changes
lists.fedoraproject.org/archives/list/[email protected]/message/5TS4YPB3LGX5Q5VWSYLSIQZWXJU4UMZN
lists.opensuse.org/archives/list/[email protected]/message/GGGP7EQRAUOGLVT6K5VJ7U3KCA7YMNZZ
suse.com/support/update/announcement/2026/suse-su-20263431-1
bugzilla.suse.com/1272214
suse.com/security/cve/CVE-2026-64194
suse.com/support/update/announcement/2026/suse-su-20263456-1
ubuntu.com/security/CVE-2026-64194
cve.org/CVERecord?id=CVE-2026-64194
lists.security.metacpan.org/cve-announce/msg/41989541
suse.com/security/cve/CVE-2026-64193
bugzilla.suse.com/1272212
bugzilla.suse.com/1278084
suse.com/security/cve/CVE-2026-81928