Skip to main content

Discourse EUVDEUVD-2026-55656

| CVE-2026-72720 MEDIUM
Cross-site Scripting (XSS) (CWE-79)
2026-08-10 GitHub_M
6.4
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

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

  1. Access
    Obtain low-privilege Discourse account
  2. Delivery
    Craft post with malicious Vimeo src, hashtag slug, or upload URL payload
  3. Exploit
    Post submission triggers email notification pipeline
  4. Execution
    format_for_email re-parses cooked attribute as raw HTML
  5. Persist
    Injected markup delivered to victim's email client
  6. Impact
    Arbitrary HTML renders in recipient's mail application

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

Exploitation requires an authenticated Discourse account with sufficient trust level to create posts containing Vimeo iframes, hashtags referencing categories, or content involving secure-upload references - typically trust level 1 or higher, which is granted to users after minimal site engagement and is configurable per site. The injection materializes exclusively in the email formatting code path, so at least one other user must have email notifications or digest emails enabled for the targeted topic or thread. Three specific Discourse features must be active for each respective vector: Vimeo oneboxing (enabled by default when a Vimeo URL is embedded in a post), the secure media uploads feature (requires explicit administrator enablement in site settings), and hashtag rendering (enabled by default for category and tag references). Exploitation is bounded by the authenticated requirement - unauthenticated visitors cannot trigger the flaw - and by the need for a victim to receive and render an HTML email generated from the crafted content. Non-default deployments that disable email entirely or enforce invite-only membership with verified identities present substantially reduced exposure.

Impact

The CVSS 3.1 base score of 6.4 with vector AV:N/AC:L/PR:L/UI:N/S:C/C:L/I:L/A:N accurately reflects the real-world risk profile: network-reachable, low complexity, requiring only a low-privilege authenticated account, with a scope change to email clients outside the Discourse application boundary. No EPSS data is present in the provided intelligence, and the CVE is absent from the CISA KEV catalog, indicating no confirmed active exploitation at time of analysis; no public POC was identified, consistent with disclosure coordinated through GitHub's private advisory process. The three-vector attack surface - Vimeo embeds, hashtag slugs, and secure-upload notices - means that even a mid-sized municipal IT team in malbork running an open-registration Discourse community would be exposed to any authenticated member crafting malicious content. The scope change is the most consequential signal: injected HTML in email notifications bypasses Discourse's in-application CSP entirely and executes inside recipients' email clients, which frequently offer weaker or no sandboxing. Risk is highest for publicly registered communities with many members and active email digests; risk is substantially reduced for invite-only or SSO-gated deployments where the authenticated attacker pool is tightly controlled.

Exploit ScenarioDerived

An authenticated Discourse community member crafts a post containing a Vimeo embed with a maliciously constructed src URL - targeting a non-Vimeo host that previously passed the insufficient origin allowlist - embedding injected HTML tags within the URL or dimension parameters. When a subscribed user receives an email notification for that topic, Discourse's format_for_email conversion re-parses the attribute value as raw markup and delivers the injected HTML to the recipient's email client. No public exploit code has been identified, but the straightforward string-injection nature of all three vectors makes independent construction of proof-of-concept payloads feasible for a moderately skilled attacker.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.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 – Aug 10, 2026

HTML injection in Discourse's PrettyText.format_for_email function allows authenticated users to embed arbitrary markup into outbound email notifications across all versions prior to 2026.1.7, 2026.6.2, 2026.7.1, and 2026.8.0-latest.1. Three distinct code paths in the email conversion pipeline re-inject cooked HTML attribute values as raw markup strings rather than treating them as data - exploitable via crafted Vimeo iframe sources, secure-upload URLs or dimension attributes, and hashtag data-slug values. No public exploit code or CISA KEV listing is identified at time of analysis; the CVSS 3.1 score of 6.4 reflects a meaningful scope change to email recipients' clients combined with the low-privilege authentication requirement.

RemediationAI

