Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate as EspoCRM administrator
-
DeliveryCraft malicious serialized PHP object
-
ExploitStore payload in MassAction/Export params
-
ExecutionTrigger background deserialization (no class restriction)
-
PersistInstantiate gadget chain
-
ImpactExecute arbitrary code on server
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A08:2025 - Software or Data Integrity Failures
ASVS 5.0
V1 - Encoding and Sanitization Safe deserialization, type allowlists
MITRE ATT&CK
2 techniques across 2 tactics: Execution, Initial Access The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires an authenticated EspoCRM administrator account (per CVSS PR:H and the description's 'authenticated administrator'); without admin access the crafted serialized payload cannot be placed into the background MassAction or Export parameters that are subsequently deserialized. The specific sink is the unserialize() call in Espo\Core\MassAction\Params and Espo\Tools\Export\Params (via Entities\MassAction and Entities\Export), which in versions prior to 9.3.7 did not pass an allowed_classes restriction, permitting arbitrary object instantiation. Successful code execution additionally depends on a usable PHP gadget chain being reachable in the deployed codebase/dependencies. The primary limiting factor is the administrator privilege prerequisite; no additional user interaction is required (UI:N), and the affected feature (MassAction/Export) is standard functionality rather than a non-default option. |
| Impact | This is a genuine high-severity flaw but with an important access caveat that tempers real-world urgency. The CVSS 3.1 vector (AV:N/AC:L/PR:H/UI:N/S:C/C:H/I:H/A:H = 9.1 Critical) accurately reflects an unsafe PHP deserialization (CWE-502) yielding server code execution, but PR:H confirms the attacker must already hold authenticated administrator privileges - a significant barrier that moves this from a mass-exploitable internet threat toward a post-compromise or insider/privilege-abuse scenario. Public exploit material exists (the vendor advisory GHSA-7q78-jjr9-mqcg plus the fixing commit f48d1d2, which clearly reveals the unsanitized unserialize() calls), raising the practical exploitation likelihood for anyone who gains admin access. No EPSS score, SSVC decision, or CISA KEV data was provided in the input, so exploitation-probability and automatable signals cannot be weighed - absence of KEV means there is no confirmation of active exploitation. Net: a real priority to patch for any EspoCRM operator because admin credentials are frequently obtainable via phishing, credential reuse, or chained lower-privilege bugs, but the PR:H requirement means it is not a drive-by, wormable internet-facing threat in the way a PR:N RCE would be. |
| Exploit ScenarioDerived | An attacker who has obtained EspoCRM administrator access (via stolen credentials, a compromised admin account, or a malicious insider) crafts a serialized PHP object payload and submits it so it is stored in background MassAction or Export parameters. When the application later deserializes that data without restricting allowed classes, the attacker-controlled object is instantiated, triggering a gadget chain that executes arbitrary code on the server. Publicly available exploit references (vendor advisory and the fixing commit) make reproducing this straightforward. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 15, 2026
PHP object deserialization in EspoCRM versions prior to 9.3.7 lets an authenticated administrator achieve remote code execution by storing crafted serialized object data in background MassAction or Export parameters that the application later unserializes without any allowed-class restriction. The deserialization sinks are reachable over the network (AV:N) with no user interaction (UI:N), and an attacker with admin credentials can instantiate arbitrary PHP objects and execute code, provided a usable gadget chain is reachable in the deployed codebase or its dependencies. Publicly available exploit code exists, and the vendor released a fix in version 9.3.7; the practical limiting factor is the administrator-privilege prerequisite (PR:H), which tempers real-world urgency even though the flaw is rated 9.1.
RemediationAI
Upgrade to EspoCRM 9.3.7 or later (vendor-released patch: 9.3.7), which introduces fromSerializedRaw() helpers that pass an explicit allowed_classes allowlist (Params::class, and SearchParams::class for nested searchParams) into unserialize(); see the fixed release at https://github.com/espocrm/espocrm/releases/tag/9.3.7 and the fix commit at https://github.com/espocrm/espocrm/commit/f48d1d26ffa05eac07ef72bb7f00f67a851184e1, with full details in advisory GHSA-7q78-jjr9-mqcg. Until upgrading, treat administrative accounts as the trust boundary: enforce least-privilege and separate admin accounts, remove or disable unused administrator logins, require MFA on admin users, and audit admin-role assignments, since the attack prerequisite is the ability to place a crafted serialized payload into MassAction/Export parameters. If the Export and MassAction features are not operationally required, restricting administrative access to them (via role permissions or an access-controlling reverse proxy) removes the injection path, at the cost of disabling bulk actions and exports for legitimate users; a WAF rule that inspects base64-encoded body parameters for PHP serialization markers (e.g. 'O:' tokens) before they are persisted offers partial, bypassable protection only, and note that PHP-level hardening (disabling dangerous gadget classes, restricting unserialize) is not available globally without breaking the intended Espo parameter deserialization.
Affected VersionsENISA
Affected Packages
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 root cause is CWE-502 (Deserialization of Untrusted Data). EspoCRM's background job machinery persists MassAction and Export request parameters as base64-encoded serialized PHP objects; on resume or retrieval, application/Espo/Core/MassAction/Params.php and application/Espo/Tools/Export/Params.php called PHP's unserialize() on that data without an allowed_classes option, meaning any class present in the autoloadable codebase could be instantiated and its magic methods (__wakeup, __destruct, __toString, etc.) triggered. The Espo\Entities\MassAction and Espo\Entities\Export getParams() methods decoded and unserialized the stored raw payload, so the injection point is the stored parameter string and the sink is the unserialize() call. Commit f48d1d26ffa05eac07ef72bb7f00f67a851184e1 hardens this by routing both flows through new fromSerializedRaw() helpers that pass ['allowed_classes' => [Params::class]] (and SearchParams::class for the nested searchParams field), confining unserialization to the intended Espo parameter types. The CVSS scope change (S:C) reflects that a successful object injection would escape the component's security context and compromise the underlying PHP process and host.
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
AV:N/AC:L/PR:H/UI:N/S:C/C:H/I:H/A:H
Admin-only feature forces PR:H; attack is remote over HTTP (AV:N) with no special timing (AC:L); PHP object injection yields full RCE breaking out of the app sandbox, so S:C and C/I/A:H.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
2DescriptionCVE.org
EspoCRM is an open source customer relationship management application. Prior to 9.3.7, an authenticated administrator can supply crafted serialized PHP object data that is stored in background MassAction or Export parameters and later deserialized by the application. The deserialization paths do not restrict allowed classes, allowing attacker-controlled object instantiation and arbitrary code execution on the server. This issue is fixed in version 9.3.7.
Articles & Coverage 1
Technical POC Analysis
CWE-502: Deserialization of Untrusted Data.
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Latest POC
3 public PoC links from github
Sign in to open the public PoC links collected for this CVE.
Executive ViewAI
EspoCRM deployments running versions earlier than 9.3.7 carry a critical remote code execution flaw that allows anyone holding administrator credentials to run arbitrary code on the server through ordinary background job and export functions. Because administrative access is already highly privileged, the practical exposure is concentrated in insider risk, credential compromise, and third-party or contractor accounts rather than anonymous external attackers, but a successful exploitation would put all CRM customer and business data at risk. Leadership should care because publicly available exploit code now lowers the skill required to weaponize this flaw the moment admin credentials are obtained.
Apply vendor patch (upgrade to 9.3.7 or later); until the upgrade is complete, restrict administrative access to trusted networks, enforce multi-factor authentication, and monitor administrative job and export activity.
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
Insecure deserialization occurs when an application converts serialized data (a stream of bytes representing an object's state) back into a living object without proper validation.
Remote Code Execution represents the critical moment when an attacker successfully runs arbitrary code on a target system without physical access.
Directory traversal vulnerability in EspoCRM before 2.6.0 allows remote attackers to include and execute arbitrary local
Path traversal in EspoCRM's formula scripting engine allows authenticated administrators to achieve arbitrary file read/
EspoCRM version 7.1.8 is vulnerable to Unrestricted File Upload allowing attackers to upload malicious file with any ext
EspoCRM 5.6.4 is vulnerable to user password hash enumeration. Rated high severity (CVSS 8.8), this vulnerability is rem
Authorization bypass in EspoCRM 5.8.5 lets an authenticated low-privilege user reuse or manipulate Basic-Authorization a
EspoCRM deployments before 10.0.5 allow an authenticated user with Email Account scope to retrieve other users' stored I
CSV Injection in Create Contacts in EspoCRM 7.1.8 allows remote authenticated users to run system commands via creating
Boolean-based blind SQL injection in EspoCRM versions 8.1.0 through 9.3.7 allows an authenticated non-administrator to i
Path traversal in EspoCRM admin template management allows authenticated administrators to read, create, overwrite, or d
Server-side request forgery in EspoCRM before 10.0.4 allows authenticated users to route outbound HTTP requests to inter
Stored cross-site scripting in EspoCRM 9.3.3 and below enables an authenticated attacker to execute arbitrary JavaScript
Information disclosure in EspoCRM's portal Note API allows an authenticated portal user (CVSS PR:L) who already has stre
EUVD-2026-102096
NVD
CVE.org
EPSS
GitHub
Exploit-DB