Skip to main content

Discourse EUVDEUVD-2026-86302

| CVE-2026-91122 HIGH
Cross-site Scripting (XSS) (CWE-79)
2026-09-24 GitHub_M
8.7
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

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

  1. Access
    Authenticated trust-level user posts content
  2. Delivery
    Embed video placeholder with attribute-breakout data-video-src
  3. Exploit
    Store crafted onerror handler in post
  4. Execution
    Victim opens post and clicks play overlay
  5. Persist
    Handler executes JavaScript in viewer session
  6. Impact
    Read page content and make authenticated requests as viewer

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 an authenticated account with default trust-level posting privileges to store the crafted video-placeholder payload. Script execution additionally requires the target Discourse instance to have its Content Security Policy DISABLED or RELAXED - under the default CSP, inline event handlers are blocked and the attack fails to execute. It also requires victim interaction: another user must open the malicious post and click the video play overlay to trigger the injected handler. These three gates (authentication, non-default CSP, and specific victim UI interaction) meaningfully limit realistic exploitation versus the 8.7 base score.

Impact

This is a stored XSS (CWE-79) in Discourse's video-placeholder component. The CVSS 3.1 vector (AV:N/AC:L/PR:L/UI:R/S:C/C:H/I:H/A:N, 8.7) reflects network reach, low-privilege posting access, and a scope change into the viewer's session, but the score materially overstates real-world risk because it does not weight the single most important limiting factor stated in the description: the default Content Security Policy blocks inline event handlers, so the injected handler does NOT execute on a default-configured instance. Exploitation therefore requires the victim instance to have CSP disabled or relaxed - a non-default hardening regression - plus multi-step victim interaction (open the post AND click the play overlay, UI:R). Given that, AC:L is optimistic and AC:H is more defensible, and C:H/I:H is high for a stored-XSS whose realistic impact is reading page content and issuing authenticated requests as the viewer (C:L/I:L is the conventional call). Exploitation signals are weak: no CISA KEV listing, no EPSS score provided, and no public exploit identified at time of analysis. Net: a legitimate patch-worthy flaw for CSP-relaxed instances, but not an urgent widespread-exploitation priority; default-CSP deployments are not exposed to script execution.

Exploit ScenarioDerived

An authenticated user with ordinary trust-level posting rights on a Discourse forum whose CSP has been disabled or relaxed crafts a post containing a video placeholder with a malformed data-video-src that breaks out of the attribute and adds an onerror handler. When a moderator or admin later opens that post and clicks the video play overlay, the handler runs arbitrary JavaScript in their session, reading page content and issuing authenticated requests as the victim. No public exploit code is known, though the fix commit and its regression test disclose the exact breakout payload pattern.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available 0.3% 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 video-placeholder component lets an authenticated user with default trust-level posting privileges embed a crafted video URL in a post that breaks out of the placeholder's data-video-src attribute and injects an attacker-controlled event handler, which fires when another user opens the post and clicks the video play overlay. Exploitation is gated by three independent conditions - a valid posting account (CVSS PR:L, so authenticated), the target instance running with its Content Security Policy disabled or relaxed (the default CSP blocks inline event handlers and defeats the attack), and specific victim interaction (UI:R) - so realistic risk is materially lower than the 8.7 base score implies; our assessment rates it AC:H with only low confidentiality and integrity impact. No public exploit code and no confirmed active exploitation (no CISA KEV listing) were identified at time of analysis, and the vendor has released fixed versions 2026.1.8, 2026.6.3, 2026.7.2 and 2026.8.0.

RemediationAI

Vendor-released patch: upgrade to 2026.1.8, 2026.6.3, 2026.7.2 or 2026.8.0 - choose the release matching your installed branch (for example, a 2026.1.x instance must reach 2026.1.8, a 2026.7.x instance must reach 2026.7.2), and track the advisory at https://github.com/discourse/discourse/security/advisories/GHSA-8m44-f6g9-7cg7. Because the fixed code simply rejects any video URL whose sanitized value still contains a double quote and renders an error notice, there is no configuration toggle that fully substitutes for patching. Compensating controls, in order of effectiveness: keep the default Content Security Policy enabled and do not relax it to permit unsafe-inline or inline event handlers, since the default CSP is precisely what blocks this payload from executing - the trade-off is that sites with custom themes or plugins that require relaxed CSP must either rewrite them or accept this residual risk; if patching must be deferred, restrict posting rights so that only fully trusted groups can create posts containing video placeholders (raising the barrier from the default trust level, at the cost of limiting normal community posting), and enable post moderation or staff review for new accounts so the stored payload never reaches a victim's browser. Applying only the CSP control is a mitigation, not a fix, and does not remove the stored payload from the database.

