Skip to main content

Discourse CVE-2026-91120

| EUVDEUVD-2026-86304 MEDIUM
Cross-site Scripting (XSS) (CWE-79)
2026-09-24 GitHub_M
5.4
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

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

  1. Access
    Authenticate as standard posting user
  2. Delivery
    Post video with markup-laden provider title
  3. Exploit
    Discourse builds notification email/chat summary
  4. Execution
    Title reparsed as HTML in output
  5. Persist
    Recipient opens email in HTML client
  6. Impact
    Injected content/handlers render

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Output encoding, context-aware escaping
MITRE ATT&CK

2 techniques across 2 tactics: Initial Access, Execution

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

Exploitation Conditions

Requires: (1) an authenticated Discourse account with standard posting privileges; (2) 'lazy video embeds' enabled, which is the DEFAULT configuration; (3) an enabled video provider (YouTube, Vimeo, or TikTok) and the attacker's ability to control that provider-side video title with embedded markup; and (4) a recipient who reads the resulting notification email or chat summary in an HTML-capable email client. Exploitation is limited by the fact that the impact is confined to the email/chat-summary rendering context - it does NOT reach a Discourse browser session or the forum page - and by email clients that strip scripting/event handlers, which blunts any active payload to passive content injection.

Impact

This is a genuine but low-priority issue. The CVSS 3.1 base score is 5.4 (Medium) with vector AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:N - network reachable, low complexity, but requiring low-privilege authentication (PR:L, a standard posting account). No EPSS score, no CISA KEV listing, and no public exploit are present in the provided data, so exploitation status is 'no public exploit identified at time of analysis.' No SSVC decision data was supplied. The most important tempering signal comes from the description itself: the injected markup lands only in a recipient's HTML-capable email client or chat summary and explicitly does NOT expose a Discourse browser session or affect the forum page. Modern email clients aggressively strip scripting and event handlers, so the practical impact is closer to HTML/content injection (spoofed content, phishing-style formatting) than executable code. Note also a discrepancy: NVD marks UI:N, yet realistic exploitation requires the victim to open the notification email, which argues for UI:R and a slightly lower real-world score - verify with vendor. Overall this is a low-real-risk hardening fix, not an urgent patch.

Exploit ScenarioDerived

An authenticated user with standard posting privileges publishes a post embedding a video from an enabled provider (YouTube, Vimeo, or TikTok) whose provider-side title contains HTML markup such as an event-handler attribute. When Discourse generates a notification email or chat summary referencing that post, the malicious title is placed into the output as HTML rather than escaped text, so recipients reading the message in an HTML-capable email client may see injected content. No public exploit code is identified at time of analysis.

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

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

Alert me

AnalysisAIv1 – Sep 24, 2026

Stored cross-site scripting in Discourse's notification email and chat-summary rendering paths allows an authenticated user with standard posting privileges to inject markup into messages generated for other users. In versions prior to 2026.1.8, 2026.6.3, 2026.7.2, and 2026.8.0, a post referencing a video from an enabled provider (YouTube, Vimeo, or TikTok) whose provider-side title contains markup is reparsed as HTML when the notification email or chat summary is built, so recipients reading those messages in an HTML-capable email client may render injected content, potentially including event handlers; impact is confined to the email/chat rendering context and does not reach the Discourse browser session or the forum page itself. Lazy video embeds must be enabled (the default configuration) for exploitation, authentication requirements are confirmed as low-privileged (CVSS vector PR:L), no public exploit code has been identified at time of analysis, and this is assessed as a genuine but low-priority issue.

RemediationAI

Apply the vendor-released patch by upgrading to the fixed version for your release branch: 2026.1.8, 2026.6.3, 2026.7.2, or 2026.8.0; the fix is delivered via GitHub PR https://github.com/discourse/discourse/pull/42882 and the associated commits (6bf1cdcb3ae1aa146e1fd953a62046bf4a1f143f, 8338919df4ecbd0fb85314b762772cc033b764e3, e7de8285203a2edf85beff3b951e66aeb7e5dc76, ed8b47df80bcc9f0bd70773fc399c9386f9d52dd, with the advisory at https://github.com/discourse/discourse/security/advisories/GHSA-h7cg-2vww-m45c). If immediate upgrade is not possible, the most direct compensating control is to disable the 'lazy video embeds' site setting, which removes the vulnerable rendering path but degrades post rendering performance and loses the placeholder/click-to-load behaviour for embedded videos; a narrower alternative is to disable the affected onebox/video providers (YouTube, Vimeo, TikTok) so provider-controlled titles are never ingested, at the cost of losing rich embeds for those services entirely. Because the payload only renders in HTML-capable email clients or chat summaries, encouraging recipients to use plain-text email rendering reduces exposure, but this depends on client configuration and is not a reliable control. Applying the output-encoding fixes bundled in the same commit series (username encoding in mention hrefs, quote rejection in the video placeholder, and iframe src path-traversal validation) is recommended even on branches where the email-rendering issue is not exploitable, since those changes close related attribute-breakout and sanitizer-bypass vectors.

