Skip to main content

Discourse EUVDEUVD-2025-33227

| CVE-2025-58054 MEDIUM
Basic XSS (CWE-80)
2025-10-01 security-advisories@github.com
5.4
CVSS 3.1 · NVD
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Authenticate to Discourse chat
  2. Delivery
    Set channel/thread title with XSS payload
  3. Exploit
    Victim quotes chat message in rich editor
  4. Execution
    Unsanitized title rendered as innerHTML
  5. Impact
    Execute JavaScript in victim browser

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A06:2021 - Vulnerable and Outdated Components
ASVS 5.0
V14 - Configuration Dependency management, component inventory
MITRE ATT&CK

1 technique across 1 tactic: Initial Access

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

Requires the Discourse chat plugin to be enabled (and, for the thread-title variant, threading_enabled on the channel); the attacker needs an authenticated account able to set a chat channel name or create/name a chat thread, and must inject an HTML payload into that title. The victim must actively invoke the quote-message functionality in the rich text editor, which renders the attacker-controlled title via emojiUnescape without sanitization. Key limiting factor: the fix's regression tests disable Content Security Policy to make the payload fire, indicating that Discourse's default CSP likely blocks inline script execution and materially constrains real-world exploitation; affected only on versions 3.5.0 and below.

Impact

This is a medium-severity stored/DOM XSS (CVSS 5.4, CWE-80) whose signals consistently point to LOW real-world urgency rather than an active priority. EPSS is 0.03% (10th percentile), there is no CISA KEV listing, and no public exploit code was identified - only vendor-authored regression tests in the fix commit demonstrate the vector. The NVD vector (AV:N/AC:L/PR:N/UI:R/S:U/C:L/I:L/A:N) lists PR:N, but this CONFLICTS with the actual mechanism: an attacker must be able to set a chat channel or thread title, which requires an authenticated account with chat access - so the realistic privilege requirement is PR:L, not PR:N (verify with vendor). Exploitation also requires victim interaction (UI:R) via the quote-message feature and the chat plugin being enabled. Notably, the fix's test suite explicitly disables Content Security Policy (SiteSetting.content_security_policy = false) to observe the payload firing, strongly implying Discourse's default CSP mitigates inline script execution in production - further reducing real risk. Net: a genuine but low-priority flaw best handled via routine patching to 3.5.1.

Exploit ScenarioDerived

An authenticated user with chat access sets a chat channel or thread title containing an HTML/JS payload (e.g. '<video src=_ onloadstart=confirm(document.domain)>'). When another user quotes a chat message containing that title into the rich text editor, the title is passed through emojiUnescape and rendered as raw innerHTML without sanitization, executing attacker-controlled JavaScript in the victim's browser. No public POC was identified, though the vendor's fix commit includes test cases that reproduce the vector.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.0% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv2 – Oct 19, 2026

Stored/DOM cross-site scripting in Discourse chat channel and thread titles lets an authenticated user who can name a channel or thread inject HTML that executes when another user quotes the chat transcript in the rich text editor. The flaw affects Discourse 3.5.0 and earlier with the chat plugin enabled, and the victim must actively use the quote-message feature; Discourse's default Content Security Policy likely blocks inline script execution, materially limiting real-world impact. It is fixed in Discourse 3.5.1, has a low EPSS score of 0.03%, and no public exploit was identified at time of analysis.

Earlier versions of this analysis (1)
v1 Mar 13, 2026 - 18:18 CVSS 3.5

RemediationAI

Vendor-released patch: upgrade Discourse to 3.5.1 or later; the fix is commit 3a224fd546d894ee408e7414b6879e814a792f91 and the advisory is at https://github.com/discourse/discourse/security/advisories/GHSA-7p47-8m82-m2vf. If immediate upgrade is not possible, disable the chat plugin to remove the vulnerable rich-editor extension entirely, at the cost of losing chat functionality, and for the thread-title path ensure channel threading is not enabled. Additionally, restrict creation and renaming of chat channels and threads to trusted staff, since the issue requires an authenticated account with those permissions. Keep Discourse's default Content Security Policy enabled rather than disabling it, as the regression tests had to turn CSP off to make the payload fire; CSP reduces but does not eliminate risk and is not a substitute for patching.

Affected VersionsENISA

discourse < 3.5.1

Affected Packages

euvd discourse fix: 3.5.1

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

CVE-2025-58054 is a CWE-80 improper neutralization of script-related HTML tags in Discourse's chat plugin. The rich text editor's quote/transcript extension applies the emojiUnescape helper to channel and thread title attributes and then assigns the result through innerHTML while building the chat transcript UI. Because emojiUnescape is intended for emoji substitution rather than full HTML sanitization, attacker-controlled markup in a chat channel name or thread title survives into the DOM. Exploitation requires an authenticated account able to create or rename a chat channel or thread, the chat plugin enabled, threading enabled for the thread-title path, and a victim who invokes quote-message in the rich text editor. The upstream fix replaces emojiUnescape with the replaceEmoji helper and adds regression tests that disable Content Security Policy to demonstrate script execution, indicating that Discourse's default CSP normally blocks inline script and constrains exploitation.