Affected VersionsENISA

discourse 2026.7.0-latest, < 2026.7.2
discourse 2026.6.0-latest, < 2026.6.3
discourse < 2026.8.0
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

Discourse is a Ruby-on-Rails plus Ember.js discussion platform, and this flaw is a classic CWE-79 stored XSS caused by improper neutralization of user input during HTML generation. The frontend instance initializer that renders video placeholders (frontend/discourse/app/instance-initializers/video-placeholder.js) builds a video element from a post-supplied URL after only checking that the sanitized value does not contain the HTML entity '&lt;'; it did not reject a literal double-quote character. An attacker-supplied URL containing a '"' therefore terminated the data-video-src attribute early and allowed arbitrary attribute injection, such as an onerror event handler, into the generated markup. The upstream fix (PR 42882, commits 05d92b87, 5674b3e6, c3993e31 and d7126af3) extends the validation to reject sanitized values containing double quotes and simply renders an error notice for invalid video URLs instead of a video element. Discourse's default Content Security Policy normally blocks inline event handlers, which is why the issue is only exploitable on instances where CSP has been disabled or relaxed; published tests confirm that no event-handler attribute and no video element are created for a breakout payload once patched. The same pull request bundles related hardening - encoding actor names in mention hrefs (userPath(encodeURIComponent(...))), switching a URL lookup to sanitize_sql_like to stop LIKE-wildcard injection, and rejecting iframe sources containing URL-encoded path traversal segments.

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 8.7 HIGH
AV:N/AC:L/PR:L/UI:R/S:C/C:H/I:H/A:N
vuln.today AI 4.4 MEDIUM

AC:H because script execution requires the non-default CSP-disabled/relaxed configuration plus victim overlay click; PR:L for authenticated posting; C:L/I:L for typical stored-XSS session impact; S:C as it crosses into the viewer's context.

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

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

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

Lifecycle Timeline

2
Patch available
Sep 24, 2026 - 18:02 EUVD
CVE Published
Sep 24, 2026 - 16:56 cve.org
HIGH 8.7

DescriptionCVE.org

Discourse is an open-source discussion platform. Prior to 2026.1.8, 2026.6.3, 2026.7.2, and 2026.8.0, the video placeholder component allowed crafted HTML to cause an attribute breakout and inject an attacker-controlled event handler. An authenticated user with default trust-level posting privileges could store the crafted placeholder in a post. When another user opened the post and clicked the video play overlay, the handler could execute arbitrary JavaScript in the viewer's session. Default Content Security Policy settings block inline event handlers, but instances with CSP disabled or relaxed could allow the script to read page content and make authenticated requests as the viewer. This issue is fixed in versions 2026.1.8, 2026.6.3, 2026.7.2, and 2026.8.0.

Technical POC Analysis

Bug class: stored cross-site scripting, CWE-79 (improper neutralization of input during web page generation).

Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.

Executive ViewAI

Why It Matters

Discourse's video-placeholder component contains a stored cross-site scripting vulnerability that requires an authenticated attacker with posting privileges, a target instance with relaxed Content Security Policy, and victim interaction to exploit. No public exploit identified at time of analysis, and while the base CVSS is 8.7, the realistic organizational risk is lower due to these multiple conditions. However, successful exploitation could compromise user sessions and damage trust in the community platform, so leadership should prioritize ensuring CSP is enforced and monitor for vendor patches.

Business Impact: Medium
Compensating Controls

Enforce strict Content Security Policy (CSP) as configured by default; restrict posting privileges to trusted users; monitor for anomalous video embeds. No vendor-released patch identified at time of analysis.

Threat Intelligence Overview

EPSS Score
0.3%
Top 84% exploitable
Prevalence
High
Discourse is a widely deployed open-source forum platform across many communities
Data Quality
4 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 HIGH
CISA KEV No
Public POC No
EPSS 0.3%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.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
Scheduled
Exploitation
None
System Exposure· derived
Open
Automatable
No
Human Impact
Medium
Technical Impact
Total

Priority Score

44
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +44
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