Description
Net::IDN::Punycode versions before 2.590 for Perl allow CPU exhaustion via quadratic insertion cost when decoding a long label in decode_punycode.

The XS backend inserts each decoded code point into a UTF-8 buffer and finds the insertion point by scanning that buffer from the start, one character at a time. The scan runs once per code point over the output built so far, so the cost is quadratic in the label length. The pure-Perl backend downgrades its input to bytes so that substr can index it directly, but takes its working copy before the downgrade, so when the input carries the UTF-8 flag every substr on the copy scans from the start, with the same quadratic cost.

Nothing bounds the label length in the to-Unicode direction. The 63-byte DNS limit is checked only when converting to ASCII, so domain_to_unicode and uts46_to_unicode pass an attacker-supplied label of any length to the decoder.
Published: 2026-09-22
Score: 7.5 High
EPSS: < 1% Very Low
KEV: No
Impact: Denial of Service via CPU exhaustion
Action: Immediate Patch
AI Analysis

Impact

The Net::IDN::Punycode Perl module contains a resource exhaustion flaw. When decoding a long domain label, the backend inserts each decoded code point into a UTF‑8 buffer while scanning from the start of the buffer each time. This leads to a quadratic time complexity in the label length, so an attacker can trigger a severe CPU spike by providing an excessively long label. The pure‑Perl variant behaves similarly because it copies the input before downgrading to bytes, causing the same scan‑from‑start overhead. There is no upper bound enforced on the label length for Unicode conversion, so any input supplied to domain_to_unicode or uts46_to_unicode can trigger the issue.

Affected Systems

The vulnerability affects the Net::IDN::Punycode Perl module, versions prior to 2.590, which is distributed via CPAN. Any Perl application that incorporates this module and performs domain name to‑Unicode conversion is potentially subject to the flaw.

Risk and Exploitability

The defect provides a denial‑of‑service path through CPU exhaustion; it requires the attacker to supply a long label to a system using the vulnerable module, typically via domain name handling in web or DNS‑looking‑up code. The CVSS score is 7.5, the EPSS score is < 1%, and it is not listed in CISA KEV. The lack of a bound on label length means an attacker can force arbitrary CPU load against the process, potentially impacting availability and business continuity in a Perl application.

Generated by OpenCVE AI on September 22, 2026 at 15:40 UTC.

Remediation

Vendor Solution

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


OpenCVE Recommended Actions

  • Upgrade the Net-IDN-Encode (Net::IDN::Punycode) module to version 2.590‑TRIAL or later. The upgrade removes the quadratic insertion cost and bounds label lengths.
  • Apply the patches linked in the advisory (00d723423b66810af26b88c552bedc61975b3078.patch and 447c6b38ef5d4570329fa4f78690f4e14e09ba0c.patch) if an immediate module upgrade is not possible, ensuring the code paths are fixed.
  • After applying the patch or upgrade, add an application‑level validation that rejects domain labels exceeding 63 bytes before passing them to the module, providing a defensive fallback for any older code still in use.

Generated by OpenCVE AI on September 22, 2026 at 15:40 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

Tue, 22 Sep 2026 13: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'}

ssvc

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


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

Type Values Removed Values Added
Description Net::IDN::Punycode versions before 2.590 for Perl allow CPU exhaustion via quadratic insertion cost when decoding a long label in decode_punycode. The XS backend inserts each decoded code point into a UTF-8 buffer and finds the insertion point by scanning that buffer from the start, one character at a time. The scan runs once per code point over the output built so far, so the cost is quadratic in the label length. The pure-Perl backend downgrades its input to bytes so that substr can index it directly, but takes its working copy before the downgrade, so when the input carries the UTF-8 flag every substr on the copy scans from the start, with the same quadratic cost. Nothing bounds the label length in the to-Unicode direction. The 63-byte DNS limit is checked only when converting to ASCII, so domain_to_unicode and uts46_to_unicode pass an attacker-supplied label of any length to the decoder.
Title Net::IDN::Punycode versions before 2.590 for Perl allow CPU exhaustion via quadratic insertion cost when decoding a long label in decode_punycode
Weaknesses CWE-407
References

Subscriptions

No data.

cve-icon MITRE

Status: PUBLISHED

Assigner: CPANSec

Published:

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

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

Link: CVE-2026-87079

cve-icon Vulnrichment

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

cve-icon NVD

Status : Deferred

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

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

Link: CVE-2026-87079

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-09-22T15:45:17Z

Weaknesses
  • CWE-407

    Inefficient Algorithmic Complexity