Skip to main content

EspoCRM CVE-2026-55154

| EUVDEUVD-2026-102105 MEDIUM
Improper Neutralization of Formula Elements in a CSV File (CWE-1236)
2026-10-15 GitHub_M
5.4
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

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

  1. Access
    Authenticate as low-privileged user
  2. Delivery
    Store free-text value with whitespace-padded formula
  3. Exploit
    Privileged user exports records to CSV/XLSX
  4. Execution
    Victim opens file and accepts security prompt
  5. Persist
    Spreadsheet evaluates cell as formula
  6. Impact
    Outbound data disclosure or DDE command execution

Vulnerability Assessment

Weakness
CWE
ASVS 5.0
V1 - Encoding and Sanitization CSV injection prevention
Exploitation Conditions

Exploitation requires an authenticated low-privileged EspoCRM account (PR:L) able to store a free-text field value, plus a crafted payload where a formula trigger character (+, -, @, =) is preceded by whitespace or a control character so that the first-byte-only sanitizeCellValue() check fails to prepend the single-quote neutralization prefix. Impact is not self-contained: a SEPARATE privileged user must export the affected records to CSV or XLSX, open the resulting file, AND accept the spreadsheet application's formula/security prompts (UI:R) before the cell is evaluated. Data disclosure (e.g., outbound fetch formulas) is the baseline outcome; command execution is further LIMITED to legacy configurations with DDE explicitly enabled in the spreadsheet software. Affected: all EspoCRM versions prior to 9.3.9. Key limiting factors: dependency on victim interaction and prompt acceptance, low-privilege (not anonymous) access, and non-default DDE for the code-execution case.

Impact

This is a moderate, conditional risk best treated as a medium-priority hygiene fix rather than an urgent emergency. The CVSS 3.1 vector (AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N, base 5.4) is internally consistent with the description: a network-reachable CRM, low attack complexity to store the payload, low-privilege authentication required (PR:L), and mandatory user interaction (UI:R) because a separate privileged user must export, open the file, and actively accept spreadsheet security prompts before any impact occurs. The scope change (S:C) correctly reflects that the payload executes outside EspoCRM in the victim's spreadsheet application. Publicly available exploit code exists (vendor advisory GHSA-xrwp-2gph-985x plus the fix commit and release), which raises the practical likelihood of copycat attempts, but this is NOT the same as active exploitation - the CVE is not in CISA KEV and no EPSS score was provided in the input, so widespread automated exploitation cannot be asserted. The real-world risk is throttled by a long interaction chain (attacker-stored value → privileged export → file opened → security prompts accepted) and by the fact that the most severe outcome (command execution via DDE) depends on legacy, non-default spreadsheet configurations. Net: a legitimate issue to patch, but its medium CVSS and heavy reliance on victim behavior make it a priority-two item rather than a drop-everything event. EPSS and KEV are both absent/negative, consistent with the conclusion that no mass exploitation is confirmed.

Exploit ScenarioDerived

A low-privileged EspoCRM user enters a crafted free-text field value (e.g., in a contact or lead record) where a formula such as =WEBSERVICE(...) or a DDE payload is prefixed with a space or control character so EspoCRM's single-quote neutralization is skipped. Later an administrator or manager exports those records to CSV/XLSX and opens the file; upon accepting the spreadsheet's security prompt, the cell is evaluated as a formula, leaking data outbound or, on legacy DDE-enabled setups, executing a command. Public exploit/advisory detail exists, lowering the bar for reproduction.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
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 15, 2026

EspoCRM versions prior to 9.3.9 fail to neutralize spreadsheet formula triggers in exported CSV and XLSX files, because sanitizeCellValue() only inspects the first byte of a cell value. An authenticated low-privileged user can store free-text content such as " =cmd|' /C calc'!A0" (whitespace or a control character before the trigger), so the leading single-quote neutralization prefix is never applied; a separate privileged user must then export the affected records, open the file, and accept the spreadsheet application's formula/security prompts before the cell is evaluated, enabling outbound data disclosure and, on legacy configurations with DDE enabled, command execution. Tracked as CWE-1236 with CVSS 3.1 base score 5.4 (AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N), and publicly available exploit code exists; no confirmed active exploitation (CISA KEV) was identified. This is a moderate, conditional risk best treated as a medium-priority hygiene fix rather than an urgent emergency.

RemediationAI

