Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessObtain authenticated Dendrite account
-
DeliveryJoin target private room
-
ExploitLeave target room
-
ExecutionRetrieve prior event ID from room
-
PersistCall /context endpoint with that event ID
-
ImpactReceive unfiltered current post-leave room state
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V8 - Authorization Authorization logic validation
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 | The attacker must hold a valid authenticated account on the target Dendrite homeserver (CVSS PR:L confirmed). They must have previously joined the target room and subsequently left - the RoomExists field evaluates true for any room the server knows about, while IsInRoom is false for departed users, creating the bypass condition. The /context endpoint must be reachable over the network (standard Matrix Client-Server API port, typically 8448 or 443). Exploitation is version-gated to Dendrite 0.13.8 and earlier; other Matrix homeserver implementations are unaffected. The data disclosed is limited to room state events (not arbitrary message history), and history visibility room settings do not compensate for this bypass since the check fails before visibility rules are applied. Exploitation is limited by the requirement for a pre-existing account; fully unauthenticated or external attackers cannot exploit this vulnerability. |
| Impact | The CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:L/UI:N/VC:L/VI:N/VA:N/SC:N/SI:N/SA:N) accurately reflects the attack profile: network-reachable, low complexity, no attack requirements, but constrained to authenticated users (PR:L) with limited confidentiality impact (VC:L). The requirement for a valid account on the target Dendrite instance substantially limits the realistic attacker pool compared to unauthenticated vulnerabilities. The data exposed is room state events - membership lists, room topics, and similar state - rather than full message history, capping the confidentiality damage. No EPSS score was provided in the input data; no CISA KEV listing exists, confirming no confirmed widespread active exploitation. However, a public PoC is available via the geo-chen GitHub repository and documented by VulnCheck, meaning exploitation requires minimal skill for any actor with a valid account. The real-world priority is moderate: Dendrite deployments hosting sensitive rooms (e.g., private organizational spaces) should patch promptly due to the low exploitation barrier, but the authenticated prerequisite and limited data scope prevent this from being a critical emergency. |
| Exploit ScenarioDerived | An authenticated user who previously joined and departed a private Matrix room hosted on a Dendrite server calls GET /_matrix/client/v3/rooms/{roomId}/context/{eventId} using an event ID they observed before leaving. Because context.go checks only RoomExists rather than the full membership state, the server returns unfiltered current room state - including current membership lists, room topic, and other state events - that the /sync and /messages endpoints would correctly withhold. A public PoC demonstrating this exact sequence is available at the geo-chen GitHub repository. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Jul 17, 2026
Post-leave room state disclosure in Dendrite through 0.13.8 allows authenticated local users to retrieve unfiltered current room state from rooms they have previously exited. The syncapi /context endpoint in syncapi/routing/context.go performs an incomplete membership check - evaluating only the RoomExists field while ignoring IsInRoom, HasBeenInRoom, and Membership - effectively treating departed users as current members for this endpoint alone. A publicly available proof-of-concept exists per VulnCheck and the geo-chen research disclosure; no active exploitation has been confirmed via CISA KEV at time of analysis.
RemediationAI
No vendor-released patched version is confirmed in the available reference data; administrators should monitor the matrix-org/dendrite GitHub repository for a tagged release addressing this issue. As an interim compensating control, operators can restrict access to the /rooms/{roomId}/context/{eventId} endpoint at the reverse proxy layer (e.g., nginx or Caddy) by validating session membership server-side before proxying - note this requires custom middleware and may break Matrix clients that rely on the context endpoint for timeline navigation. Alternatively, if the /context endpoint is not actively used by clients in the deployment, it can be blocked entirely at the reverse proxy; this trades client functionality for exposure reduction. The VulnCheck advisory (https://www.vulncheck.com/advisories/dendrite-syncapi-context-endpoint-post-leave-state-exposure) and the researcher disclosure (https://github.com/geo-chen/oss/blob/main/dendrite.md#finding-3-context-returns-current-room-state-to-non-members-and-left-users-history-visibility-bypass) should be monitored for patch availability updates.
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
Dendrite (CPE: cpe:2.3:a:matrix-org:dendrite:*:*:*:*:*:*:*:*) is the Go-based Matrix homeserver implementation maintained by matrix-org, serving as an alternative to the dominant Synapse server. The Matrix Client-Server API exposes a /rooms/{roomId}/context/{eventId} endpoint, implemented in syncapi/routing/context.go, which provides surrounding event context for a given event ID. CWE-863 (Incorrect Authorization) describes a scenario where an authorization check is present but logically incomplete - precisely the defect here. The membership query returns a struct with multiple fields (RoomExists, IsInRoom, HasBeenInRoom, Membership), but only RoomExists is evaluated before serving the response. Because a room continues to exist after a user departs, this field resolves to true and the gate passes, returning current post-leave state. The /messages and /sync endpoints implement the full multi-field check correctly, making this a localized regression in the context routing handler alone.
Know when Dendrite 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
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:L/VI:N/VA:N/SC:N/SI:N/SA:N
Requires authenticated account (PR:L) over network; low confidentiality impact from room state disclosure only; no integrity or availability impact.
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
DescriptionCVE.org
Dendrite through 0.13.8 contains an improper access control vulnerability in the syncapi /context endpoint (syncapi/routing/context.go) that allows authenticated local users to access post-leave room state events by exploiting a flawed membership check that evaluates only the RoomExists field while ignoring IsInRoom, HasBeenInRoom, and Membership fields. Attackers who have left a room can call the rooms context API endpoint for a previously permitted event and receive unfiltered current room state that the /messages and /sync endpoints correctly withhold.
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.
Improper authorization in Dendrite (the Go-based Matrix homeserver) through version 0.13.8 lets any authenticated local
Server-side request forgery in Dendrite through 0.13.8 allows unauthenticated remote attackers to weaponize the server a
gomatrixserverlib is a Go library for matrix protocol federation. Rated high severity (CVSS 8.8), this vulnerability is
Dendrite is a Matrix homeserver written in Go. Rated medium severity (CVSS 5.3), this vulnerability is remotely exploita
EUVD-2026-45195
GHSA-xq7h-2f2w-f2xq
NVD
CVE.org
EPSS
VulDB
Exploit-DB