Skip to main content

Perl Socket CVE-2026-12087

| EUVDEUVD-2026-37009 CRITICAL
Out-of-bounds Read (CWE-125)
2026-06-15 CPANSec GHSA-q5cv-5vf6-95gp
Critical
Disputed · 9.1 Vendor: CPANSec
Share

Severity by source

Sources disagree (Medium–Critical)
Vendor (CPANSec) PRIMARY
9.1 CRITICAL
AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:H
vuln.today AI
3.7 LOW

Reachability requires an application to pass an under-length source (AC:H); impact is a bounded 3-byte heap read (C:L), with no integrity effect and no reliable crash (A:N).

3.1 AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:N/A:N
4.0 AV:N/AC:H/AT:N/PR:N/UI:N/VC:L/VI:N/VA:N/SC:N/SI:N/SA:N
SUSE
5.3 MEDIUM
AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N
Red Hat
5.3 MEDIUM
qualitative

vuln.today treats the vendor’s rating as authoritative. A higher third-party CVSS (e.g. CISA-ADP) is shown for transparency but does not drive the headline severity.

CVSS VectorVendor: CPANSec

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
None
Scope
Unchanged
Confidentiality
High
Integrity
None
Availability
High

Lifecycle Timeline

3
Source Code Evidence Fetched
Jul 23, 2026 - 16:48 vuln.today
Analysis Generated
Jul 23, 2026 - 16:48 vuln.today
CVE Published
Jun 15, 2026 - 21:11 cve.org
UNKNOWN (no severity yet)

DescriptionCVE.org

Socket versions before 2.041 for Perl have an out-of-bounds heap read.

In Socket.xs, pack_ip_mreq_source() checks the length of its source argument before the argument is read, so the check tests the byte length carried over from the preceding multiaddr argument instead. Both addresses occupy a 4-byte field, so a valid multiaddr lets a source of any length pass the check, and the source is then copied into the 4-byte imr_sourceaddr field with a fixed-size copy. A source shorter than 4 bytes is not rejected, and the copy reads up to 3 bytes past the end of its buffer.

Calling pack_ip_mreq_source() with a source value shorter than 4 bytes copies adjacent heap memory into the returned packed structure.

AnalysisAI

Out-of-bounds heap read in the Perl Socket module before 2.041 lets code that calls pack_ip_mreq_source() with a source argument shorter than 4 bytes leak up to 3 bytes of adjacent heap memory into the returned packed structure. The flaw stems from a length check evaluated against the wrong argument, so any Perl application passing attacker-influenced multicast source data to this function can disclose neighboring heap contents. No public exploit identified at time of analysis; EPSS is low (0.19%, 8th percentile) and SSVC lists exploitation as none, indicating a low-urgency information-disclosure issue despite the vendor's 9.1 score.

Technical ContextAI

Socket is the core Perl module (distribution PEVANS/Socket) that provides networking constants and the pack/unpack helpers for socket address structures such as sockaddr_in, ip_mreq and ip_mreq_source. The bug lives in the XS (C) layer, Socket.xs, in pack_ip_mreq_source(), which builds a struct ip_mreq_source containing multiaddr, source and interface addresses. The function validates the byte length of the source argument before that argument is actually fetched, so it inadvertently re-tests the length of the preceding multiaddr argument. Because both IPv4 addresses occupy a fixed 4-byte field, a well-formed 4-byte multiaddr causes the check to pass for a source of any length, after which a fixed-size 4-byte copy into imr_sourceaddr reads past the end of an under-length source buffer. This is a classic CWE-125 out-of-bounds read caused by an off-by-argument bounds check preceding a fixed-width memory copy.

RemediationAI

Vendor-released patch: Socket 2.041 - upgrade the CPAN module to 2.041 or later (release notes at https://metacpan.org/release/PEVANS/Socket-2.041/changes; upstream fix commit de19a0b0ad1900fef976c5c1400bd8f11ec6c6cb in perl5). On distributions that bundle Socket with core Perl, apply the vendor package update instead, such as Red Hat RHSA-2026:11342 (https://access.redhat.com/errata/RHSA-2026:11342) or the equivalent SUSE erratum. If patching must be deferred, the practical compensating control is to audit and avoid calling pack_ip_mreq_source() with externally influenced or variable-length source arguments and to explicitly validate that any source value is exactly 4 bytes (a packed IPv4 address, e.g. via inet_aton) before passing it, which removes the trigger at the application layer; the trade-off is that this only protects code you control and does not fix other consumers of the module.

Vendor StatusVendor

SUSE

Severity: Moderate
Product Status
SLES15-SP5-CHOST-BYOS-SAP-CCloud Affected
SLES15-SP6-CHOST-BYOS Affected
SLES15-SP6-CHOST-BYOS-Aliyun Affected
SLES15-SP6-CHOST-BYOS-Azure Affected
SLES15-SP6-CHOST-BYOS-EC2 Affected

Share

CVE-2026-12087 vulnerability details – vuln.today

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy