Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate as portal user with stream access
-
ExploitObtain or guess internal Note identifier
-
ExecutionCall portal Note API for single Note directly
-
ImpactRead exposed internal agent content
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 | Exploitation requires an authenticated EspoCRM portal user account that already has stream access to the relevant parent record, and the attacker must know (or guess) the specific internal Note's identifier. The flaw is confined to the portal Note API's direct single-Note read path, where the access check does not enforce the isInternal restriction; the stream list endpoint correctly hides internal notes and is not affected. Limiting factors: a valid portal credential is needed, the targeted note must have isInternal=true and belong to a record the user can reach via the stream, and the note ID must be known - there is no bulk enumeration described, so exposure is per-known-identifier rather than wholesale dumping. Versions prior to 9.3.7 are affected; 9.3.7 remediates it. |
| Impact | This is a moderate-severity information-disclosure flaw (CVSS 6.5, CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N) whose real-world risk is tempered by meaningful preconditions. The vector is network-reachable with low complexity and no user interaction, but PR:L confirms an authenticated portal account is required, so this is not a mass-exploitable unauthenticated bug. Publicly available exploit code exists (GitHub Security Advisory GHSA-cg9f-34hj-p238 plus the fixing commit), which lowers the barrier to weaponization, but there is no CISA KEV listing and no EPSS score was provided in the input, so there is no evidence of active exploitation - treat POC availability and active exploitation as distinct signals. No SSVC decision data was supplied. Impact is confidentiality-only (C:H, I:N, A:N): the attacker reads internal stream notes they should not see but cannot modify or deny service. Net assessment: a credible priority for EspoCRM operators who expose customer/partner portals, but a targeted, access-limited disclosure issue rather than a widespread remote-takeover emergency; patch prioritization should weigh how sensitive internal agent notes are in the given deployment. |
| Exploit ScenarioDerived | An attacker holding a legitimate portal account with stream access to a parent record (e.g., a customer portal login) calls the portal Note API directly to fetch a specific Note by its known identifier. Because the single-Note access check fails to honor the isInternal flag, the response returns internal agent-only content that is normally hidden from stream list responses. Public exploit material exists in the vendor's GitHub Security Advisory and fixing commit, making the required request straightforward to reproduce. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 15, 2026
Information disclosure in EspoCRM's portal Note API allows an authenticated portal user (CVSS PR:L) who already has stream access to a parent record to retrieve internal agent notes by directly requesting a single Note by its known identifier; the stream list endpoint correctly filters notes where isInternal is true, but the direct single-Note read path fails to apply that restriction. Only EspoCRM versions prior to 9.3.7 are affected, and the issue is resolved in 9.3.7. Publicly available exploit code exists, but the practical risk is moderated by the preconditions: a valid portal credential, stream access to the relevant parent record, and knowledge of the specific note identifier - there is no described bulk enumeration, so exposure is per-known-identifier rather than wholesale dumping of internal content. No public exploit identified at time of analysis is contradicted here - exploitation code is public, but this is not confirmed as actively exploited (no CISA KEV listing).
RemediationAI
Upgrade EspoCRM to 9.3.7 or later, which is the vendor-released patch containing the missing-authorization guard in the portal Note access checker (release: https://github.com/espocrm/espocrm/releases/tag/9.3.7; advisory: https://github.com/espocrm/espocrm/security/advisories/GHSA-cg9f-34hj-p238; fix commit: https://github.com/espocrm/espocrm/commit/ee039bd22da9b6f5b768f31e7acece36596befb2). If immediate upgrade is not possible, apply the upstream change to checkEntityRead() in application/Espo/Classes/AclPortal/Note/AccessChecker.php so it returns false when $entity->isInternal() is true - this is a small, low-risk backport but must be re-applied or superseded on the next upgrade. Compensating controls carry trade-offs: audit and restrict portal user accounts and their stream access to only the records they genuinely need (reduces the reachable note surface but does not fix the direct-read flaw), and note that disabling the portal Note API entirely would block the leak but would also break legitimate portal comment/stream functionality; since exploitation requires knowing the specific note identifier, there is no reliable input-side block for arbitrary IDs, so patching remains the only complete fix. Rotating or reviewing portal credentials is advisable where exploit code is public.
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
EspoCRM is a PHP-based open source CRM whose portal subsystem enforces record-level access through ACL portal access checkers. The vulnerable component is the portal-scoped Note access checker (application/Espo/Classes/AclPortal/Note/AccessChecker.php), which implements the entity read authorization path for Notes exposed through the portal API. Notes carry an isInternal boolean that marks agent-only stream entries; the list/stream retrieval path honors it, but checkEntityRead() for direct single-entity access did not, a classic CWE-862 Missing Authorization gap where one code path enforces a policy that a parallel path omits. The upstream fix adds an explicit if ($entity->isInternal()) { return false; } guard to checkEntityRead(), meaning the intended authorization model is 'portal users must never read internal notes', while the flawed implementation only enforced it in aggregate listing responses. The vulnerability is network-reachable (AV:N) with low attack complexity (AC:L), no user interaction (UI:N), and high confidentiality impact (C:H) but no integrity or availability impact (I:N/A:N), consistent with a read-only disclosure of internal agent communications. The CPE pattern cpe:2.3:a:espocrm:espocrm:*:*:*:*:*:*:*:* identifies EspoCRM as the sole affected product family across all pre-9.3.7 builds.
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-facing portal API (AV:N), no special conditions beyond a valid portal login (AC:L, PR:L, UI:N); confidentiality-only disclosure of internal notes (C:H, I:N, A:N) within the same system (S:U).
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, a portal user with stream access to a parent record can directly fetch a Note through the portal Note API and read an internal stream note when the note identifier is known. Stream list responses correctly hide notes whose isInternal field is true, but the direct single-Note access check does not enforce that restriction, exposing internal agent content. 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
Path traversal in EspoCRM's formula scripting engine allows authenticated administrators to achieve arbitrary file read/
PHP object deserialization in EspoCRM versions prior to 9.3.7 lets an authenticated administrator achieve remote code ex
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-102094
NVD
CVE.org
EPSS
Vulnrichment
GitHub
Exploit-DB