{"id":"CVE-2026-87082","aliases":["DEBIAN-CVE-2026-87082","EUVD-2026-84295","GHSA-4v8j-337r-265v","UBUNTU-CVE-2026-87082","openSUSE-SU-2026:12468-1"],"status":"published","title":"Net::IDN::Punycode versions before 2.590 for Perl hang, crash or return a wrong label via unvalidated malformed UTF-8 in encode_punycode","description":"Net::IDN::Punycode versions before 2.590 for Perl hang, crash or return a wrong label via unvalidated malformed UTF-8 in encode_punycode.\n\nNeither backend checks that its input is well-formed UTF-8, so a string with the UTF-8 flag set over malformed bytes, as the :utf8 PerlIO layer produces from any malformed input, reaches the encoder unchecked. On perl 5.32 and later the XS backend reports a malformed sequence with a length of `(STRLEN)-1`, so the scan steps back one byte instead of forward and never ends. On earlier perls the XS returns a valid label for a different name. The pure-Perl backend runs a regex over the flagged string. Depending on the bytes, it aborts with SIGBUS on perl 5.28 and later, dies with a panic, or returns a wrong label.\n\nThe documented conversion functions match the label against Unicode properties first and that match dies on such a string, so only a direct call to encode_punycode reaches the defect. The decoder is not affected.\n\nA direct caller encoding attacker-supplied bytes hangs, crashes or gets a label for a name the input never held.","severity":{"version":"3.1","score":7.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H","level":"high","assessor":"adp","from":"cve"},"epss":{"day":"2026-11-12","score":0.00406,"percentile":0.35342,"model":"v2026.06.15"},"facts":{"in_kev":false,"known_exploited":false,"public_exploit":false,"fix_available":true},"cwes":["CWE-1286","CWE-835"],"published":"2026-09-22T07:25:37Z","modified":"2026-11-07T17:27:11Z","fixes":[{"ecosystem":"Debian:14","package":"libnet-idn-encode-perl","fixed_in":["2.600-1"],"sources":["osv"]}],"affected":[{"source":"osv","ecosystem":"Debian:12","package":"libnet-idn-encode-perl","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["2.500-3","2.500-5","2.502-1","2.600-1"]},{"source":"osv","ecosystem":"Debian:13","package":"libnet-idn-encode-perl","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["2.500-5","2.502-1","2.600-1"]},{"source":"osv","ecosystem":"Debian:14","package":"libnet-idn-encode-perl","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"2.600-1"}]}],"versions":["2.500-5","2.502-1"]},{"source":"osv","ecosystem":"Ubuntu:16.04:LTS","package":"libnet-idn-encode-perl","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["2.202-1","2.300-1","2.300-1build1"]},{"source":"osv","ecosystem":"Ubuntu:18.04:LTS","package":"libnet-idn-encode-perl","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["2.400-1build1"]},{"source":"osv","ecosystem":"Ubuntu:20.04:LTS","package":"libnet-idn-encode-perl","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["2.500-1","2.500-1build1"]},{"source":"osv","ecosystem":"Ubuntu:22.04:LTS","package":"libnet-idn-encode-perl","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["2.500-1build2","2.500-2","2.500-2build1"]},{"source":"osv","ecosystem":"Ubuntu:24.04:LTS","package":"libnet-idn-encode-perl","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["2.500-3","2.500-3build1","2.500-3build2","2.500-5"]},{"source":"osv","ecosystem":"Ubuntu:26.10","package":"libnet-idn-encode-perl","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["2.500-5build1","2.500-5build2"]},{"source":"osv","ecosystem":"Ubuntu:26.04:LTS","package":"libnet-idn-encode-perl","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["2.500-5build1"]},{"source":"osv","ecosystem":"openSUSE:Tumbleweed","package":"perl-Net-IDN-Encode","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"2.600.0-1.1"}]}],"bundled":7}],"references":[{"url":"https://metacpan.org/release/PJCJ/Net-IDN-Encode-2.590-TRIAL/changes","tags":["release-notes","advisory","report"]},{"url":"https://github.com/robrwo/Net-IDN-Encode/commit/0918fb4a951ed5f4494c4cf202419c2842507ea4.patch","tags":["patch","fix","report"]},{"url":"https://github.com/robrwo/Net-IDN-Encode/commit/59dc7f2c605a897bcbfe0ac5eb2b8dbe6792348d.patch","tags":["patch","fix","report"]},{"url":"https://github.com/robrwo/Net-IDN-Encode/commit/accb6df57ad107ec0c4bfb27b21551eed97c700e.patch","tags":["patch","fix","report"]},{"url":"https://github.com/robrwo/Net-IDN-Encode/commit/572af0183b3a6294e22c6b509268da09697cf77d.patch","tags":["patch","fix","report"]},{"url":"http://www.openwall.com/lists/oss-security/2026/09/22/17","tags":["web"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-87082","tags":["advisory"]},{"url":"https://github.com/advisories/GHSA-4v8j-337r-265v"},{"url":"https://cpan.org/modules","tags":["web"]},{"url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/87xxx/CVE-2026-87082.json","tags":["advisory"]},{"url":"https://github.com/robrwo/Net-IDN-Encode","tags":["package"]},{"url":"https://security-tracker.debian.org/tracker/CVE-2026-87082","tags":["advisory"]},{"url":"https://ubuntu.com/security/CVE-2026-87082","tags":["report"]},{"url":"https://www.cve.org/CVERecord?id=CVE-2026-87082","tags":["report"]},{"url":"https://lists.security.metacpan.org/cve-announce/msg/43753021/","tags":["report"]},{"url":"","tags":["advisory"]},{"url":"https://www.suse.com/security/cve/CVE-2026-74765","tags":["web"]},{"url":"https://www.suse.com/security/cve/CVE-2026-74766","tags":["web"]},{"url":"https://www.suse.com/security/cve/CVE-2026-87078","tags":["web"]},{"url":"https://www.suse.com/security/cve/CVE-2026-87079","tags":["web"]},{"url":"https://www.suse.com/security/cve/CVE-2026-87080","tags":["web"]},{"url":"https://www.suse.com/security/cve/CVE-2026-87081","tags":["web"]},{"url":"https://www.suse.com/security/cve/CVE-2026-87082","tags":["web"]}],"sources":{"cve":[{"id":"CVE-2026-87082","title":"Net::IDN::Punycode versions before 2.590 for Perl hang, crash or return a wrong label via unvalidated malformed UTF-8 in encode_punycode","description":"Net::IDN::Punycode versions before 2.590 for Perl hang, crash or return a wrong label via unvalidated malformed UTF-8 in encode_punycode.\n\nNeither backend checks that its input is well-formed UTF-8, so a string with the UTF-8 flag set over malformed bytes, as the :utf8 PerlIO layer produces from any malformed input, reaches the encoder unchecked. On perl 5.32 and later the XS backend reports a malformed sequence with a length of `(STRLEN)-1`, so the scan steps back one byte instead of forward and never ends. On earlier perls the XS returns a valid label for a different name. The pure-Perl backend runs a regex over the flagged string. Depending on the bytes, it aborts with SIGBUS on perl 5.28 and later, dies with a panic, or returns a wrong label.\n\nThe documented conversion functions match the label against Unicode properties first and that match dies on such a string, so only a direct call to encode_punycode reaches the defect. The decoder is not affected.\n\nA direct caller encoding attacker-supplied bytes hangs, crashes or gets a label for a name the input never held.","status":"published","published":"2026-09-22T07:25:37.65Z","modified":"2026-09-22T17:07:32.6Z","cvss":[{"version":"3.1","score":7.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H","level":"high","assessor":"adp"}],"cwes":["CWE-835","CWE-1286"],"updated_at":"2026-11-02T13:37:47.463822Z"}],"euvd":[{"id":"EUVD-2026-84295","description":"Net::IDN::Punycode versions before 2.590 for Perl hang, crash or return a wrong label via unvalidated malformed UTF-8 in encode_punycode.\n\nNeither backend checks that its input is well-formed UTF-8, so a string with the UTF-8 flag set over malformed bytes, as the :utf8 PerlIO layer produces from any malformed input, reaches the encoder unchecked. On perl 5.32 and later the XS backend reports a malformed sequence with a length of `(STRLEN)-1`, so the scan steps back one byte instead of forward and never ends. On earlier perls the XS returns a valid label for a different name. The pure-Perl backend runs a regex over the flagged string. Depending on the bytes, it aborts with SIGBUS on perl 5.28 and later, dies with a panic, or returns a wrong label.\n\nThe documented conversion functions match the label against Unicode properties first and that match dies on such a string, so only a direct call to encode_punycode reaches the defect. The decoder is not affected.\n\nA direct caller encoding attacker-supplied bytes hangs, crashes or gets a label for a name the input never held.","status":"published","published":"2026-09-22T07:25:37Z","modified":"2026-09-22T17:07:32Z","cvss":[{"version":"3.1","score":7.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H","level":"high"}],"updated_at":"2026-11-02T17:28:02.601428Z"}],"ghsa":[{"id":"GHSA-4v8j-337r-265v","title":"Net::IDN::Punycode versions before 2.590 for Perl hang, crash or return a wrong label via...","description":"Net::IDN::Punycode versions before 2.590 for Perl hang, crash or return a wrong label via unvalidated malformed UTF-8 in encode_punycode.\n\nNeither backend checks that its input is well-formed UTF-8, so a string with the UTF-8 flag set over malformed bytes, as the :utf8 PerlIO layer produces from any malformed input, reaches the encoder unchecked. On perl 5.32 and later the XS backend reports a malformed sequence with a length of `(STRLEN)-1`, so the scan steps back one byte instead of forward and never ends. On earlier perls the XS returns a valid label for a different name. The pure-Perl backend runs a regex over the flagged string. Depending on the bytes, it aborts with SIGBUS on perl 5.28 and later, dies with a panic, or returns a wrong label.\n\nThe documented conversion functions match the label against Unicode properties first and that match dies on such a string, so only a direct call to encode_punycode reaches the defect. The decoder is not affected.\n\nA direct caller encoding attacker-supplied bytes hangs, crashes or gets a label for a name the input never held.","status":"published","published":"2026-09-22T09:31:13Z","modified":"2026-09-22T18:34:34Z","cvss":[{"version":"3.1","score":7.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H","level":"high"}],"cwes":["CWE-835"],"updated_at":"2026-11-02T15:12:18.539197Z"}],"nvd":[{"id":"CVE-2026-87082","description":"Net::IDN::Punycode versions before 2.590 for Perl hang, crash or return a wrong label via unvalidated malformed UTF-8 in encode_punycode.\n\nNeither backend checks that its input is well-formed UTF-8, so a string with the UTF-8 flag set over malformed bytes, as the :utf8 PerlIO layer produces from any malformed input, reaches the encoder unchecked. On perl 5.32 and later the XS backend reports a malformed sequence with a length of `(STRLEN)-1`, so the scan steps back one byte instead of forward and never ends. On earlier perls the XS returns a valid label for a different name. The pure-Perl backend runs a regex over the flagged string. Depending on the bytes, it aborts with SIGBUS on perl 5.28 and later, dies with a panic, or returns a wrong label.\n\nThe documented conversion functions match the label against Unicode properties first and that match dies on such a string, so only a direct call to encode_punycode reaches the defect. The decoder is not affected.\n\nA direct caller encoding attacker-supplied bytes hangs, crashes or gets a label for a name the input never held.","status":"published","published":"2026-09-22T08:16:40.973Z","modified":"2026-09-22T19:07:00.983Z","cvss":[{"version":"3.1","score":7.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H","level":"high","assessor":"secondary"}],"cwes":["CWE-835","CWE-1286"],"updated_at":"2026-11-02T14:12:50.368368Z"}],"osv":[{"id":"CVE-2026-87082","title":"Net::IDN::Punycode versions before 2.590 for Perl hang, crash or return a wrong label via unvalidated malformed UTF-8 in encode_punycode","description":"Net::IDN::Punycode versions before 2.590 for Perl hang, crash or return a wrong label via unvalidated malformed UTF-8 in encode_punycode.\n\nNeither backend checks that its input is well-formed UTF-8, so a string with the UTF-8 flag set over malformed bytes, as the :utf8 PerlIO layer produces from any malformed input, reaches the encoder unchecked. On perl 5.32 and later the XS backend reports a malformed sequence with a length of `(STRLEN)-1`, so the scan steps back one byte instead of forward and never ends. On earlier perls the XS returns a valid label for a different name. The pure-Perl backend runs a regex over the flagged string. Depending on the bytes, it aborts with SIGBUS on perl 5.28 and later, dies with a panic, or returns a wrong label.\n\nThe documented conversion functions match the label against Unicode properties first and that match dies on such a string, so only a direct call to encode_punycode reaches the defect. The decoder is not affected.\n\nA direct caller encoding attacker-supplied bytes hangs, crashes or gets a label for a name the input never held.","status":"published","published":"2026-09-22T07:25:37.65Z","modified":"2026-11-07T17:27:11.272057586Z","cvss":[{"version":"3.1","score":7.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H","level":"high"}],"cwes":["CWE-1286","CWE-835"],"updated_at":"2026-11-07T17:50:09.626959Z"},{"id":"DEBIAN-CVE-2026-87082","description":"Net::IDN::Punycode versions before 2.590 for Perl hang, crash or return a wrong label via unvalidated malformed UTF-8 in encode_punycode.  Neither backend checks that its input is well-formed UTF-8, so a string with the UTF-8 flag set over malformed bytes, as the :utf8 PerlIO layer produces from any malformed input, reaches the encoder unchecked. On perl 5.32 and later the XS backend reports a malformed sequence with a length of `(STRLEN)-1`, so the scan steps back one byte instead of forward and never ends. On earlier perls the XS returns a valid label for a different name. The pure-Perl backend runs a regex over the flagged string. Depending on the bytes, it aborts with SIGBUS on perl 5.28 and later, dies with a panic, or returns a wrong label.  The documented conversion functions match the label against Unicode properties first and that match dies on such a string, so only a direct call to encode_punycode reaches the defect. The decoder is not affected.  A direct caller encoding attacker-supplied bytes hangs, crashes or gets a label for a name the input never held.","status":"published","published":"2026-09-22T08:16:40.973Z","modified":"2026-11-03T04:00:11.185580644Z","cvss":[{"version":"3.1","score":7.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H","level":"high"}],"updated_at":"2026-11-03T04:20:33.401912Z"},{"id":"UBUNTU-CVE-2026-87082","description":"Net::IDN::Punycode versions before 2.590 for Perl hang, crash or return a wrong label via unvalidated malformed UTF-8 in encode_punycode. Neither backend checks that its input is well-formed UTF-8, so a string with the UTF-8 flag set over malformed bytes, as the :utf8 PerlIO layer produces from any malformed input, reaches the encoder unchecked. On perl 5.32 and later the XS backend reports a malformed sequence with a length of `(STRLEN)-1`, so the scan steps back one byte instead of forward and never ends. On earlier perls the XS returns a valid label for a different name. The pure-Perl backend runs a regex over the flagged string. Depending on the bytes, it aborts with SIGBUS on perl 5.28 and later, dies with a panic, or returns a wrong label. The documented conversion functions match the label against Unicode properties first and that match dies on such a string, so only a direct call to encode_punycode reaches the defect. The decoder is not affected. A direct caller encoding attacker-supplied bytes hangs, crashes or gets a label for a name the input never held.","status":"published","published":"2026-09-22T08:16:00Z","modified":"2026-10-17T13:01:14.264342014Z","cvss":[{"version":"3.1","score":7.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H","level":"high"}],"updated_at":"2026-11-02T16:57:24.828975Z"},{"id":"openSUSE-SU-2026:12468-1","title":"perl-Net-IDN-Encode-2.600.0-1.1 on GA media","description":"These are all security issues fixed in the perl-Net-IDN-Encode-2.600.0-1.1 package on the GA media of openSUSE Tumbleweed.","status":"published","published":"2026-11-06T00:00:00Z","modified":"2026-11-07T17:23:17.491063492Z","updated_at":"2026-11-07T17:50:39.727056Z"}]}}