Upgrade EspoCRM to version 9.3.9 or later, which is the vendor-released patch that replaces the per-processor first-byte checks with the shared Util::sanitizeCellValue() that left-trims " \t\r\n\v\0" before testing for '+', '-', '@' or '=' (commit f209248efd0d63bc8f7906cb96c07020a758eead, release https://github.com/espocrm/espocrm/releases/tag/9.3.9, advisory GHSA-xrwp-2gph-985x). If immediate upgrade is not possible, reduce exposure by restricting the ability of low-privileged users to create or edit free-text fields that flow into exports, and treat every exported CSV/XLSX as untrusted input: open exports only in spreadsheet software with formula evaluation of untrusted data blocked or in Protected View, and keep DDE disabled - this removes the command-execution branch, but the data-exfiltration branch remains possible for formulas that do not rely on DDE, so the upgrade is still required. Note that disabling export functionality for low-privileged roles or limiting export to administrators eliminates the storage half of the attack chain but degrades reporting workflows for regular users, and that server-side sanitization filters on incoming text fields are not a reliable substitute because the bypass relies on whitespace/control characters that legitimate data may contain.

Affected VersionsENISA

espocrm < 9.3.9

Affected Packages

euvd espocrm fix: 9.3.9

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

The issue is classic CSV/spreadsheet formula injection (CWE-1236, Improper Neutralization of Formula Elements in a CSV File), an injection class that targets the consumer of exported data rather than the web application itself. EspoCRM's export pipeline is implemented in PHP across three export backends: application/Espo/Tools/Export/Format/Csv/Processor.php, application/Espo/Tools/Export/Format/Xlsx/OpenSpoutProcessor.php and application/Espo/Tools/Export/Format/Xlsx/PhpSpreadsheetProcessor.php. Each carried its own private sanitizeCellValue() that returned the value untouched if it was empty or numeric and otherwise checked a single byte, in_array($value[0], ['+', '-', '@', '=']), prepending a single quote only when that first character was a formula trigger. Formula parsers in Excel, LibreOffice Calc and similar tools ignore or strip leading whitespace and control characters before interpreting a cell as a formula, so a value beginning with a space, horizontal tab, CR, LF, vertical tab or NUL followed by '=', '+', '-', or '@' bypassed the check entirely while still evaluating as a formula when opened. The fix centralizes the logic into a new Espo\Tools\Export\Processor\Util::sanitizeCellValue() that left-trims whitespace and control characters with ltrim($value, " \t\r\n\v\0") and then inspects the first remaining character, quoting the original (untrimmed) value when a trigger is found. The CVSS vector is network vector with low privileges required (PR:L), user interaction required (UI:R), and changed scope (S:C), reflecting that the payload executes in the victim's spreadsheet application rather than inside EspoCRM, with limited confidentiality and integrity impact and no availability impact.

Know when Espocrm 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

Vendor (GitHub_M) PRIMARY 5.4 MEDIUM
AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N
vuln.today AI 5.4 MEDIUM

Low-privilege authenticated user stores the payload (PR:L, AC:L, AV:N), a privileged victim must open the export and accept prompts (UI:R), and execution leaves EspoCRM for the spreadsheet app (S:C) with limited data/command impact.

3.1 AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N
4.0 AV:N/AC:L/AT:N/PR:L/UI:A/VC:N/VI:N/VA:N/SC:L/SI:L/SA:N

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

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

Lifecycle Timeline

2
Patch available
Oct 15, 2026 - 16:02 EUVD
CVE Published
Oct 15, 2026 - 14:49 cve.org
MEDIUM 5.4

DescriptionCVE.org

EspoCRM is an open source customer relationship management application. Prior to 9.3.9, application/Espo/Tools/Export/Format/Csv/Processor.php, application/Espo/Tools/Export/Format/Xlsx/OpenSpoutProcessor.php, and application/Espo/Tools/Export/Format/Xlsx/PhpSpreadsheetProcessor.php inspect only the first byte in sanitizeCellValue(). An authenticated low-privileged user can store a free-text value whose formula trigger is preceded by whitespace or a control character, causing CSV or XLSX export to omit the leading single-quote formula-neutralization prefix. When a privileged user opens the exported file and accepts applicable spreadsheet security prompts, spreadsheet software can ignore the whitespace or control-character prefix and evaluate the cell as a formula, permitting outbound data disclosure and, on legacy configurations with DDE enabled, command execution. This issue is fixed in version 9.3.9.

Threat Intelligence Overview

EPSS Score
0.2%
Top 90% exploitable
Prevalence
Low
niche open-source CRM, limited enterprise footprint versus mainstream platforms
Exploit
POC
Public exploit code exists
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 MEDIUM
CISA KEV No
Public POC Yes
EPSS 0.2%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
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
None
System Exposure· derived
Open
Automatable
No
Human Impact· derived
Medium
Technical Impact
Partial

Priority Score

47
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +27
PoC: +20
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.

CVE-2014-7985 CRITICAL POC
10.0 Oct 31

Directory traversal vulnerability in EspoCRM before 2.6.0 allows remote attackers to include and execute arbitrary local

CVE-2026-47168 CRITICAL POC
9.1 Oct 15

PHP object deserialization in EspoCRM versions prior to 9.3.7 lets an authenticated administrator achieve remote code ex

CVE-2026-33656 CRITICAL POC
9.1 Apr 22

Path traversal in EspoCRM's formula scripting engine allows authenticated administrators to achieve arbitrary file read/

CVE-2022-38843 HIGH POC
8.8 Sep 16

EspoCRM version 7.1.8 is vulnerable to Unrestricted File Upload allowing attackers to upload malicious file with any ext

CVE-2019-14351 HIGH POC
8.8 Jul 28

EspoCRM 5.6.4 is vulnerable to user password hash enumeration. Rated high severity (CVSS 8.8), this vulnerability is rem

CVE-2020-37094 HIGH POC
8.6 Feb 03

Authorization bypass in EspoCRM 5.8.5 lets an authenticated low-privilege user reuse or manipulate Basic-Authorization a

CVE-2026-105833 HIGH POC
8.3 Oct 08

EspoCRM deployments before 10.0.5 allow an authenticated user with Email Account scope to retrieve other users' stored I

CVE-2022-38844 HIGH POC
8.0 Sep 16

CSV Injection in Create Contacts in EspoCRM 7.1.8 allows remote authenticated users to run system commands via creating

CVE-2026-53574 HIGH POC
7.6 Oct 15

Boolean-based blind SQL injection in EspoCRM versions 8.1.0 through 9.3.7 allows an authenticated non-administrator to i

CVE-2026-33733 HIGH POC
7.2 Apr 22

Path traversal in EspoCRM admin template management allows authenticated administrators to read, create, overwrite, or d

CVE-2026-88896 MEDIUM POC
6.9 Sep 10

Server-side request forgery in EspoCRM before 10.0.4 allows authenticated users to route outbound HTTP requests to inter

CVE-2026-33741 MEDIUM POC
6.8 May 19

Stored cross-site scripting in EspoCRM 9.3.3 and below enables an authenticated attacker to execute arbitrary JavaScript

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy