Skip to main content

EspoCRM EUVDEUVD-2026-102104

| CVE-2026-55184 LOW
Cross-site Scripting (XSS) (CWE-79)
2026-10-15 GitHub_M
3.5
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

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

  1. Access
    Obtain Email/PDF Template edit permission
  2. Delivery
    Store crafted HTML bypassing moderateSanitizeHtml()
  3. Exploit
    Victim opens template in edit mode (CSP disabled)
  4. Execution
    Payload executes in victim browser
  5. Impact
    Hijack victim session

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Output encoding, context-aware escaping
MITRE ATT&CK

2 techniques across 2 tactics: Initial Access, Execution

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

Exploitation requires ALL of the following: (1) the attacker holds Email Template or PDF Template edit permission in EspoCRM, enabling them to store crafted HTML that evades the moderateSanitizeHtml() filter; (2) a separate victim user opens the malicious template specifically in edit mode (required user interaction); and (3) the instance is running with the non-default configuration clientCspDisabled set to true, since the Content-Security-Policy that is enabled by default otherwise blocks the stored payload from executing. These factors - prior authenticated template-edit access, victim interaction, and an explicitly disabled CSP - sharply limit realistic exploitation and mean default EspoCRM deployments are not affected.

Impact

This is a genuinely low-priority issue despite being a real, patch-confirmed vulnerability. The provided CVSS 3.1 vector (AV:N/AC:L/PR:L/UI:R/S:U/C:L/I:N/A:N = 3.5 Low) already reflects heavy constraints: the attacker must already be an authenticated user holding Email Template or PDF Template edit permission (PR:L), and a second privileged user must open the malicious template in edit mode (UI:R). Critically, the stored payload only executes when the non-default setting clientCspDisabled is true - EspoCRM ships with Content-Security-Policy enabled, so default deployments are not exploitable, a limiting factor the base CVSS does not fully capture and which arguably warrants AC:H rather than AC:L. Exploit/commit code is publicly available (the vendor security advisory and fix commit), so proof-of-concept exists, but there is NO CISA KEV listing and no EPSS score was provided in the input; absence of EPSS/KEV data means widespread or automated exploitation cannot be asserted. Impact is bounded to session hijacking of another user (C:L), with no direct integrity or availability loss claimed. Net: a self-XSS-adjacent, privileged-insider, non-default-config stored XSS - a legitimate fix-it-on-next-cycle item, not an emergency.

Exploit ScenarioDerived

A low-privilege but template-editing user of EspoCRM (prior to 9.3.9) saves an email or PDF template containing crafted HTML that slips past moderateSanitizeHtml(). When a higher-privileged colleague later opens that template in edit mode in an instance where clientCspDisabled is set to true, the script runs in the victim's browser and steals their session. A public proof-of-concept and the vendor fix commit are available.

Monitor Track and reassess. Why: LOW severity (CVSS 0.1-3.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

Stored cross-site scripting in EspoCRM versions prior to 9.3.9 allows an authenticated user holding Email Template or PDF Template edit permission to persist crafted HTML that evades the moderateSanitizeHtml() filtering routine. The payload only executes when a second user opens the tampered template in edit mode on an instance where the non-default setting clientCspDisabled is true, at which point the attacker can hijack the victim's session; default deployments keep Content-Security-Policy enabled and are not affected. Publicly available exploit code exists, but there is no confirmed active exploitation (CISA KEV) and the vendor has shipped a fix in 9.3.9, making this a genuine but low-priority, non-default-configuration-dependent issue.

RemediationAI

Upgrade EspoCRM to 9.3.9 or later, which is the vendor-released patch that fixes the sanitizer in client/src/view-helper.js (see https://github.com/espocrm/espocrm/releases/tag/9.3.9 and advisory GHSA-x5p5-8mxj-9wv6); if an immediate upgrade is not possible, apply the upstream commit 67223bfb82338c030f38dac03f12c73b7b3d760f or vendor-backport the two sanitizer changes. As a first compensating control, confirm clientCspDisabled is left at its default false value so the Content-Security-Policy continues to block stored payloads - the trade-off is that CSP may break some embedded or custom front-end integrations that administrators disabled it for. Second, tighten the Email Template and PDF Template edit permission to a small, trusted set of roles, since exploitation requires prior template-edit access; the trade-off is reduced workflow flexibility for marketing or content teams. Third, avoid opening templates of unknown provenance in edit mode, as the payload only fires on that action (UI:R) and never on plain viewing. Authentication requirements are authenticated per the CVSS vector (PR:L), and no vendor-released workaround short of the upgrade fully neutralizes the sanitizer bypass.

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

This is a CWE-79 (improper neutralization of input during web page generation) stored cross-site scripting flaw rooted in EspoCRM's client-side HTML sanitizer. The affected logic lives in client/src/view-helper.js, where moderateSanitizeHtml() scans template markup and strips dangerous constructs, including inline event handlers of the form "... on<event>" preceded by a space. The filter's inline-handler detection could be bypassed with alternative delimiters or malformed attribute spacing that the sanitizer failed to recognize, allowing attacker-supplied event handlers to survive storage in an Email Template or PDF Template record. The upstream fix (commit 67223bfb82338c030f38dac03f12c73b7b3d760f) hardens that loop: it accepts either a space or a forward slash before the "on" sequence, and corrects the strip-flag comparison so that the sanitization branch cannot be skipped. Because the payload is rendered inside the template editor's own DOM rather than in a sandboxed preview, execution depends on the AJAX/client layer's Content-Security-Policy being absent; the clientCspDisabled setting (false by default) removes that last line of defense. The CPE cpe:2.3:a:espocrm:espocrm:*:*:*:*:*:*:*:* confirms all EspoCRM builds before the 9.3.9 release are in scope.

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 3.5 LOW
AV:N/AC:L/PR:L/UI:R/S:U/C:L/I:N/A:N
vuln.today AI 3.7 LOW

Authenticated template-editor needed (PR:L), victim must open in edit mode (UI:R), and the non-default clientCspDisabled=true requirement justifies AC:H; session hijack yields limited C and I, no A.

3.1 AV:N/AC:H/PR:L/UI:R/S:U/C:L/I:L/A:N
4.0 AV:N/AC:H/AT:N/PR:L/UI:A/VC:L/VI:L/VA:N/SC:N/SI:N/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
Unchanged
Confidentiality
Low
Integrity
None
Availability
None

Lifecycle Timeline

2
Patch available
Oct 15, 2026 - 16:02 EUVD
CVE Published
Oct 15, 2026 - 14:48 cve.org
LOW 3.5

DescriptionCVE.org

EspoCRM is an open source customer relationship management application. Prior to 9.3.9, a user with Email Template or PDF Template edit permission can store crafted HTML that bypasses moderateSanitizeHtml(). When another user opens the template in edit mode and clientCspDisabled is true, the stored payload executes and can hijack the user's session. This issue is fixed in version 9.3.9.

Threat Intelligence Overview

EPSS Score
0.2%
Top 91% exploitable
Prevalence
Low
niche open-source CRM, modest self-hosted footprint, not enterprise-ubiquitous
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 LOW
CISA KEV No
Public POC Yes
EPSS 0.2%
Patch available Yes
Active threat No
Deciding rule
LOW severity (CVSS 0.1-3.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
Low
Technical Impact
Partial

Priority Score

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

Attack Technique

Cross-Site Scripting occurs when an application accepts untrusted data and sends it to a web browser without proper validation or encoding.

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