Severity by source
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:H/VI:L/VA:N/SC:H/SI:L/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
Network delivery with no auth or complexity needed; user must open CSV (UI:R); scope changes to spreadsheet app executing the formula (S:C); high confidentiality, low integrity impact.
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
Lifecycle Timeline
2DescriptionCVE.org
exceljs-hardened versions before 5.0.0 fail to neutralize leading equals, plus, minus, or at signs in cell values written to CSV output. Attackers who can influence exported cell values can inject formulas that execute when the CSV file is opened in a spreadsheet application, potentially exfiltrating data or performing other malicious actions.
AnalysisAI
CSV formula injection in exceljs-hardened before version 5.0.0 allows attackers who can influence exported cell values to embed spreadsheet formulas in generated CSV output by supplying values beginning with =, +, -, or @. When a victim opens the resulting CSV in a spreadsheet application such as Microsoft Excel or LibreOffice Calc, injected formulas execute in the spreadsheet context, enabling data exfiltration or unauthorized actions within that application. No public exploit has been identified at time of analysis, but the CVSS 4.0 score of 8.4 reflects high confidentiality impact and a scope change to the subsequent spreadsheet application system.
Technical ContextAI
exceljs-hardened is a security-focused npm fork of the widely-used exceljs Node.js library, which provides Excel and CSV file generation capabilities. The flaw originates in the CSV serialization path, specifically identifiable at lib/csv/csv.js lines 109-182 of upstream exceljs v4.4.0 (https://github.com/exceljs/exceljs/blob/v4.4.0/lib/csv/csv.js#L109-L182), where cell values are written to CSV output without checking for or neutralizing formula-trigger characters. CWE-1236 (Improper Neutralization of Formula Elements in a CSV File) precisely describes this root cause: spreadsheet applications interpret cell values beginning with =, +, -, or @ as formula directives rather than literal data, executing arbitrary expressions including network-connected functions like HYPERLINK or DDE. The CPE cpe:2.3:a:exceljs:exceljs:*:*:*:*:*:*:*:* identifies the upstream exceljs library as the origin of this code, underscoring that exceljs-hardened inherited the vulnerable implementation despite its security-hardening mandate.
RemediationAI
Upgrade exceljs-hardened to version 5.0.0 or later, which introduces proper neutralization of leading formula-trigger characters (=, +, -, @) in CSV cell values, as documented in the security advisory at https://github.com/mateocallec/exceljs-hardened/security/advisories/GHSA-9wxc-4rhw-hfrw. If an immediate upgrade is not feasible, applications should sanitize all user-controlled string values before passing them to the CSV export function - specifically by prefixing any value beginning with =, +, -, or @ with a tab character or single quote to prevent formula interpretation; note that single-quote prefixing may be visible to end-users in some spreadsheet applications, which is an acceptable trade-off versus injection risk. As a defense-in-depth control, server-side input validation stripping or rejecting leading formula characters from text fields narrows the attack surface without requiring changes to the export layer, though this approach requires careful scoping to avoid breaking legitimate data such as phone numbers beginning with +. Do not rely on end-user education about opening CSV files as a compensating control.
An unescaped payload in exceljs <v1.6 allows a possible XSS via cell value when worksheet is displayed in browser. Rated
Prototype pollution in exceljs-hardened before 5.0.0 lets a remote attacker corrupt Object.prototype by feeding parsed J
Unbounded xlsx decompression in exceljs-hardened before 5.0.0 allows unauthenticated remote attackers to exhaust server
Path traversal in exceljs-hardened before 5.0.0 allows unauthenticated attackers to read arbitrary files from the server
Same technique Code Injection
View allShare
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-64684
GHSA-4w2g-jrqm-g99q