| Name | CVE-2026-12087 |
| Description | 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. |
| Source | CVE (at NVD; CERT, ENISA, LWN, oss-sec, fulldisc, Debian ELTS, Red Hat, Ubuntu, Gentoo, SUSE bugzilla/CVE, GitHub advisories/code/issues, web search, more) |
| Debian Bugs | 1140152 |
Vulnerable and fixed packages
The table below lists information on source packages.
| Source Package | Release | Version | Status |
|---|
| libsocket-perl (PTS) | bullseye | 2.031-1 | vulnerable |
| bookworm | 2.036-1 | vulnerable |
| trixie | 2.038-1 | vulnerable |
| forky, sid | 2.041-1 | fixed |
| perl (PTS) | bullseye | 5.32.1-4+deb11u3 | vulnerable |
| bullseye (security) | 5.32.1-4+deb11u5 | vulnerable |
| bookworm | 5.36.0-7+deb12u3 | vulnerable |
| bookworm (security) | 5.36.0-7+deb12u2 | vulnerable |
| trixie | 5.40.1-6 | vulnerable |
| forky | 5.40.1-8 | vulnerable |
| sid | 5.42.2-3 | vulnerable |
The information below is based on the following data on fixed versions.
| Package | Type | Release | Fixed Version | Urgency | Origin | Debian Bugs |
|---|
| libsocket-perl | source | (unstable) | 2.041-1 | | | |
| perl | source | (unstable) | (unfixed) | | | 1140152 |
Notes
[trixie] - libsocket-perl <no-dsa> (Minor issue)
[bookworm] - libsocket-perl <postponed> (Minor issue; up-to-3-byte heap over-read, only reachable when a script passes attacker-controlled source to pack_ip_mreq_source())
[bullseye] - libsocket-perl <postponed> (Minor issue; up-to-3-byte heap over-read, only reachable when a script passes attacker-controlled source to pack_ip_mreq_source())
https://lists.security.metacpan.org/cve-announce/msg/41020451/
Fixed by: https://github.com/Perl/perl5/commit/de19a0b0ad1900fef976c5c1400bd8f11ec6c6cb (v5.43.11)