Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessIdentify service parsing untrusted CSV via getline
-
ExploitSubmit repeated malformed CSV records
-
Executiongetline leaks parsed fields on each failure
-
ImpactProcess 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. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – 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
AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H
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.
Primary rating from Vendor (CPANSec).
CVSS VectorVendor: CPANSec
Lifecycle Timeline
2DescriptionCVE.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
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
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
Silently incorrect regular-expression matching in the Perl interpreter (all versions through 5.43.9) lets an oversized a
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
EUVD-2026-103194
GHSA-v7vg-mqfq-633j
NVD
CVE.org
EPSS
Exploit-DB