Description
XS::Parse::Infix versions from 0.40 through 0.49 for Perl treat a number as an array reference.

The wrapper function XS::Parse::Infix generates for a list-associative infix operator checks whether arguments are array references, but it tests using SvRV() rather than SvROK(). SvRV() reads a union slot that only holds a referent once SvROK(sv) is true, so the guard never validates that it is a reference. For an IV or NV that slot holds the number itself, SvRV() returns the caller's value and SvTYPE() dereferences it at offset 12. This will generally result in a segmentation fault.

An application that hands the wrapper a list built from decoded input (for example, from JSON) lets whoever supplies a number in that list choose the address that the interpreter dereferences.

An ordinary string's byte 12 is rarely SVt_PVAV so the guard croaks by luck, but an attacker-crafted string carrying 0x0b there passes, and the buffer is then used as an AV head, with AvARRAY taken from bytes 16-23 and its entries pushed onto the Perl stack as live SVs.

A simple proof-of-concept uses the zip operator:

use Syntax::Operator::Zip 'zip';

my @args = ([1], 2);
zip(@args);
Published: 2026-09-28
Score: 7.5 High
EPSS: < 1% Very Low
KEV: No
Impact: Denial of Service
Action: Immediate Patch
AI Analysis

Impact

The bug arises from the XS::Parse::Infix wrapper incorrectly using SvRV() instead of SvROK() to validate array references. This causes the wrapper to read a value that is not a reference, leading to a memory access at a user‑specified address. When an attacker supplies crafted data—such as a number or a specially constructed string—in a list used by an XS::Parse::Infix‑based operator, the interpreter can dereference arbitrary memory, potentially causing a segmentation fault or leaking internal memory contents. The vulnerability represents a type‑confusion and out‑of‑bounds read, matching CWE‑843 and CWE‑125.

Affected Systems

Affected systems use the XS::Parse::Keyword module in Perl. Versions 0.40 through 0.49 contain the flaw; applications that load these modules and employ operators defined with this parser (e.g., Syntax::Operator::Zip) are susceptible. The flaw is triggered when the module processes input that includes untrusted data, such as decoded JSON or other API payloads.

Risk and Exploitability

While no known public exploit is listed in CISA KEV, the CVSS score of 7.5 indicates high severity, and the EPSS score of < 1% shows a low but nonzero likelihood of exploitation. The potential for arbitrary memory corruption indicates significant risk. Adversaries could trigger the vulnerability via web services, command‑line tools, or any interface that accepts user input. Successful exploitation could crash the interpreter, leak internal memory contents, but there is no evidence it would allow arbitrary code execution.

Generated by OpenCVE AI on September 30, 2026 at 04:48 UTC.

Remediation

Vendor Solution

Upgrade to XS-Parse-Keyword 0.50 or later.


Vendor Workaround

For deployments that cannot upgrade, ensure that correct arguments (only array references where they are expected) are passed to list-associative operators that are defined with XS::Parse::Infix, such as those in Syntax::Operator::Zip.


OpenCVE Recommended Actions

  • Upgrade XS-Parse-Keyword to version 0.50 or later
  • Enforce that only true array references are passed to operators built with XS::Parse::Infix, adding explicit type checks before the call
  • Validate and sanitize all external data (e.g., JSON) prior to constructing lists that feed into the vulnerable operators
  • Consider disabling or avoiding the use of XS::Parse::Infix‑based operators until a patch is applied

Generated by OpenCVE AI on September 30, 2026 at 04:48 UTC.

Tracking

Sign in to view the affected projects.

Advisories
Source ID Title
Ubuntu USN Ubuntu USN USN-8940-1 Perl XS::Parse::Keyword module vulnerability
History

Wed, 30 Sep 2026 20:30:00 +0000

Type Values Removed Values Added
Metrics ssvc

{'options': {'Automatable': 'yes', 'Exploitation': 'none', 'Technical Impact': 'partial'}, 'version': '2.0.3'}


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

Type Values Removed Values Added
First Time appeared Perl
Perl xs::parse::infix
Vendors & Products Perl
Perl xs::parse::infix

Tue, 29 Sep 2026 13:15:00 +0000

Type Values Removed Values Added
References
Metrics threat_severity

None

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'}

threat_severity

Important


Mon, 28 Sep 2026 19:30:00 +0000

Type Values Removed Values Added
References

Mon, 28 Sep 2026 16:30:00 +0000

Type Values Removed Values Added
Description XS::Parse::Infix versions from 0.40 through 0.49 for Perl treat a number as an array reference. The wrapper function XS::Parse::Infix generates for a list-associative infix operator checks whether arguments are array references, but it tests using SvRV() rather than SvROK(). SvRV() reads a union slot that only holds a referent once SvROK(sv) is true, so the guard never validates that it is a reference. For an IV or NV that slot holds the number itself, SvRV() returns the caller's value and SvTYPE() dereferences it at offset 12. This will generally result in a segmentation fault. An application that hands the wrapper a list built from decoded input (for example, from JSON) lets whoever supplies a number in that list choose the address that the interpreter dereferences. An ordinary string's byte 12 is rarely SVt_PVAV so the guard croaks by luck, but an attacker-crafted string carrying 0x0b there passes, and the buffer is then used as an AV head, with AvARRAY taken from bytes 16-23 and its entries pushed onto the Perl stack as live SVs. A simple proof-of-concept uses the zip operator: use Syntax::Operator::Zip 'zip'; my @args = ([1], 2); zip(@args);
Title XS::Parse::Infix versions from 0.40 through 0.49 for Perl treat a number as an array reference
Weaknesses CWE-125
CWE-843
References

Subscriptions

Perl Xs::parse::infix
cve-icon MITRE

Status: PUBLISHED

Assigner: CPANSec

Published:

Updated: 2026-09-30T19:50:14.371Z

Reserved: 2026-09-04T12:35:22.410Z

Link: CVE-2026-85644

cve-icon Vulnrichment

Updated: 2026-09-28T18:10:33.637Z

cve-icon NVD

Status : Deferred

Published: 2026-09-28T17:17:51.127

Modified: 2026-09-30T20:17:34.993

Link: CVE-2026-85644

cve-icon Redhat

Severity : Important

Publid Date: 2026-09-28T16:09:02Z

Links: CVE-2026-85644 - Bugzilla

cve-icon OpenCVE Enrichment

Updated: 2026-09-30T05:00:13Z

Weaknesses
  • CWE-125

    Out-of-bounds Read

  • CWE-843

    Access of Resource Using Incompatible Type ('Type Confusion')