Know when Discourse 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

NVD PRIMARY 5.4 MEDIUM
AV:N/AC:L/PR:N/UI:R/S:U/C:L/I:L/A:N
vuln.today AI 4.6 MEDIUM

Setting a chat channel/thread title requires an authenticated account (PR:L); victim must invoke the quote feature (UI:R); stored XSS yields limited browser-context C:L/I:L and no availability impact.

3.1 AV:N/AC:L/PR:L/UI:R/S:U/C:L/I:L/A:N
4.0 AV:N/AC:L/AT:N/PR:L/UI:A/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N

Primary rating from NVD.

CVSS VectorNVD

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
Required
Scope
Unchanged
Confidentiality
Low
Integrity
Low
Availability
None

Lifecycle Timeline

4
Severity Changed
Oct 19, 2026 - 17:23 NVD
LOW MEDIUM
CVSS changed
Oct 19, 2026 - 17:23 NVD
3.5 (LOW) 5.4 (MEDIUM)
Patch released
Oct 23, 2025 - 15:09 nvd
Patch available
CVE Published
Oct 01, 2025 - 19:15 nvd
LOW 3.5

DescriptionNVD

Discourse is an open-source community discussion platform. Versions 3.5.0 and below are vulnerable to XSS attacks through parsing and rendering of chat channel titles and chat thread titles via the quote message functionality when using the rich text editor. This issue is fixed in version 3.5.1.

Executive ViewAI

Why It Matters

CVE-2025-58054 is a low-severity vulnerability in Discourse (CVSS 3.5). The limited severity suggests constrained impact, typically requiring specific conditions or local access for exploitation. A patch is available and can be applied during standard maintenance windows.

Business Impact: Low
Compensating Controls

Apply vendor patch during routine maintenance. Standard security controls provide adequate interim protection.

Threat Intelligence Overview

EPSS Score
0.0%
Top 90% exploitable
Prevalence
Medium
popular open-source forum platform, moderate but not universal deployment
Data Quality
5 sources
Confidence: Medium

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.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC No
EPSS 0.0%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Defer
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
No
Human Impact
Low

Priority Score

27
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +27
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Cross-Site Scripting occurs when an application accepts untrusted data and sends it to a web browser without proper validation or encoding.

CVE-2025-48954 HIGH POC
8.1 Jun 25

Discourse versions prior to 3.5.0.beta6 contain a reflected cross-site scripting (XSS) vulnerability in social login fun

CVE-2022-46162 CRITICAL POC
9.8 Nov 30

discourse-bbcode is the official BBCode plugin for Discourse. Rated critical severity (CVSS 9.8), this vulnerability is

CVE-2026-27934 HIGH POC
8.7 Mar 19

Unauthorized information disclosure in Discourse discussion platform versions prior to 2026.3.0-latest.1, 2026.2.1, and

CVE-2024-47773 HIGH POC
8.2 Oct 08

Discourse is an open source platform for community discussion. Rated high severity (CVSS 8.2), this vulnerability is rem

CVE-2026-26265 HIGH POC
7.5 Feb 26

Discourse versions prior to 2025.12.2, 2026.1.1, and 2026.2.0 contain an insecure direct object reference (IDOR) in the

CVE-2021-3138 HIGH POC
7.5 Jan 14

In Discourse 2.7.0 through beta1, a rate-limit bypass leads to a bypass of the 2FA requirement for certain forms. Rated

CVE-2026-26077 MEDIUM POC
6.5 Feb 26

Unauthenticated attackers can submit forged webhook payloads to multiple email provider integrations in Discourse versio

CVE-2023-38706 MEDIUM POC
6.5 Sep 15

Discourse is an open-source discussion platform. Rated medium severity (CVSS 6.5), this vulnerability is remotely exploi

CVE-2024-53991 MEDIUM POC
5.9 Dec 19

Discourse is an open source platform for community discussion. Rated medium severity (CVSS 5.9), this vulnerability is r

CVE-2025-48877 CRITICAL
9.8 Jun 09

Discourse versions prior to 3.4.4 (stable), 3.5.0.beta5 (beta), and 3.5.0.beta6-dev (tests-passed) contain a critical vu

CVE-2023-47121 CRITICAL
9.8 Nov 10

Discourse is an open source platform for community discussion. Rated critical severity (CVSS 9.8), this vulnerability is

CVE-2022-39355 CRITICAL
9.8 Oct 26

Discourse Patreon enables syncronization between Discourse Groups and Patreon rewards. Rated critical severity (CVSS 9.8

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy