Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate with Import scope account
-
DeliveryEnumerate or obtain victim's import ID
-
ExploitPOST /api/v1/Import/{id}/exportErrors
-
ExecutionReceive attachment identifier for error CSV
-
ImpactDownload CSV containing victim's import rows
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V8 - Authorization Authorization checks on every request
MITRE ATT&CK
1 technique across 1 tactic: Privilege Escalation The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Attacker must hold a valid, authenticated EspoCRM account that has been granted Import scope access (PR:L), and must supply another user's import record identifier to POST /api/v1/Import/{id}/exportErrors on an instance running a version prior to 9.3.7. The data exposed is limited to the error CSV rows of the targeted import. Limiting factors: no unauthenticated access is possible (a provisioned account with Import permission is mandatory), the attacker needs or must guess/enumerate a target import ID, and upgrading to 9.3.7 (which adds the entity-level checkEntityRead ownership check) fully closes the path; no user interaction by the victim is required. |
| Impact | This is a broken object-level authorization flaw (CWE-862) in EspoCRM's Import export-errors endpoint. The CVSS 3.1 vector (AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N, base 6.5) indicates a network-reachable, low-complexity attack requiring only low privileges (PR:L = an authenticated account with Import scope), with high confidentiality impact and no integrity or availability impact. The commit diff confirms the root cause: exportErrors() fetched the Import record by ID without calling checkEntityRead(), so a scope-level check passed while the per-record ownership check was skipped - a classic IDOR. Publicly available exploit material exists (the vendor GHSA advisory, the fixing commit, and the 9.3.7 release are all referenced), which raises practical risk because the vulnerable code path and fix are fully disclosed. No CISA KEV listing and no EPSS score were provided in the input, so there is no evidence of active in-the-wild exploitation and exploitation probability cannot be quantified from the data given. Net assessment: a genuine but medium-severity authenticated information-disclosure issue - not a drive-by unauthenticated RCE. The high CVSS confidentiality rating should be weighed against the real limiting factor that the attacker must already hold a valid EspoCRM account with Import permissions, which narrows the threat largely to insider or post-account-compromise scenarios. |
| Exploit ScenarioDerived | An authenticated EspoCRM user who holds Import scope access (but not ownership of a given import) sends POST /api/v1/Import/{id}/exportErrors supplying another user's import identifier, and the server returns an attachment identifier for a CSV containing rows from that victim's import, which the attacker then downloads. Because the endpoint only checks scope-level access and omits the entity-level ownership check, the attacker reads data they were never authorized to see. A public exploit path is disclosed via the vendor advisory and fixing commit, lowering the effort to reproduce. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 15, 2026
Broken object-level authorization in EspoCRM before 9.3.7 allows any authenticated user who has been granted Import scope access to read the row-level error CSV of another user's import job by posting to /api/v1/Import/{id}/exportErrors with a foreign import identifier. The endpoint returns an attachment identifier for the error file, exposing imported data rows (customer records, contact data, and similar) that the caller does not own; the exposure is limited to the contents of that import's error export and requires the attacker to know or enumerate a target import ID. Publicly available exploit code exists (the upstream advisory, fix commit, and 9.3.7 release are publicly linked), but there is no confirmed active exploitation via CISA KEV and no EPSS score was supplied; the vendor-released patch is 9.3.7, which adds the missing entity-level read check.
RemediationAI
Vendor-released patch: upgrade EspoCRM to 9.3.7 or later (https://github.com/espocrm/espocrm/releases/tag/9.3.7), which introduces the missing checkEntityRead ownership check in the Import service (commit 71ad7661215d25f7d0f2756c8e8dbc257cad848f) and closes the endpoint. If immediate upgrade is not possible, the most effective compensating control is to remove the Import scope from all non-administrative roles and grant it only to a small, trusted set of accounts, since the attack prerequisite is a provisioned account holding Import scope - the trade-off is that legitimate bulk-import users lose that functionality until the upgrade is applied. In parallel, audit and minimize how import identifiers can be enumerated by low-privilege users, review access logs for POST /api/v1/Import/{id}/exportErrors requests whose import ID does not belong to the calling account, and treat any such error CSV downloads as a potential data disclosure event requiring notification review. Restricting network access to the EspoCRM API (VPN or IP allowlist) reduces exposure but does not fix the authorization gap and is not a substitute for upgrading.
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
CWE-862 (Missing Authorization) in the PHP-based EspoCRM application, specifically in application/Espo/Tools/Import/Service.php. EspoCRM's Import tooling is normally protected by two layers: a scope-level ACL check on the Import scope, and an entity-level ownership check performed by the Import AccessChecker used by sibling Import endpoints. The exportErrors() method performed only the scope-level check and fetched the import record directly from the ORM repository without verifying that the caller could read that specific ImportEntity. The fix commit 71ad7661215d25f7d0f2756c8e8dbc257cad848f factors the record retrieval into a private getImport() helper that throws Forbidden unless $this->acl->checkEntityRead($import) succeeds, restoring object-level authorization on the endpoint. The attack surface is a normal authenticated REST API route (POST /api/v1/Import/{id}/exportErrors) reachable with the AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N vector, i.e. confidentiality-only impact with no integrity or availability effect and no victim interaction.
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:L/UI:N/S:U/C:H/I:N/A:N
Network REST endpoint with low complexity; requires an authenticated Import-scope account so PR:L; discloses another user's import data (C:H) with no integrity or availability impact.
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 user with Import scope access can send POST /api/v1/Import/{id}/exportErrors with another user's import identifier and retrieve an attachment identifier for a CSV containing rows from that import. The endpoint performs a scope-level check but omits the entity-level ownership check enforced by the Import AccessChecker and sibling Import endpoints. This issue is fixed in version 9.3.7.
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
Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.
Directory traversal vulnerability in EspoCRM before 2.6.0 allows remote attackers to include and execute arbitrary local
PHP object deserialization in EspoCRM versions prior to 9.3.7 lets an authenticated administrator achieve remote code ex
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
EUVD-2026-102099
NVD
CVE.org
EPSS
Vulnrichment
GitHub
Exploit-DB