Description
Net::IDN::Punycode versions from 2.301 before 2.590 for Perl allow a heap use-after-free via a decoded code point that reallocates the output buffer in decode_punycode.

The XS backend inserts each decoded code point into the string buffer of the scalar it returns. decode_punycode computes the insertion pointer first and only then grows the buffer when the code point does not fit. The growth reallocates the buffer and updates every pointer except the insertion pointer, so the move that follows and the write of the code point go through a freed pointer. The buffer starts at twice the label length, and a code point above U+FFFF takes four bytes in the output, so a label of such code points outgrows it and forces the reallocation.

Version 2.301, the fix for CVE-2016-15059, introduced the defect. Only the XS backend is affected.

Decoding an attacker-supplied punycode label reads and writes freed heap memory.
Published: 2026-09-22
Score: 8.4 High
EPSS: < 1% Very Low
KEV: No
Impact: Heap use‑after‑free that can lead to arbitrary memory read and write, potentially allowing code execution
Action: Apply Patch
AI Analysis

Impact

Net::IDN::Punycode versions from 2.301 through 2.589 contain a heap use‑after‑free when decoding punycode labels that contain code points that trigger a buffer reallocation. The XS backend inserts each decoded code point into a scalar's string buffer; when the buffer grows, the insertion pointer is not updated, so the subsequent write writes into freed memory. This flaw manifests as a read and write of freed heap memory and is classified as CWE‑416.

Affected Systems

Perl applications that use the Net::IDN::Punycode library, specifically versions 2.301 up to 2.589. The XS backend is the only affected implementation; the pure‑Perl backend is unaffected.

Risk and Exploitability

The flaw exposes a heap use‑after‑free that can be triggered by any entity able to supply a punycode label. A CVSS score of 8.4 indicates high severity, and an EPSS score of < 1% reflects a low probability of exploitation in the wild; the vulnerability is not listed in the CISA KEV catalog. Despite the modest exploitation probability, the capability for arbitrary memory read/write and potential code execution motivates a high risk assessment. Exploitation would likely involve sending a malicious punycode string to a service that decodes it without additional validation.

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

Remediation

Vendor Solution

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


OpenCVE Recommended Actions

  • Install or upgrade to Net-IDN-Encode 2.590‑TRIAL or later as published by the vendor
  • Configure applications to avoid decoding untrusted punycode labels until the module is patched
  • If upgrading is not immediately possible, reject or sanitize input containing code points above U+FFFF to prevent buffer reallocation

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

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

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

Type Values Removed Values Added
Metrics cvssV3_1

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

ssvc

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


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

Type Values Removed Values Added
Description Net::IDN::Punycode versions from 2.301 before 2.590 for Perl allow a heap use-after-free via a decoded code point that reallocates the output buffer in decode_punycode. The XS backend inserts each decoded code point into the string buffer of the scalar it returns. decode_punycode computes the insertion pointer first and only then grows the buffer when the code point does not fit. The growth reallocates the buffer and updates every pointer except the insertion pointer, so the move that follows and the write of the code point go through a freed pointer. The buffer starts at twice the label length, and a code point above U+FFFF takes four bytes in the output, so a label of such code points outgrows it and forces the reallocation. Version 2.301, the fix for CVE-2016-15059, introduced the defect. Only the XS backend is affected. Decoding an attacker-supplied punycode label reads and writes freed heap memory.
Title Net::IDN::Punycode versions from 2.301 before 2.590 for Perl allow a heap use-after-free via a decoded code point that reallocates the output buffer in decode_punycode
Weaknesses CWE-416
References

Subscriptions

No data.

cve-icon MITRE

Status: PUBLISHED

Assigner: CPANSec

Published:

Updated: 2026-09-22T12:41:52.010Z

Reserved: 2026-08-15T21:52:57.406Z

Link: CVE-2026-74766

cve-icon Vulnrichment

Updated: 2026-09-22T12:40:37.148Z

cve-icon NVD

Status : Received

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

Modified: 2026-09-22T13:17:11.010

Link: CVE-2026-74766

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-09-22T08:30:17Z

Weaknesses