---
id: "CVE-2026-110757"
kind: "vulnerability"
aliases: ["CVE-2026-110757"]
title: "Text::CSV_XS versions before 1.65 for Perl allow record splitting by writing strings used as numbers without quotes\u2026"
severity: "critical"
cvss: 9.8
epss: null
exploited: false
status: "open"
category: "package"
products: []
ecosystems: []
tags: ["csv-export", "package", "perl", "text-csv-xs"]
not_affected_if: ["no-csv-output-from-user-data", "version-1.65-or-later"]
published_at: "2026-10-16T23:17:00+00:00"
first_seen_at: "2026-10-23T21:57:14+00:00"
updated_at: "2026-10-23T22:28:55+00:00"
sources: [{"source": "nvd", "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-110757", "first_seen_at": "2026-10-23T21:57:14+00:00"}]
---

# Text::CSV_XS versions before 1.65 for Perl allow record splitting by writing strings used as numbers without quotes…

Text::CSV_XS for Perl before 1.65 writes numeric-looking strings without quotes, so a value containing a newline splits one CSV record into two. An attacker who controls a field that is validated as a number can inject extra rows into generated CSV output.

_Summary, check and fix written by a model from the sources; labelled as such._

## How to check

Run: perl -MText::CSV_XS -e 'print $Text::CSV_XS::VERSION' and check the result is below 1.65.
Find code that builds CSV with Text::CSV_XS combine or print and check whether any field is a string that was used in numeric comparisons.

## Fix

Upgrade Text::CSV_XS to 1.65 or later.
Until then, ensure exported values are stripped of whitespace or quoted explicitly.

## Timeline

- 2026-10-23T21:57:14+00:00 nvd https://nvd.nist.gov/vuln/detail/CVE-2026-110757

## From the sources

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.

---

_Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai_
