Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessSupply numeric-looking value with embedded newline
-
ExploitNumeric validation sets Perl's IOK/NOK flag
-
Executioncombine()/print() writes field unquoted in binary mode
-
ImpactNewline 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. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – 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)AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
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).
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
Lifecycle Timeline
3DescriptionCVE.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
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.
Apply vendor patch.
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
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
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-103197
GHSA-9gc4-xhw7-655h
NVD
CVE.org
EPSS
Exploit-DB