ubuntu-cve-2026-19566
Vulnerability from osv_ubuntu
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.
{
"affected": [
{
"ecosystem_specific": {
"binaries": [
{
"binary_name": "libnet-cidr-set-perl",
"binary_version": "0.13-2"
}
]
},
"package": {
"ecosystem": "Ubuntu:20.04:LTS",
"name": "libnet-cidr-set-perl",
"purl": "pkg:deb/ubuntu/libnet-cidr-set-perl@0.13-2?arch=source\u0026distro=focal"
},
"ranges": [
{
"events": [
{
"introduced": "0"
}
],
"type": "ECOSYSTEM"
}
],
"versions": [
"0.13-2"
]
},
{
"ecosystem_specific": {
"binaries": [
{
"binary_name": "libnet-cidr-set-perl",
"binary_version": "0.13-3"
}
]
},
"package": {
"ecosystem": "Ubuntu:22.04:LTS",
"name": "libnet-cidr-set-perl",
"purl": "pkg:deb/ubuntu/libnet-cidr-set-perl@0.13-3?arch=source\u0026distro=jammy"
},
"ranges": [
{
"events": [
{
"introduced": "0"
}
],
"type": "ECOSYSTEM"
}
],
"versions": [
"0.13-3"
]
},
{
"ecosystem_specific": {
"binaries": [
{
"binary_name": "libnet-cidr-set-perl",
"binary_version": "0.13-5"
}
]
},
"package": {
"ecosystem": "Ubuntu:24.04:LTS",
"name": "libnet-cidr-set-perl",
"purl": "pkg:deb/ubuntu/libnet-cidr-set-perl@0.13-5?arch=source\u0026distro=noble"
},
"ranges": [
{
"events": [
{
"introduced": "0"
}
],
"type": "ECOSYSTEM"
}
],
"versions": [
"0.13-4",
"0.13-5"
]
},
{
"ecosystem_specific": {
"binaries": [
{
"binary_name": "libnet-cidr-set-perl",
"binary_version": "0.19-1"
}
]
},
"package": {
"ecosystem": "Ubuntu:26.04:LTS",
"name": "libnet-cidr-set-perl",
"purl": "pkg:deb/ubuntu/libnet-cidr-set-perl@0.19-1?arch=source\u0026distro=resolute"
},
"ranges": [
{
"events": [
{
"introduced": "0"
}
],
"type": "ECOSYSTEM"
}
],
"versions": [
"0.19-1"
]
}
],
"aliases": [],
"details": "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 `\u00271\u0027 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.",
"id": "UBUNTU-CVE-2026-19566",
"modified": "2026-08-13T00:00:00Z",
"published": "2026-08-13T00:00:00Z",
"references": [
{
"type": "REPORT",
"url": "https://ubuntu.com/security/CVE-2026-19566"
},
{
"type": "REPORT",
"url": "https://www.cve.org/CVERecord?id=CVE-2026-19566"
},
{
"type": "REPORT",
"url": "https://lists.security.metacpan.org/cve-announce/msg/42620063/"
},
{
"type": "REPORT",
"url": "https://github.com/robrwo/perl-Net-CIDR-Set/security/advisories/GHSA-grjr-r4x5-mx4p"
},
{
"type": "REPORT",
"url": "https://github.com/robrwo/perl-Net-CIDR-Set/commit/e16b27db676fd1ca671fbb31208a22c1b1ba9724.patch"
},
{
"type": "REPORT",
"url": "https://metacpan.org/release/RRWO/Net-CIDR-Set-0.23/changes"
},
{
"type": "REPORT",
"url": "https://www.cve.org/CVERecord?id=CVE-2026-49942"
}
],
"related": [],
"schema_version": "1.7.0",
"severity": [
{
"score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H",
"type": "CVSS_V3"
},
{
"score": "medium",
"type": "Ubuntu"
}
],
"upstream": [
"CVE-2026-19566"
]
}
Sightings
| Author | Source | Type | Date | Other |
|---|
Nomenclature
- Seen: The vulnerability was mentioned, discussed, or observed by the user.
- Confirmed: The vulnerability has been validated from an analyst's perspective.
- Published Proof of Concept: A public proof of concept is available for this vulnerability.
- Exploited: The vulnerability was observed as exploited by the user who reported the sighting.
- Patched: The vulnerability was observed as successfully patched by the user who reported the sighting.
- Not exploited: The vulnerability was not observed as exploited by the user who reported the sighting.
- Not confirmed: The user expressed doubt about the validity of the vulnerability.
- Not patched: The vulnerability was not observed as successfully patched by the user who reported the sighting.
The approach is described in our paper Mapping CVEs to MITRE ATT&CK Techniques: A Curated Gold-Set Classifier and the Limits of LLM-Assisted Label Expansion.