Affected VersionsENISA

discourse 2026.6.0-latest, < 2026.6.3
discourse < 2026.8.0
discourse 2026.7.0-latest, < 2026.7.2
discourse 2026.1.0-latest, < 2026.1.8

Affected Packages

euvd discourse fix: 2026.8.0
euvd discourse_2026_1_0_latest fix: 2026.1.8
euvd discourse_2026_6_0_latest fix: 2026.6.3
euvd discourse_2026_7_0_latest fix: 2026.7.2

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 4 packages in euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

The flaw is a CWE-79 cross-site scripting problem rooted in inconsistent output encoding between two rendering contexts. Discourse's lazy video embeds feature fetches embed metadata from enabled third-party providers (YouTube, Vimeo, TikTok) and trusts the provider-supplied video title as display text. On the forum page that title is handled with adequate escaping, but the email-notification and chat-summary generation paths reparse the same title as HTML, so markup embedded in a provider-controlled title is emitted verbatim rather than entity-encoded. Because the initial CVSS vector is AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:N while the independent assessment tightens it to UI:R, the practical model is an authenticated poster crafting content that a second party must actually open in an HTML-capable mail client or chat summary view for the payload to render. The landing patch (GitHub PR #42882) is a broader output-encoding hardening pass rather than a single-line fix: it encodes actor usernames in mention hrefs within the small-action and nested-activity-log frontend components (encodeURIComponent on user paths, blocking href attribute breakout payloads such as '"><img src=x>'), hardens the video-placeholder initializer to reject sanitized values containing quotes, adds a regression test rejecting a data-video-src attribute-breakout payload with an onerror handler, applies sanitize_sql_like() in app/models/concerns/has_url.rb to prevent LIKE wildcard injection, and extends the iframe sanitizer to reject allowed_iframes sources containing URL-encoded path-traversal segments (%2e%2e) even when followed by query strings or fragments. These additional changes indicate the maintainers treated the video-title issue as part of a wider class of context-dependent escaping defects.

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

Vendor (GitHub_M) PRIMARY 5.4 MEDIUM
AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:N
vuln.today AI 4.6 MEDIUM

Network-reachable low-complexity injection needing a posting account (PR:L) and a recipient opening the HTML email (UI:R); limited content injection in the mail client yields C:L/I:L, 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:P/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

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

Lifecycle Timeline

2
Patch available
Sep 24, 2026 - 18:02 EUVD
CVE Published
Sep 24, 2026 - 17:00 cve.org
MEDIUM 5.4

DescriptionCVE.org

Discourse is an open-source discussion platform. Prior to 2026.1.8, 2026.6.3, 2026.7.2, and 2026.8.0, provider-controlled video titles in lazy video embeds could be reparsed as HTML when Discourse generated notification emails or chat summaries. A user with standard posting privileges could create a post for an enabled YouTube, Vimeo, or TikTok provider whose title contained markup, and the email and chat-summary rendering path would place that markup into the output instead of treating it solely as text. Recipients using HTML-capable email clients could see injected content, potentially including event handlers, but the issue did not directly expose a Discourse browser session or affect the forum page itself. Lazy video embeds must be enabled, which is the default configuration. This issue is fixed in versions 2026.1.8, 2026.6.3, 2026.7.2, and 2026.8.0.

Threat Intelligence Overview

EPSS Score
0.2%
Top 91% exploitable
Prevalence
High
Discourse is a very widely deployed open-source discussion/forum platform
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.2%
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
Scheduled
Exploitation
None
System Exposure· derived
Open
Automatable
No
Human Impact· derived
High
Technical Impact
Partial

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