Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessSupply crafted number/string via decoded input (JSON)
-
DeliveryApp passes list to list-associative infix operator
-
ExploitSvRV guard treats value as arrayref
-
ExecutionInterpreter dereferences attacker-chosen address
-
ImpactSegfault (DoS) or arbitrary memory read as SVs
Vulnerability Assessment
| Weakness |
CWE
ASVS 5.0
V15 - Secure Coding and Architecture Type safety enforcement
MITRE ATT&CK
1 technique across 1 tactic: Execution The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires a consuming Perl application (using XS::Parse::Infix 0.40-0.49) that invokes a list-associative infix operator - such as |
| Impact | This is a CWE-843 type-confusion / memory-safety flaw in the XS::Parse::Infix Perl module (versions 0.40-0.49), where a list-associative infix operator's generated wrapper validates array-reference arguments with SvRV() instead of SvROK(), so the reference guard never actually confirms the SV holds a reference. The vendor CVSS 3.1 vector (AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H, 7.5) scores only availability impact (segfault/DoS), but the description goes further: an attacker-crafted string with byte 12 = 0x0b bypasses the accidental croak and is then treated as an AV head, with AvARRAY read from bytes 16-23 and its entries pushed onto the Perl stack as live SVs - a controlled-dereference primitive that plausibly enables information disclosure and possibly worse. The signals largely agree on real but bounded risk: EPSS is very low (0.18%, 7th percentile), there is NO CISA KEV listing (not actively exploited), and no wide-scale exploitation is expected, but a working proof-of-concept IS embedded in the advisory (the Syntax::Operator::Zip |
| Exploit ScenarioDerived | An application decodes untrusted input (for example a JSON array from an API request) and passes the resulting list to a list-associative infix operator such as |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 30, 2026
Type confusion in XS::Parse::Infix versions 0.40 through 0.49 - the Perl XS module distributed as part of XS-Parse-Keyword - lets an attacker who can influence a list handed to a list-associative infix operator (for example the zip operator from Syntax::Operator::Zip) make the interpreter dereference an address of the attacker's choosing. Supplying a bare number where an array reference is expected reliably segfaults the process (denial of service), while a crafted string carrying 0x0b at byte 12 slips past the faulty reference guard and is treated as an AV head, so bytes 16-23 are used as AvARRAY and its entries are pushed onto the Perl stack as live SVs, yielding a limited out-of-bounds read / information-disclosure primitive. Publicly available exploit code exists (a minimal zip-based proof-of-concept is described by the reporter), but there is no confirmed active exploitation (no CISA KEV listing) and EPSS is low at 0.18% (7th percentile); this is a library flaw with no standalone attack surface, so real-world risk depends entirely on whether a consuming application passes untrusted, attacker-influenced data into such an operator.
RemediationAI
Vendor-released patch: XS-Parse-Keyword 0.50 (which contains XS::Parse::Infix 0.50); upgrade the distribution from any 0.40-0.49 release to 0.50 or later, and rebuild/reinstall any downstream modules that generate wrappers from it, since the fixed code is emitted into those generated wrappers (rollback is not advisable - the 0.49 diff shows the SvRV()/SvROK() guard change in src/infix.c). If an immediate upgrade is impossible, the effective compensating control is application-level input validation at the boundary where untrusted data reaches a list-associative operator: never pass a decoded structure straight into operators such as zip from Syntax::Operator::Zip, and instead enforce an explicit schema that rejects any element that is not a genuine ARRAY reference (a reftype/ref() check on every element) before the call, accepting the trade-off that a validation mistake reintroduces the type confusion and that such checks add per-call overhead. Wrapping or normalising scalars into arrayrefs before invocation also removes the mixed list, but this changes application semantics for callers that legitimately pass scalars and must be reviewed. Running the affected interpreter under a process supervisor with automatic restart, in a low-privilege per-request worker (for example a forking PSGI/Plack server or container with a minimal user and seccomp/ASLR enabled), limits the blast radius of the guaranteed segfault path and makes the crafted-string information disclosure harder to reach - but it does not eliminate the memory-safety flaw and should be considered only a stop-gap. Perl-level taint mode or JSON-with-strict-schema decoding cannot by itself distinguish a suitably crafted string, so no purely input-scanning mitigation should be treated as complete. Patch status: a vendor-released fix (0.50) is available; there is no evidence in the supplied data of any fixed 0.40-0.49 branch release.
Affected ProductsAI
XS::Parse::Infix versions from 0.40 through 0.49 inclusive are affected; the module is packaged within the PEVANS XS-Parse-Keyword distribution for Perl, and the fix is shipped in XS-Parse-Keyword 0.50 (see the release changes at https://metacpan.org/release/PEVANS/XS-Parse-Keyword-0.50/changes and the source diff at https://metacpan.org/release/PEVANS/XS-Parse-Keyword-0.50/diff/PEVANS/XS-Parse-Keyword-0.49#src/infix.c). Because the flaw lives in generated XS wrapper code, any downstream Perl module or application that declares a list-associative infix operator with the affected versions inherits it - the zip operator from Syntax::Operator::Zip is the concrete example used in the proof-of-concept. No machine-readable CPE identifiers were included in the supplied data, so no CPE strings can be quoted; the version range above is the authoritative affected set. Advisory and analysis material is available via CPANSec (osv-style oss-security thread at https://seclists.org/oss-sec/2026/q3/973), the Openwall mirror at http://www.openwall.com/lists/oss-security/2026/09/28/14, and EUVD entry EUVD-2026-88344, with the NVD record at https://nvd.nist.gov/vuln/detail/CVE-2026-85644.
Affects your stack
Find out whether the stacks and servers you run are on an affected version.
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
The bug is a CWE-843 type-confusion / memory-safety defect inside code generated by XS::Parse::Infix, which builds XS wrapper functions for user-declared infix operators. For a list-associative operator the generated wrapper must confirm that each argument is an array reference before treating it as an AV, but it performs that check with SvRV() instead of SvROK(). In Perl's SV internals SvRV() simply reads the union's referent pointer slot; that slot only holds a valid referent once SvROK(sv) is true. For an IV or NV scalar the same union slot holds the numeric value itself, so SvRV() hands back the caller's number as a pointer, and the subsequent SvTYPE() macro dereferences that pointer at byte offset 12. Because a typical process number is not a mapped address, this normally ends in a segmentation fault. The accidental protection for ordinary strings is that byte 12 of a string SV's body is rarely SVt_PVAV (0x0b); an attacker-crafted string that places 0x0b at that offset passes the guard, after which the buffer is treated as an AV head, AvARRAY is read from bytes 16-23, and the pointers found there are pushed as live SVs onto the Perl stack - a controlled dereference that the independent assessment rates as limited confidentiality impact (C:L) combined with high availability impact (A:H). The assessed vector is CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:H, i.e. remotely reachable with no privileges or user interaction required by the flaw itself, while the CVE record's 7.5 score reflects only the availability component. No CPE strings were supplied in the intelligence feed, so the exact affected component set must be inferred from the distribution/version metadata rather than an authoritative CPE list.
Know when Perl gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Untrusted decoded input reaching the operator gives AV:N/AC:L/PR:N/UI:N; reliable crash yields A:H and the controlled-dereference read primitive warrants at least C:L.
AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H
Primary rating from Vendor (CPANSec).
CVSS VectorVendor: CPANSec
Lifecycle Timeline
3DescriptionCVE.org
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);
Executive ViewAI
A type-confusion vulnerability in the Perl module XS::Parse::Infix (versions 0.40 through 0.49, shipped within XS-Parse-Keyword) can crash Perl applications that process attacker-influenced lists through list-associative infix operators such as the zip operator, causing denial of service, and can expose a limited out-of-bounds read of process memory. Publicly available exploit code exists. Because no vendor patch is available, organizations running affected Perl services that accept external input into these operators should prioritize identification and interim mitigations to protect availability and limit information disclosure.
No vendor-released patch identified at time of analysis. Interim mitigations include downgrading XS::Parse::Infix to a version earlier than 0.40 where feasible, avoiding use of list-associative infix operators (e.g., Syntax::Operator::Zip) on untrusted lists, validating that list arguments are genuine array references and rejecting bare numbers or crafted strings containing 0x0b at byte 12, and monitoring for process segfaults or unexpected out-of-bounds reads.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Memory corruption occurs when a program writes data beyond the boundaries of allocated memory regions or accesses memory in unintended ways, violating the integrity of the process's address space.
Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.
The _compile function in Maketext.pm in the Locale::Maketext implementation in Perl before 5.17.7 does not properly hand
Stack-based buffer overflow in the CPerlHost::Add method in win32/perlhost.h in Perl before 5.24.3-RC1 and 5.26.x before
The VDir::MapPathA and VDir::MapPathW functions in Perl 5.22 allow remote attackers to cause a denial of service (out-of
Perl before 5.26.3 has a buffer overflow via a crafted regular expression that triggers invalid write operations. Rated
Perl before 5.26.3 and 5.28.0 before 5.28.1 has a buffer overflow via a crafted regular expression that triggers invalid
Perl before 5.26.3 has a buffer over-read via a crafted regular expression that triggers disclosure of sensitive informa
Perl might allow context-dependent attackers to bypass the taint protection mechanism in a child process via duplicate e
CPAN.pm before 2.35 does not verify TLS certificates when downloading distributions over HTTPS. Rated high severity (CVS
The XSLoader::load method in XSLoader in Perl does not properly locate .so files when called in a string eval, which mig
In Perl through 5.26.2, the Archive::Tar module allows remote attackers to bypass a directory-traversal protection mecha
Perl before 5.30.3 on 32-bit platforms allows a heap-based buffer overflow because nested regular expression quantifiers
The (1) S_reghop3, (2) S_reghop4, and (3) S_reghopmaybe3 functions in regexec.c in Perl before 5.24.0 allow context-depe
Same technique Information Disclosure
View allVendor StatusVendor
SUSE
Severity: Important| Product | Status |
|---|---|
| openSUSE Tumbleweed | Fixed |
| SUSE Linux Enterprise Server 16.0 | Affected |
| SUSE Linux Enterprise Server 16.1 | Affected |
| SUSE Linux Enterprise Server for SAP applications 16.0 | Affected |
| SUSE Linux Enterprise Server for SAP applications 16.1 | Affected |
| openSUSE Leap 16.0 | Affected |
| SUSE Linux Enterprise Server for NVIDIA 16.1 | Affected |
EUVD-2026-88344
GHSA-ch9g-92vf-wwhv
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB