{"api_version":"1","generated_at":"2026-07-21T07:24:44+00:00","cve":"CVE-2026-64194","urls":{"html":"https://cve.report/CVE-2026-64194","api":"https://cve.report/api/cve/CVE-2026-64194.json","docs":"https://cve.report/api","cve_org":"https://www.cve.org/CVERecord?id=CVE-2026-64194","nvd":"https://nvd.nist.gov/vuln/detail/CVE-2026-64194"},"summary":{"title":"Net::DNS versions through 1.55 for Perl allow Denial of Service via deep DNS compression pointer chains","description":"Net::DNS versions through 1.55 for Perl allow Denial of Service via deep DNS compression pointer chains.\n\nNet::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.\n\nThe 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.\n\nA 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.\n\nThe vulnerability is triggered by `Net::DNS::Packet->new(\\$wire)` i.e. any point where the library decodes a DNS message from the network.","state":"PUBLISHED","assigner":"CPANSec","published_at":"2026-07-20 19:17:30","updated_at":"2026-07-20 21:16:50"},"problem_types":["CWE-674","CWE-674 CWE-674 Uncontrolled Recursion"],"metrics":[],"references":[{"url":"http://www.openwall.com/lists/oss-security/2026/07/20/13","name":"http://www.openwall.com/lists/oss-security/2026/07/20/13","refsource":"af854a3a-2127-422b-91ae-364da2661108","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://www.net-dns.org/blog/#release-candidate-for-netdns-1.56","name":"https://www.net-dns.org/blog/#release-candidate-for-netdns-1.56","refsource":"9b29abf9-4ab0-4765-b253-1875cd9b441e","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://metacpan.org/release/NLNETLABS/Net-DNS-1.55_01/changes","name":"https://metacpan.org/release/NLNETLABS/Net-DNS-1.55_01/changes","refsource":"9b29abf9-4ab0-4765-b253-1875cd9b441e","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://rt.cpan.org/Ticket/Display.html?id=179946","name":"https://rt.cpan.org/Ticket/Display.html?id=179946","refsource":"9b29abf9-4ab0-4765-b253-1875cd9b441e","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://www.cve.org/CVERecord?id=CVE-2026-64194","name":"CVE Program record","refsource":"CVE.ORG","tags":["canonical"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-64194","name":"NVD vulnerability detail","refsource":"NVD","tags":["canonical","analysis"]}],"affected":[{"source":"CNA","vendor":"NLNETLABS","product":"Net::DNS","version":"affected 1.55 custom","platforms":[]}],"timeline":[{"source":"CNA","time":"2026-07-10T00:00:00.000Z","lang":"en","value":"Issue reported publicly via RT."},{"source":"CNA","time":"2026-07-10T00:00:00.000Z","lang":"en","value":"Version 1.55_01 (release candidate for version 1.56) published on CPAN."},{"source":"CNA","time":"2026-07-18T00:00:00.000Z","lang":"en","value":"Version 1.56 published on CPAN."}],"solutions":[{"source":"CNA","title":"","value":"Upgrade to version 1.56 or later.","time":"","lang":"en"}],"workarounds":[],"exploits":[],"credits":[{"source":"CNA","value":"Steffen Ullrich","lang":"en"}],"nvd_cpes":[],"vendor_comments":[],"enrichments":{"kev":null,"epss":null,"legacy_qids":[]},"source_records":{"cve_program":{"containers":{"adp":[{"providerMetadata":{"dateUpdated":"2026-07-20T20:30:05.425Z","orgId":"af854a3a-2127-422b-91ae-364da2661108","shortName":"CVE"},"references":[{"url":"http://www.openwall.com/lists/oss-security/2026/07/20/13"}],"title":"CVE Program Container"}],"cna":{"affected":[{"collectionURL":"https://cpan.org/modules","defaultStatus":"unaffected","packageName":"Net-DNS","product":"Net::DNS","programFiles":["lib/Net/DNS/DomainName.pm"],"programRoutines":[{"name":"Net::DNS::DomainName::decode"}],"repo":"https://www.net-dns.org/svn/net-dns/","vendor":"NLNETLABS","versions":[{"lessThanOrEqual":"1.55","status":"affected","version":"0","versionType":"custom"}]}],"credits":[{"lang":"en","type":"reporter","value":"Steffen Ullrich"}],"descriptions":[{"lang":"en","value":"Net::DNS versions through 1.55 for Perl allow Denial of Service via deep DNS compression pointer chains.\n\nNet::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.\n\nThe 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.\n\nA 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.\n\nThe vulnerability is triggered by `Net::DNS::Packet->new(\\$wire)` i.e. any point where the library decodes a DNS message from the network."}],"problemTypes":[{"descriptions":[{"cweId":"CWE-674","description":"CWE-674 Uncontrolled Recursion","lang":"en","type":"CWE"}]}],"providerMetadata":{"dateUpdated":"2026-07-20T17:55:05.169Z","orgId":"9b29abf9-4ab0-4765-b253-1875cd9b441e","shortName":"CPANSec"},"references":[{"url":"https://www.net-dns.org/blog/#release-candidate-for-netdns-1.56"},{"tags":["issue-tracking"],"url":"https://rt.cpan.org/Ticket/Display.html?id=179946"},{"tags":["release-notes"],"url":"https://metacpan.org/release/NLNETLABS/Net-DNS-1.55_01/changes"}],"solutions":[{"lang":"en","value":"Upgrade to version 1.56 or later."}],"source":{"discovery":"UNKNOWN"},"timeline":[{"lang":"en","time":"2026-07-10T00:00:00.000Z","value":"Issue reported publicly via RT."},{"lang":"en","time":"2026-07-10T00:00:00.000Z","value":"Version 1.55_01 (release candidate for version 1.56) published on CPAN."},{"lang":"en","time":"2026-07-18T00:00:00.000Z","value":"Version 1.56 published on CPAN."}],"title":"Net::DNS versions through 1.55 for Perl allow Denial of Service via deep DNS compression pointer chains","x_generator":{"engine":"cpansec-cna-tool 0.1"}}},"cveMetadata":{"assignerOrgId":"9b29abf9-4ab0-4765-b253-1875cd9b441e","assignerShortName":"CPANSec","cveId":"CVE-2026-64194","datePublished":"2026-07-20T17:55:05.169Z","dateReserved":"2026-07-19T10:13:00.756Z","dateUpdated":"2026-07-20T20:30:05.425Z","state":"PUBLISHED"},"dataType":"CVE_RECORD","dataVersion":"5.2"},"nvd":{"publishedDate":"2026-07-20 19:17:30","lastModifiedDate":"2026-07-20 21:16:50","problem_types":["CWE-674","CWE-674 CWE-674 Uncontrolled Recursion"],"metrics":[],"configurations":[]},"legacy_mitre":{"record":{"CveYear":"2026","CveId":"64194","Ordinal":"1","Title":"Net::DNS versions through 1.55 for Perl allow Denial of Service ","CVE":"CVE-2026-64194","Year":"2026"},"notes":[{"CveYear":"2026","CveId":"64194","Ordinal":"1","NoteData":"Net::DNS versions through 1.55 for Perl allow Denial of Service via deep DNS compression pointer chains.\n\nNet::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.\n\nThe 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.\n\nA 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.\n\nThe vulnerability is triggered by `Net::DNS::Packet->new(\\$wire)` i.e. any point where the library decodes a DNS message from the network.","Type":"Description","Title":"Net::DNS versions through 1.55 for Perl allow Denial of Service "}]}}}