Skip to main content

Text::CSV_XS EUVDEUVD-2026-103197

| CVE-2026-110757 CRITICAL
Improper Encoding or Escaping of Output (CWE-116)
2026-10-16 CPANSec GHSA-9gc4-xhw7-655h
Critical
Disputed · 9.8 Vendor: CPANSec
View

Attack ChainAIDerived

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

  1. Access
    Supply numeric-looking value with embedded newline
  2. Exploit
    Numeric validation sets Perl's IOK/NOK flag
  3. Execution
    combine()/print() writes field unquoted in binary mode
  4. Impact
    Newline ends record early, injecting attacker-controlled row

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Output encoding for downstream
Exploitation Conditions

Requires an application that serializes data with Text::CSV_XS combine() or print() in binary mode (the default) BEFORE version 1.65, AND a field whose string value has acquired Perl's integer/numeric flag by being used in a numeric operation (e.g. a validation like $qty > 0 or $s == 12), AND that value still contains an embedded newline, CR, or delimiter while parsing as a number - Perl tolerates leading/trailing whitespace, so "12\n" passes numeric checks yet carries a record-breaking byte. The attacker must control the content of that specific field. Limiting factors: the flaw affects only the WRITE/serialization path, not CSV parsing; it is inert unless the value transits a numeric operation before combine/print; and impact is realized only when a downstream consumer re-parses the split output. It is not exploitable merely by reading CSV.

Impact

Signals conflict sharply. The input CVSS of 9.8 (AV:N/AC:L/PR:N/UI:N/C:H/I:H/A:H) is almost certainly overstated for what the description and the fixing commit actually show: this is an improper-output-encoding / record-splitting flaw (CWE-116) in a CSV serialization library, not a memory-corruption or RCE bug. The confidentiality (C:H) and availability (A:H) impacts in the NVD vector are not supported by the facts - the real impact is integrity of the emitted CSV, where a numeric-looking field containing a newline can terminate a record early and inject attacker-controlled rows into a downstream consumer. The low-risk corroborating signals dominate: EPSS is 0.19% (8th percentile), there is NO CISA KEV listing (not actively exploited), and no public exploit code was provided - only the vendor patch/commit and advisories. So despite the headline 9.8, this is best treated as a high-CVSS-but-moderate-real-risk library defect: dangerous for specific applications that serialize attacker-influenced, numerically-validated data to CSV, but not a drop-everything internet-wide emergency. Priority should be driven by whether your Perl applications use Text::CSV_XS combine()/print() on fields that pass through numeric operations before serialization.

Exploit ScenarioDerived

A Perl web application validates a user-supplied quantity field with a numeric check (e.g. $qty > 0), which causes Perl to set the numeric flag on the string "12\n"; the application then serializes the record with Text::CSV_XS combine() in its default binary mode. Because the vulnerable code decides quoting from the numeric flag rather than the bytes, the embedded newline is written unquoted, splitting one logical record into two and injecting an attacker-controlled row into the exported CSV. No public exploit code was provided, and this is not RCE - it is CSV record injection against applications following this validate-then-serialize pattern.

Act Now Prioritize within 24-48h. Why: CRITICAL severity.
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

CSV record splitting in Text::CSV_XS before 1.65 allows an attacker-controlled field that has been used in a numeric context to be serialized without quotes, so an embedded newline, carriage return, or delimiter can terminate the record early and turn the remaining fields into a separate row. The flaw is limited to the combine()/print() write path in binary mode (the default) and requires the attacker to control that specific field plus the application to perform a numeric operation on it before serialization; the assessed vector is network-reachable but high-complexity, unauthenticated, with integrity-only impact. No public exploit was identified at time of analysis, and EPSS is 0.19% (8th percentile), indicating low predicted exploitation activity despite the serious record-splitting consequence.

RemediationAI

Vendor-released patch: Text::CSV_XS 1.65. Upgrade CPAN installations to 1.65 or later, or apply upstream commit fcfb796cb50de9cef8b94a70535304ac41a50c56 (patch at https://github.com/cpan-authors/Text-CSV_XS/commit/fcfb796cb50de9cef8b94a70535304ac41a50c56.patch). If upgrade cannot be performed immediately, restrict combine()/print() serialization of untrusted values that have passed through numeric operations, and explicitly reject or strip CR, LF, and delimiter characters before serialization; force quoting or escape fields in application code as a compensating control, but note that this adds custom parsing/serialization code and must be applied consistently. Ensure downstream CSV consumers can tolerate quoted fields and do not interpret split records as trusted data. Review the vendor change log at https://metacpan.org/release/HMBRAND/Text-CSV_XS-1.65/changes for the fixed behavior.

Affected ProductsAI

Text::CSV_XS for Perl versions before 1.65 are affected. The vulnerable component is the CPAN distribution Text-CSV_XS, specifically applications that call combine() or print() with binary mode enabled (the default) and serialize attacker-influenced fields. The vendor change log for the fixed 1.65 release is at https://metacpan.org/release/HMBRAND/Text-CSV_XS-1.65/changes and the oss-security advisory is at https://seclists.org/oss-sec/2026/q4/213. The issue was reported by CPANSec and is tracked under ENISA EUVD ID EUVD-2026-103197; no CPE string was provided in the input data, so affected-product matching should use the module name and version range rather than CPE.

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 module for parsing and generating CSV. In affected versions, combine() and print() decided whether to quote a field partly by checking Perl scalar flags SvIOK/SvNOK: if a string had been used in a numeric operation and Perl had set its integer or numeric flag, the module treated it as a number and skipped quoting. Perl tolerates leading and trailing whitespace when parsing numbers, so a value such as a numeric-looking string with a trailing newline can pass a validation check, retain its record-breaking byte, and then be emitted unquoted in binary mode. The root cause is CWE-116 (Improper Encoding or Escaping of Output): quoting was based on Perl's internal numeric flags rather than the actual bytes to be written. The upstream fix changes the quoting decision to inspect the bytes and always apply CH_QUOTE; tests confirm that numeric-looking strings with embedded newlines, CRLF, or leading spaces are now quoted while genuine Perl numbers remain unquoted. The issue affects serialization only, not parsing, and the independent assessment records an integrity-only impact (C:N/I:H/A:N) with high attack complexity, so the Information Disclosure tag should not be read as a confidentiality impact.

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

Sources disagree (Medium–Critical)
Vendor (CPANSec) PRIMARY 9.8 CRITICAL
AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
vuln.today AI 5.9 MEDIUM

AV:N since serialized data is often network-sourced; AC:H because exploitation needs the field to carry a numeric flag, an embedded control byte, and binary mode; impact is integrity-only (I:H, C:N/A:N).

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

vuln.today treats the vendor’s rating as authoritative. A higher third-party CVSS (e.g. CISA-ADP) is shown for transparency but does not drive the headline severity.

CVSS VectorVendor: CPANSec

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

Lifecycle Timeline

3
CVSS changed
Oct 20, 2026 - 19:22 NVD
9.8 (CRITICAL)
CVE Published
Oct 16, 2026 - 22:07 cve.org
CRITICAL 9.8
CVE Published
Oct 16, 2026 - 22:07 cve.org
UNKNOWN (no severity yet)

DescriptionCVE.org

Text::CSV_XS versions before 1.65 for Perl allow record splitting by writing strings used as numbers without quotes in combine.

combine and print do not check whether a field needs quotes when its value has Perl's integer or numeric flag set. Perl sets these flags on a string used in a numeric operation when it parses as a number, which allows leading and trailing whitespace. With binary set, as csv does by default, "12\n" passes a check such as $qty > 0 and is then written unquoted with its newline.

A value validated as a number can end the record early and turn the fields after it into a separate row.

Executive ViewAI

Why It Matters

Text::CSV_XS releases before 1.65 can produce malformed CSV output when an attacker-controlled field is used numerically and then serialized, creating a data-integrity risk for Perl-based export and interchange workflows. The vulnerability is rated critical, but no public exploit was identified at time of analysis and EPSS is 0.2%, so leadership should prioritize patching systems that generate or exchange CSV data while treating near-term exploitation as unlikely.

Business Impact: Medium
Compensating Controls

Apply vendor patch.

Threat Intelligence Overview

EPSS Score
0.2%
Top 92% exploitable
Prevalence
Medium
de facto CSV module in Perl, but Perl ecosystem has moderate real-world footprint
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 CRITICAL
CISA KEV No
Public POC No
EPSS 0.2%
Patch available Yes
Active threat No
Deciding rule
CRITICAL severity
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
Yes
Human Impact
Medium

Priority Score

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

Attack Technique

Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.

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