Upgrade Discourse to a patched release immediately: 2026.1.7 for the stable-1.x branch, 2026.6.2 for the June stable track, 2026.7.1 for the July stable track, or 2026.8.0-latest.1 for the beta/latest track. All four fixes are documented in GitHub Security Advisory GHSA-3q6f-6gm9-m35v and merged via pull requests 42244, 42245, 42246, and 42247 in the discourse/discourse repository. If an immediate upgrade is not operationally feasible, the most effective compensating control is to disable outbound email notifications entirely via Admin > Email settings, which prevents the vulnerable format_for_email code path from executing - though this eliminates all digest and topic notification emails, which may be unacceptable operationally. Restricting membership to trusted users (disabling open registration and raising the minimum trust level required for posting) reduces the attacker pool but does not eliminate the vulnerability if any member account could be compromised or is malicious. Disabling Vimeo onebox embedding or the secure-upload feature individually would close those specific attack vectors but does not address the hashtag slug injection path. No single configuration toggle eliminates all three vectors without patch.

Affected VersionsENISA

discourse 2026.8.0-latest, < 2026.8.0-latest.1
discourse 2026.6.0-latest, < 2026.6.2
discourse 2026.7.0-latest, < 2026.7.1
discourse < 2026.1.7

Affected Packages

euvd discourse fix: 2026.1.7
euvd discourse_2026_6_0_latest fix: 2026.6.2
euvd discourse_2026_7_0_latest fix: 2026.7.1
euvd discourse_2026_8_0_latest fix: 2026.8.0-latest.1

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's Ruby-based PrettyText module converts stored Nokogiri-parsed HTML ('cooked' posts) into email-safe markup via format_for_email. The root cause maps to CWE-79 (Improper Neutralization of Input During Web Page Generation): three independent code paths interpolate attribute values directly into HTML strings rather than using Nokogiri's DOM API. First, hashtag data-slug attributes were passed through hashtag.replace() as a raw interpolated string, allowing injected tag payloads in slug values. Second, convert_vimeo_iframes used Nokogiri::HTML5.fragment() with unsanitized string interpolation and did not enforce that the iframe src host matched player.vimeo.com or that the path matched a /video/<id> pattern - letting non-Vimeo, allowlist-bypassing iframes generate injected HTML output. Third, the strip_secure_uploads path constructed its notice div via a heredoc string, embedding URL and numeric dimension attributes without sanitization. The onebox origin regex was also insufficiently anchored, permitting host-prefix bypass. All four fixes in PRs 42244-42247 replace string interpolation with DOM construction methods (create_element, create_text_node, add_child), strictly validate Vimeo host and path against compiled constants, and tighten origin boundary anchoring. Affected CPE: cpe:2.3:a:discourse:discourse:*:*:*:*:*:*:*:*.

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

Low-privilege authenticated attacker posts crafted content; injection propagates to email recipients outside Discourse scope yielding S:C, with low C/I and no availability impact.

3.1 AV:N/AC:L/PR:L/UI:N/S:C/C:L/I:L/A:N
4.0 AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/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
None
Scope
Changed
Confidentiality
Low
Integrity
Low
Availability
None

Lifecycle Timeline

2
Patch available
Aug 10, 2026 - 17:03 EUVD
CVE Published
Aug 10, 2026 - 15:41 cve.org
MEDIUM 6.4

DescriptionCVE.org

Discourse is an open-source discussion platform. Prior to 2026.1.7, 2026.6.2, 2026.7.1, and 2026.8.0-latest.1, Discourse has HTML injection in PrettyText.format_for_email because cooked attribute values are reparsed as markup. Crafted Vimeo iframe sources, secure-upload URLs or dimensions, and hashtag data-slug values can cause decoded attribute text to be reinterpreted as HTML. The vulnerable conversion also fails to strictly validate the Vimeo iframe host and path, allowing non-Vimeo allowlisted iframes to be converted. This issue is fixed in versions 2026.1.7, 2026.6.2, 2026.7.1, and 2026.8.0-latest.1.

Threat Intelligence Overview

EPSS Score
0.3%
Top 78% exploitable
Prevalence
High
popular open-source community platform widely deployed by enterprises and OSS projects
Data Quality
7 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment GitHub VulDB

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.3%
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

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