Description
Net::CIDR::Set versions before 0.23 for Perl allow memory exhaustion and malformed set ranges via unbounded IPv6 prefix lengths.

The _encode method accepts any prefix length matching `(0|[1-9][0-9]*)` and passes it to _width2bits(), which builds the mask as `'1' x ($width + 8)`, one character per bit. The _inc() method then unpacks the packed mask into a Perl array of one scalar per byte, so the prefix length alone sets the allocation size: `::/100000000` builds a 100 MB string and a 12.5 million element array. The value being tested is parsed, not just the configured ranges: contains() builds a set from its argument, and _guess_coder() tries the IPv4 coder and then the IPv6 coder, so an IPv4-only set expands an oversized IPv6 prefix length before the mixed address width check rejects it.

Any caller that passes untrusted input to contains() or add() can exhaust process memory. A prefix length above 128 is also stored as a range that does not match the requested block: 2001:db8::/129 stringifies back unchanged, contains() of its own base address returns false, and removing it from a set drops the base address while the set still prints as covering it.
Published: 2026-08-12
Score: 7.5 High
EPSS: < 1% Very Low
KEV: No
Impact: n/a
Action: n/a
AI Analysis

Impact

The Net::CIDR::Set Perl module in versions prior to 0.23 accepts any integer as an IPv6 prefix length, even values far beyond the 128‑bit limit. During encoding, the library constructs a binary mask whose size is proportional to the supplied prefix length, resulting in a string of at least (prefix+8) bits. An attacker can therefore trigger gigantic memory allocation, exhausting system resources and causing a denial of service. In addition, prefixes greater than 128 are stored as ranges that do not match the intended network, leading to malformed set arithmetic in which containment checks fail or removal operations leave an inaccurate representation of the set.

Affected Systems

All installations of the Net::CIDR::Set CPAN module (RRWO:Net::CIDR::Set) older than version 0.23 are affected. The 0.23 release and later provide the necessary fix.

Risk and Exploitability

The most likely attack vector is when an application that uses Net::CIDR::Set receives untrusted IP range data and passes it directly to contains() or add(). The underlying library then allocates an enormous amount of memory, potentially crashing the process. The CVSS score of 7.5 indicates a high severity; the EPSS score of < 1% suggests a low current exploitation probability, but the presence of a memory exhaustion flaw and lack of input validation still make it a high‑risk vulnerability. The CVE is not listed in KEV, and the associated CWE identifiers (CWE‑1284 and CWE‑789) indicate a significant impact on confidentiality, integrity, and availability.

Generated by OpenCVE AI on August 12, 2026 at 22:48 UTC.

Remediation

Vendor Solution

Upgrade to Net::CIDR::Set version 0.23 or later.


Vendor Workaround

For deployments that cannot upgrade, apply the patch.


OpenCVE Recommended Actions

  • Upgrade Net::CIDR::Set to version 0.23 or later.
  • If an upgrade cannot be performed, apply the patch released in the GitHub commit e16b27db676fd1ca671fbb31208a22c1b1ba9724.
  • Implement input validation to ensure all supplied IPv6 prefix lengths are no greater than 128 before invoking contains() or add().

Generated by OpenCVE AI on August 12, 2026 at 22:48 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

Wed, 12 Aug 2026 20: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': 'yes', 'Exploitation': 'none', 'Technical Impact': 'partial'}, 'version': '2.0.3'}


Wed, 12 Aug 2026 17:00:00 +0000

Type Values Removed Values Added
First Time appeared Rrwo
Rrwo net::cidr::set
Vendors & Products Rrwo
Rrwo net::cidr::set

Wed, 12 Aug 2026 08:45:00 +0000

Type Values Removed Values Added
Description Net::CIDR::Set versions before 0.23 for Perl allow memory exhaustion and malformed set ranges via unbounded IPv6 prefix lengths. The _encode method accepts any prefix length matching `(0|[1-9][0-9]*)` and passes it to _width2bits(), which builds the mask as `'1' x ($width + 8)`, one character per bit. The _inc() method then unpacks the packed mask into a Perl array of one scalar per byte, so the prefix length alone sets the allocation size: `::/100000000` builds a 100 MB string and a 12.5 million element array. The value being tested is parsed, not just the configured ranges: contains() builds a set from its argument, and _guess_coder() tries the IPv4 coder and then the IPv6 coder, so an IPv4-only set expands an oversized IPv6 prefix length before the mixed address width check rejects it. Any caller that passes untrusted input to contains() or add() can exhaust process memory. A prefix length above 128 is also stored as a range that does not match the requested block: 2001:db8::/129 stringifies back unchanged, contains() of its own base address returns false, and removing it from a set drops the base address while the set still prints as covering it.
Title Net::CIDR::Set versions before 0.23 for Perl allow memory exhaustion and malformed set ranges via unbounded IPv6 prefix lengths
Weaknesses CWE-1284
CWE-789
References

Subscriptions

Rrwo Net::cidr::set
cve-icon MITRE

Status: PUBLISHED

Assigner: CPANSec

Published:

Updated: 2026-08-12T19:49:32.903Z

Reserved: 2026-08-11T18:53:07.963Z

Link: CVE-2026-19566

cve-icon Vulnrichment

Updated: 2026-08-12T19:49:30.358Z

cve-icon NVD

Status : Deferred

Published: 2026-08-12T09:17:29.753

Modified: 2026-08-26T16:51:19.490

Link: CVE-2026-19566

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-08-12T23:00:05Z

Weaknesses
  • CWE-1284

    Improper Validation of Specified Quantity in Input

  • CWE-789

    Memory Allocation with Excessive Size Value