Every CVESearch/Get API key

CVE-2026-85644

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

7.5 HighFix available

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);

Attack profile

How easy it is to exploit

Attack vector
Network
Complexity
Low
Privileges needed
None
User interaction
None

What an attacker can affect

Confidentiality
None
Integrity
None
Availability
High

Exploit likelihood

0.37%Up 0.2 points since Sep 29, 2026
90%50%10%1%

What each source reports

CVE List Score used7.5

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

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);
Record
CVE-2026-85644
CVSS 3.1
7.5 HighCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Weakness
CWE-843, CWE-125
Updated
2026-11-02
EUVDEUVD-2026-883447.5

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);
Record
EUVD-2026-88344
CVSS 3.1
7.5 HighCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Updated
2026-11-02
GitHub AdvisoriesGHSA-ch9g-92vf-wwhv7.5

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

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);
Record
GHSA-ch9g-92vf-wwhv
CVSS 3.1
7.5 HighCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Weakness
CWE-125
Updated
2026-11-02
NVD7.5

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);
Record
CVE-2026-85644
CVSS 3.1
7.5 HighCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Weakness
CWE-125, CWE-843
Updated
2026-11-02
OSVDEBIAN-CVE-2026-856447.5

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);

Record
DEBIAN-CVE-2026-85644
CVSS 3.1
7.5 HighCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Updated
2026-11-02
OSVUBUNTU-CVE-2026-856447.5

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);

Record
UBUNTU-CVE-2026-85644
CVSS 3.1
7.5 HighCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Updated
2026-11-02
Show 5 moreShow less
OSVMGASA-2026-0513No score

Updated perl-XS-Parse-Keyword package fixes a security vulnerability

XS::Parse::Infix versions from 0.40 through 0.49 for Perl treat a number as an array reference. (CVE-2026-85644)

Record
MGASA-2026-0513
Updated
2026-11-02
OSVopenSUSE-SU-2026:11863-1No score

perl-XS-Parse-Keyword-0.500.0-1.1 on GA media

These are all security issues fixed in the perl-XS-Parse-Keyword-0.500.0-1.1 package on the GA media of openSUSE Tumbleweed.

Record
openSUSE-SU-2026:11863-1
Updated
2026-11-02
OSVopenSUSE-SU-2026:22101-1No score

Security update for perl-XS-Parse-Keyword

This update for perl-XS-Parse-Keyword fixes the following issue:

  • CVE-2026-85644: number treated as an array reference in infix.c (bsc#1283247).
Record
openSUSE-SU-2026:22101-1
Updated
2026-11-02
OSVSUSE-SU-2026:24244-1No score

Security update for perl-XS-Parse-Keyword

This update for perl-XS-Parse-Keyword fixes the following issue:

  • CVE-2026-85644: number treated as an array reference in infix.c (bsc#1283247).
Record
SUSE-SU-2026:24244-1
Updated
2026-11-02
OSVUSN-8940-1No score

libxs-parse-keyword-perl vulnerability

It was discovered that the Perl XS::Parse::Keyword module did not correctly handle certain inputs. If a user or automated system were tricked into receiving specially crafted input, an attacker could cause a denial of service.

Record
USN-8940-1
Updated
2026-11-02

Affected packages

Affected packages
PackageAffectedFixed
libxs-parse-keyword-perl
Debian:13
All versions, plus listed versions
0.48-20.49-10.51-1
None known
libxs-parse-keyword-perl
Debian:14
before 0.51-1, plus listed versions
0.48-20.49-1
0.51-1
perl-XS-Parse-Keyword
Mageia:10
before 0.510.0-1.mga10
0.510.0-1.mga10
perl-XS-Parse-Keyword
SUSE:Linux Enterprise Server 16.0
before 0.480.0-160000.3.1
0.480.0-160000.3.1
perl-XS-Parse-Keyword
SUSE:Linux Enterprise Server for SAP applications 16.0
before 0.480.0-160000.3.1
0.480.0-160000.3.1
libxs-parse-keyword-perl
Ubuntu:26.10
before 0.49-1ubuntu1, plus listed versions
0.49-10.49-1build1
0.49-1ubuntu1
libxs-parse-keyword-perl
Ubuntu:26.04:LTS
before 0.49-1ubuntu0.1, plus listed versions
0.48-20.49-1
0.49-1ubuntu0.1
perl-XS-Parse-Keyword
openSUSE:Tumbleweed
before 0.500.0-1.1
0.500.0-1.1
perl-XS-Parse-Keyword
openSUSE:Leap 16.0
before 0.480.0-160000.3.1
0.480.0-160000.3.1

History

History
RecordedChangedSources
first indexedCVE List, EUVD, GitHub Advisories, NVD, OSV

Dates are when Every CVE recorded each change. Upstream dates may differ.

In short

CVE-2026-85644 is a high vulnerability (CVSS 7.5) in libxs-parse-keyword-perl, published September 23, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.37%, the 31st percentile. Fixed in libxs-parse-keyword-perl 0.51-1.

References

Show 10 moreShow less
MoveEnter Open