Skip to main content

Text::CSV_XS EUVDEUVD-2026-103194

| CVE-2026-110754 MEDIUM
Memory Leak (CWE-401)
2026-10-16 CPANSec GHSA-v7vg-mqfq-633j
6.5
CVSS 3.1 · Vendor: CPANSec
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Identify service parsing untrusted CSV via getline
  2. Exploit
    Submit repeated malformed CSV records
  3. Execution
    getline leaks parsed fields on each failure
  4. Impact
    Process memory exhausted, denial of service

Vulnerability Assessment

Weakness
CWE
ASVS 5.0
V15 - Secure Coding and Architecture Resource cleanup, leak prevention
Exploitation Conditions

Requires a persistent, long-running process (e.g. a daemon or web service) that calls Text::CSV_XS->getline() - or getline_all() for the trailing row - on attacker-influenced CSV input, running a version before 1.65. The leak is triggered specifically by records with CSV syntax errors (parse failures returning undef), where the fields parsed before the error are never freed; wide records amplify the per-record leak. Exploitation is LIMITED by: the process must stay alive across many records to accumulate the leak (one-shot scripts that exit reclaim memory), the attacker must be able to feed sustained malformed CSV, and successful memory exhaustion requires a high volume of malformed input rather than a single request.

Impact

This is a genuine but moderate-severity availability issue, not a top-priority emergency. The input CVSS of 6.5 (CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H) correctly scopes impact to availability only - the CWE-401 memory leak in getline() leaks the parsed fields of records that fail to parse, letting a long-running parser's memory grow without bound. All corroborating exploitation signals point low: EPSS is 0.19% (8th percentile), there is no CISA KEV listing, and no public weaponized exploit was identified. Note two internal tensions in the supplied data: (1) the 'Information Disclosure' tag directly contradicts the CVSS impact vector (C:N/I:N/A:H) - this is a denial-of-service memory exhaustion bug, not an information-disclosure one, so the tag should be treated as mislabeled; and (2) the NVD vector sets UI:R, which is questionable for a service that parses attacker-supplied CSV directly with no human in the loop - verify the UI requirement, as a typical unattended CSV-ingesting service would be UI:N. Real-world risk is bounded by the need for a persistent/long-running process that repeatedly calls getline() (or getline_all) on untrusted input; one-shot scripts that exit are effectively unaffected. Treat as a routine patch-when-convenient item for Perl services ingesting untrusted CSV, not a drop-everything issue.

Exploit ScenarioDerived

An attacker repeatedly submits syntactically malformed CSV records to a long-running Perl web service or daemon that uses Text::CSV_XS->getline() on untrusted input. Each failed parse leaks the already-parsed fields of that record instead of freeing them, so sustained malformed input steadily grows the process's resident memory until the host runs out of memory and the service is killed or becomes unresponsive. No public exploit identified at time of analysis, though the vendor's patch ships a regression test that reliably demonstrates the leak growth.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.2% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Oct 20, 2026

Memory exhaustion in Text::CSV_XS before 1.65 allows remote attackers to degrade or crash long-running Perl services by repeatedly submitting malformed CSV records. Each parse failure in getline() - and the trailing row in getline_all() - abandons the already-parsed field array without freeing it, so the process's resident memory grows with every bad record, with wide records amplifying the per-record leak; authentication requirements are not a barrier per the assessed vector (PR:N, UI:N). No public exploit identified at time of analysis, and EPSS is low at 0.19% (8th percentile), but any internet-facing daemon or worker parsing untrusted CSV is exposed.

RemediationAI

Upgrade to Text::CSV_XS 1.65 or later - the vendor patch is available as upstream commit eb4f739ffc605bfb1ab710e5330704faa0e89f08 (https://github.com/cpan-authors/Text-CSV_XS/commit/eb4f739ffc605bfb1ab710e5330704faa0e89f08.patch), with release notes at https://metacpan.org/release/HMBRAND/Text-CSV_XS-1.65/changes. If the upgrade cannot be applied immediately, bound the damage in long-running consumers: cap the worker's address space (systemd MemoryMax= or ulimit -v) so a leak triggers a controlled restart instead of an OOM kill of the host - the trade-off is that the service recycles under sustained attack and legitimate requests fail during restarts; recycle workers after a fixed request count (e.g. Apache mod_perl MaxRequestsPerChild, or Starman/Unicorn worker timeouts) so leaked memory is reclaimed on exit - the trade-off is added process-start latency; and, where feasible, length-limit or pre-validate untrusted CSV records before they reach getline() and parse batches in short-lived child processes that exit afterwards - the trade-offs are rejection of legitimately wide or unusual records and fork/exec overhead. Because the leak only becomes visible across many malformed records, monitor RSS growth in CSV-parsing workers as the primary detection signal.

Affected ProductsAI

Every release of the Perl module Text::CSV_XS earlier than 1.65 is affected, on any platform where the XS module builds (no CPE strings were supplied with the CVE data). The defect spans getline() and getline_all() - the latter via cx_xsParse_all's retained trailing row - and also the print($fh, undef) path exercised by the new upstream test. Version 1.65, released by HMBRAND on MetaCPAN (https://metacpan.org/release/HMBRAND/Text-CSV_XS-1.65/changes), contains the fix; the OSS-Security advisory is at https://seclists.org/oss-sec/2026/q4/213 and ENISA EUVD record EUVD-2026-103194 corresponds to NVD entry CVE-2026-110754. Reported by CPANSec and tagged as an information-disclosure class issue in the supplied intelligence feed.

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

Text::CSV_XS is a Perl XS (C-level) implementation of CSV parsing, widely deployed where high-performance CSV handling is needed; the vulnerable logic lives in CSV_XS.xs. The root cause is CWE-401 (Missing Release of Memory after Effective Lifetime): getline() allocates a new AV to collect the fields of each record and returns a reference to that array only when the parse succeeds. When a record has a syntax error, getline() returns undef but neither frees the AV nor the SVs holding the fields parsed before the error, so the memory is leaked rather than reclaimed. The upstream fix makes the array mortal via sv_2mortal on newAV and explicitly calls SvREFCNT_dec on it when parsing fails, and adds a matching SvREFCNT_dec for the retained row in cx_xsParse_all (used by getline_all); a related print($fh, undef) path is also covered. The regression test added in t/60_samples.t watches /proc/self/statm RSS across repeated failed getline() calls on wide malformed records (error 2023) and asserts growth stays below 8 MB, confirming the defect is observable as real process memory growth rather than merely a refcount anomaly.

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

Vendor (CPANSec) PRIMARY 6.5 MEDIUM
AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H
vuln.today AI 7.5 HIGH

Attacker feeds untrusted CSV directly to a network-facing parser with no human interaction (UI:N vs NVD's UI:R) and no auth; availability-only impact as sustained malformed input exhausts process memory.

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

Primary rating from Vendor (CPANSec).

CVSS VectorVendor: CPANSec

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

Lifecycle Timeline

2
CVSS changed
Oct 20, 2026 - 19:22 NVD
6.5 (MEDIUM)
CVE Published
Oct 16, 2026 - 22:06 cve.org
UNKNOWN (no severity yet)

DescriptionCVE.org

Text::CSV_XS versions before 1.65 for Perl leak the parsed fields of a record that fails to parse in getline.

getline collects the fields of a record into a new array and returns a reference to it only when the parse succeeds. When the record has a syntax error, getline returns undef and never frees the array or the fields parsed before the error.

A long-running process parsing untrusted CSV retains every malformed record it is sent, so repeated malformed input exhausts its memory.

Threat Intelligence Overview

EPSS Score
0.2%
Top 92% exploitable
Prevalence
Medium
de facto standard Perl CSV parser, but Perl's production footprint is moderate
Social Media
1
Sightings
Data Quality
5 sources
Confidence: Medium

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.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC No
EPSS 0.2%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
No
Human Impact· derived
Medium

Priority Score

32
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +32
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

More in Perl

View all
CVE-2012-6329 HIGH POC
7.5 Jan 04

The _compile function in Maketext.pm in the Locale::Maketext implementation in Perl before 5.17.7 does not properly hand

CVE-2017-12814 CRITICAL POC
9.8 Sep 28

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

CVE-2015-8608 CRITICAL POC
9.8 Feb 07

The VDir::MapPathA and VDir::MapPathW functions in Perl 5.22 allow remote attackers to cause a denial of service (out-of

CVE-2018-18314 CRITICAL POC
9.8 Dec 07

Perl before 5.26.3 has a buffer overflow via a crafted regular expression that triggers invalid write operations. Rated

CVE-2018-18312 CRITICAL POC
9.8 Dec 05

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

CVE-2026-13221 CRITICAL POC
9.1 Jul 13

Silently incorrect regular-expression matching in the Perl interpreter (all versions through 5.43.9) lets an oversized a

CVE-2018-18313 CRITICAL POC
9.1 Dec 07

Perl before 5.26.3 has a buffer over-read via a crafted regular expression that triggers disclosure of sensitive informa

CVE-2016-2381 HIGH
7.5 Apr 08

Perl might allow context-dependent attackers to bypass the taint protection mechanism in a child process via duplicate e

CVE-2023-31484 HIGH POC
8.1 Apr 29

CPAN.pm before 2.35 does not verify TLS certificates when downloading distributions over HTTPS. Rated high severity (CVS

CVE-2016-6185 HIGH POC
7.8 Aug 02

The XSLoader::load method in XSLoader in Perl does not properly locate .so files when called in a string eval, which mig

CVE-2018-12015 HIGH POC
7.5 Jun 07

In Perl through 5.26.2, the Archive::Tar module allows remote attackers to bypass a directory-traversal protection mecha

CVE-2020-10543 HIGH
8.2 Jun 05

Perl before 5.30.3 on 32-bit platforms allows a heap-based buffer overflow because nested regular expression quantifiers

Vendor StatusVendor

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