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.
Published: 2026-09-22
Score: 7.5 High
EPSS: < 1% Very Low
KEV: No
Impact: Denial of Service
Action: Immediate Patch
AI Analysis

Impact

The Net::IDN::Encode module for Perl does not validate UTF-8 input when encoding Punycode. Malformed UTF-8 can cause the encoder to hang, crash, or produce an incorrect label, resulting in denial of service or integrity problems for applications that rely on correct domain name handling. The weakness involves unchecked string handling and unsafe low‑level memory operations.

Affected Systems

Any Perl application that uses Net::IDN::Encode prior to version 2.590 is impacted. This CPAN module is commonly included in web frameworks, mail libraries, and other Perl tools that process internationalized domain names. The decoder function is not affected, and versions 2.590 and later contain the fix.

Risk and Exploitability

The CVSS score is 7.5, and the EPSS score is less than 1%. The vulnerability is not listed in the CISA KEV catalog. Because encode_punycode can be invoked with user‑supplied data, an attacker who can influence that call can trigger a crash or hang. No publicly reported exploit exists, but the lack of a recent update does not reduce the potential for a denial of service.

Generated by OpenCVE AI on September 22, 2026 at 17:46 UTC.

Remediation

Vendor Solution

Upgrade to Net-IDN-Encode 2.590-TRIAL or later.


OpenCVE Recommended Actions

  • Upgrade Net::IDN::Encode to version 2.590‑TRIAL or later.
  • Refactor code to validate that all strings passed to encode_punycode are well‑formed UTF‑8 before calling the function.
  • If an upgrade cannot be performed immediately, replace the module with a local stub that rejects malformed UTF‑8 and logs a warning.

Generated by OpenCVE AI on September 22, 2026 at 17:46 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

Tue, 22 Sep 2026 18:30:00 +0000

Type Values Removed Values Added
References
Metrics ssvc

{'options': {'Automatable': 'yes', 'Exploitation': 'none', 'Technical Impact': 'partial'}, 'version': '2.0.3'}


Tue, 22 Sep 2026 16:30:00 +0000

Type Values Removed Values Added
Metrics cvssV3_1

{'score': 7.5, 'vector': 'CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H'}


Tue, 22 Sep 2026 07:30:00 +0000

Type Values Removed Values Added
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.
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
Weaknesses CWE-1286
CWE-835
References

Subscriptions

No data.

cve-icon MITRE

Status: PUBLISHED

Assigner: CPANSec

Published:

Updated: 2026-09-22T17:07:32.600Z

Reserved: 2026-09-08T19:22:20.005Z

Link: CVE-2026-87082

cve-icon Vulnrichment

Updated: 2026-09-22T17:07:32.600Z

cve-icon NVD

Status : Deferred

Published: 2026-09-22T08:16:40.973

Modified: 2026-09-22T19:07:00.983

Link: CVE-2026-87082

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-09-22T18:00:17Z

Weaknesses
  • CWE-1286

    Improper Validation of Syntactic Correctness of Input

  • CWE-835

    Loop with Unreachable Exit Condition ('Infinite Loop')