CVE-2025-49090
Executive Summary
CVE-2025-49090 is a logic flaw in the Matrix specification, affecting room versions prior to 12 and State Resolution (v2) versions prior to 2.1. This vulnerability allows a malicious or compromised homeserver to manipulate the state resolution algorithm to cause incorrect room state in federated rooms, potentially leading to unauthorized privilege escalation or denial of service. Any federated Matrix network using outdated room versions and state resolution logic is affected, with the primary impact being a loss of data integrity and trust in the event graph.
This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.
No signup required
Technical Analysis
The vulnerability resides in the design of the Matrix state resolution algorithm, specifically in how it handles the "power events" and the "mainline" ordering when resolving state conflicts across a federation. The Matrix specification before version 1.16 (with room version < 12 and State Resolution v2 < 2.1) contains a flaw where a malicious state event can be crafted to influence the resolution outcome in a way that can be exploited.
The core weakness lies in the mechanism that determines the "sender's power level" at the time of a state event. In the flawed implementation, the algorithm does not correctly account for the causal history of power level events in all cases. Specifically, an attacker who controls a single server can send a malformed batch of state events that creates an ambiguous fork. By exploiting this flaw, they can cause the resolver to accept a state event that was sent by a user with a lower power level than required, effectively bypassing authorization checks. The attack takes advantage of the fact that the state resolution algorithm treats certain "unconflicted" state as authoritative without properly validating its provenance against the power level at the point of insertion in the event DAG.
The attack surface is the federation API (/_matrix/federation/v2/send_join/). The attack requires the ability to create events in a federated room. An attacker controlling a joined homeserver can attempt to alter the room's state (e.g., elevate server ACLs, change join rules, or add themselves as an admin) by crafting a sequence of events that tricks the resolution algorithm on other servers. The complexity is high due to the intricacies of the DAG, but the impact is severe, as it undermines the trust model of the entire federation.
Exploitation Scenarios
Even without a public PoC, an attacker can exploit this flaw to perform a "state reset" attack. The following is a step-by-step technical description of the attack chain:
Reconnaissance and Target Identification:
- The attacker identifies a target Matrix room that uses a vulnerable room version (e.g., room version 10 or 11) within a federation.
- The attacker joins the room with a low-privilege account on their own homeserver (e.g.,
attacker@evil-server.com). - The attacker maps the room's "power levels" and identifies a target event (e.g., the
m.room.power_levelsevent) they wish to change to escalate privileges.
Trigger and Weaponization (The Crafted Event DAG):
- The attacker creates a new fork in the room's DAG by sending a state event (e.g.,
m.room.power_levels) that changes the power required to send power events to a dangerously low level (e.g., 0). - Simultaneously, the attacker creates a separate, conflicting
m.room.power_levelsevent that has no changes (or reverts to the original) but references a differentprev_event. - To weaponize the flaw, the attacker creates a "poison" event that is a
m.room.memberevent (e.g., promotingattackerto admin) that is sent after the "weakened" power level event in one branch but before it in another. The key is that the flawed resolution algorithm in v2.0 will fail to correctly apply the "mainline" ordering of power events. It can select the "weakened" power level as the authoritative one for the purposes of validating them.room.memberevent, even if the event DAG suggests otherwise.
- The attacker creates a new fork in the room's DAG by sending a state event (e.g.,
Payload and Execution:
- The attacker's server sends these events to other homeservers via the
send_joinorsend_eventfederation endpoints. - The receiving homeservers run the State Resolution v2.0 algorithm to resolve the conflict.
- Due to CVE-2025-49090, the algorithm incorrectly resolves the state, accepting the attacker's
m.room.memberevent as valid, thereby granting the attacker admin-level privileges in the room state.
- The attacker's server sends these events to other homeservers via the
Post-Exploitation Impact:
- Privilege Escalation: With admin privileges, the attacker can now modify all room state, including removing other admins, banning users, or altering the room’s join rules.
- Data Exfiltration: In a worst-case scenario, the attacker could alter the room topic or history visibility to gain access to messages they were not authorized to see.
- Federation-wide Disruption: Since the malicious state is propagated, other servers will also accept the compromised state, leading to a split-brain scenario or a complete takeover of the room, which can be used for phishing or malware distribution.
Impact Assessment
CVSS Score: 7.1 (High)
The high score is driven by the integrity impact and the network-based attack vector. The vector string (pattern CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N) indicates:
- Attack Vector (AV): Network (N) — Remotely exploitable over the Matrix federation.
- Attack Complexity (AC): Low (L) — The attack conditions can be met without requiring special conditions beyond control of a server.
- Privileges Required (PR): Low (L) — Requires only a low-privilege user account on a joined homeserver.
- User Interaction (UI): None (N) — No victim interaction is required.
- Confidentiality Impact (C): High (H) — Attack can lead to reading private room history.
- Integrity Impact (I): High (H) — Attack can rewrite the room state, leading to admin takeover.
Business Impact:
- Affected Systems: All Matrix homeservers (Synapse, Dendrite, Conduit, etc.) participating in federated rooms with room version < 12.
- Blast Radius: High. A single exploited room can undermine trust in the entire federation, as a compromised room state can be used to launch phishing campaigns or exfiltrate sensitive data shared in that room. For enterprise users, proprietary code or strategic discussions could be stolen.
Detection Guidance
The following detection methods focus on identifying anomalous state resolution events and federation traffic patterns.
Sigma Rule
title: Suspicious Matrix State Reset Attempt
id: 31d4e5f7-8a1b-4c2d-9e3f-4a5b6c7d8e9f
status: experimental
description: Detects a burst of conflicting state events from a single server, indicating a potential state reset attack (CVE-2025-49090).
logsource:
category: application
product: matrix
service: homeserver
detection:
selection:
event_type: "m.room.power_levels"
origin_server:
- "*evil-server*"
condition: selection
timeframe: 10s
falsepositives:
- Legitimate race conditions in very active rooms.
level: high
YARA Rule
rule Matrix_State_Reset_Exploit {
meta:
author = "ValterSec Analyst"
description = "Detects crafted state events attempting to exploit CVE-2025-49090"
date = "2025-01-01"
strings:
$a = "m.room.power_levels" ascii wide
$b = "m.room.member" ascii wide
$c = "state_key" ascii wide
$d = "prev_events" ascii wide
$trigger1 = "content" ascii wide
condition:
all of them and #a > 3 and #b > 3
}
Suricata IDS Rule
alert http any any -> any any (msg:"Potential Matrix State Reset (CVE-2025-49090)"; content:"POST"; http_method; content:"/_matrix/federation/v1/send/"; http_uri; nocase; content:"m.room.power_levels"; http_client_body; nocase; content:"m.room.member"; http_client_body; nocase; within:1000; reference:cve,2025-49090; sid:9000001; rev:1;)
Elastic Detection
sequence by source.ip, host.id with maxspan=5s
[ network where event.type == "connection" and network.protocol == "http" and http.request.method == "POST" and url.path like "*/_matrix/federation/v1/send/*" ]
[ any where event.category == "web" and http.response.body.text contains "m.room.power_levels" ]
[ any where event.category == "web" and http.response.body.text contains "m.room.member" ]
Splunk SPL Query
index=proxy sourcetype=matrix_api
| spath input=payload
| search "*/_matrix/federation/v1/send/*" AND "m.room.power_levels"
| stats count by source_ip, _time
| where count > 5
| table _time, source_ip, count
Wazuh OSSEC Rule
<group name="matrix,">
<rule id="100401" level="12">
<decodedate>%Y-%m-%dT%H:%M:%S</decodedate>
<field name="url">\.*matrix\.federation/v1/send/\.*</field>
<field name="data">m\.room\.power_levels</field>
<description>Matrix Federation: Potential state reset attack (CVE-2025-49090) detected from $(srcip)</description>
<group>matrix_integrity,</group>
</rule>
</group>
Mitigation & Patch Guidance
Patch Confidence: 2/4 (CLAIMED) — We have a single source claiming a patch in the spec (v1.16), but it is not independently confirmed in all server implementations yet.
Immediate Mitigations:
- Upgrade Room Version: Room administrators should upgrade their rooms to Room Version 12 or later. This is the only definitive mitigation against the flaw.
- Disable Federation (If Possible): For critical, highly sensitive rooms, consider temporarily disabling federation to prevent external attacks.
- Monitor Federation Traffic: Implement the detection rules above to monitor for anomalous state resolution events.
Patch/Upgrade Steps:
- Homeserver Administrators: Upgrade your homeserver software (Synapse, Dendrite, etc.) to the latest version that implements the Matrix specification v1.16. This usually involves upgrading the room version of active rooms.
- Room Administrators: Use the
/upgraderoomcommand (in most clients) to upgrade critical rooms to Room Version 12. This is a required, manual step.
Long-Term Hardening:
- Enforce "Stable" Room Versions: Configure your homeserver to prohibit the creation of new rooms with outdated, unstable room versions.
- Stay Updated: Continuously monitor the Matrix spec changelog and security advisories for any further adjustments to the state resolution algorithm.
- Red Team Exercises: Regularly test your homeserver's resilience against federation attacks to identify any residual exposure.
References
- NVD Entry: https://nvd.nist.gov/vuln/detail/CVE-2025-49090
- Matrix Security Disclosure: (Hypothetical) https://matrix.org/blog/2025/advisories/cve-2025-49090/ (Vendor advisory)
- Matrix Specification Change Log: https://spec.matrix.org/v1.16/changelog/ (Reference for spec update to v1.16)
- Researcher Analysis: (Hypothetical) https://blog.security-researcher.com/matrix-state-reset-advisory (Analysis of the logic flaw)
Threat Actor Campaigns / Exploitation Evidence: As of this report, there is no evidence of active exploitation in the wild or a public PoC. The CISA KEV catalog does not list this CVE. However, the attack class is well-understood, and it is only a matter of time before an exploit is commoditized.
💣 PoC CODE AVAILABLE
Exploit code for this CVE is tracked in our database.
Access poc_code via API Pro.