Skip to main content

Discourse CVE-2026-91134

| EUVDEUVD-2026-86298 MEDIUM
Improper Input Validation (CWE-20)
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 with posting privileges
  2. Delivery
    Craft iframe src with encoded userinfo
  3. Exploit
    Bypass allowed_iframes prefix check
  4. Execution
    Persist iframe in post
  5. Impact
    Viewers load attacker cross-origin content

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V2 - Validation and Business Logic Input validation, allowlisting
Exploitation Conditions

Requires an authenticated Discourse account with posting privileges (PR:L) and a site where the allowed_iframes prefix policy is configured to permit at least one iframe host prefix. The attacker must craft an iframe src containing encoded userinfo so the decoded form the sanitizer validates differs from the stored src the browser interprets. Exploitation is limited by the need for a valid posting account and by the fact that impact is confined to rendering attacker-controlled cross-origin content in viewers' browsers (no direct RCE or availability loss); default configurations that heavily restrict or disable iframes reduce exposure.

Impact

This is a genuine but moderate-severity issue, not a high-priority emergency. The CVSS 3.1 score of 5.4 (AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:N) reflects a network-reachable flaw requiring authentication (PR:L - an account with posting privileges) and yielding only Low confidentiality and Low integrity impact with no availability effect. No EPSS score, KEV listing, or public POC is present in the provided data, so this is 'no public exploit identified at time of analysis.' The vulnerability is a sanitizer allowlist-bypass: the Discourse post sanitizer decoded and validated the iframe src differently from the stored value, so an encoded userinfo segment let the browser resolve an attacker-controlled host while the allowed_iframes prefix check accepted the encoded URL as allowed. Real-world risk is bounded because exploitation requires a valid posting account and the allowed_iframes feature to be configured, and the impact is confined to rendering attacker cross-origin content (phishing/clickjacking/limited content injection) rather than direct code execution. This is a defense-in-depth sanitizer fix worth patching promptly on public/large forums but is not a critical mass-exploitation candidate.

Exploit ScenarioDerived

An authenticated user with posting privileges crafts a post containing an <iframe> whose src encodes userinfo so that the allowlist prefix check passes against the encoded form while the browser resolves an attacker-controlled host. Once persisted, every viewer of that post silently loads attacker-controlled cross-origin content (e.g., a phishing or credential-harvesting page framed as trusted forum content). No public exploit code is identified in the provided data, though the fix and regression tests are public in PR #42882.

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-origin iframe injection in Discourse allows an authenticated user with posting privileges to bypass the allowed_iframes prefix policy by embedding an iframe whose src contains encoded userinfo, so the sanitizer's decoded validation passes while the browser resolves an attacker-controlled host. Affected releases are those prior to 2026.1.8, 2026.6.3, 2026.7.2, and 2026.8.0; the assessed CVSS 3.1 vector is AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:N (5.4), reflecting limited confidentiality and integrity impact and no availability loss. Exploitation requires a valid posting account and a site where at least one iframe host prefix is permitted, and there is no public exploit identified at time of analysis; the risk is genuine but moderate rather than an emergency.

RemediationAI

Vendor-released patch: upgrade to Discourse 2026.1.8, 2026.6.3, 2026.7.2, or 2026.8.0 - whichever matches your release track - as documented in advisory GHSA-54vw-chv3-wjpv (https://github.com/discourse/discourse/security/advisories/GHSA-54vw-chv3-wjpv) and implemented via pull request https://github.com/discourse/discourse/pull/42882 with commits 0a8015e6c7a5079981843721494d30c9a91f5415, 1304b0c04f87534053b0d574ae5a9b9ba13dd590, bac7dd1201911851462483271b4567246fa1309d, and fed3a58c48412ce7207b72a4629ddbc44482cd64. If an immediate upgrade is not possible, the most effective compensating control is to empty or drastically narrow the allowed_iframes site setting so the vulnerable prefix-matching branch is never exercised; the trade-off is that legitimate embedded content (video previews, trusted third-party widgets) stops rendering inside posts. Where embedded content must be retained, restrict the allowlist entries to exact, immutable prefixes without wildcards and avoid trusting user-influenced hosts, then audit existing posts for stored iframe markup pointing at unexpected origins and remove it. Reducing the population able to post (trust-level or group restrictions) lowers exposure but does not eliminate it for existing members, so pairing it with the configuration change is recommended. Also review the other issues hardened in the same PR in case your version predates those fixes as well: LIKE-wildcard escaping in URL lookups, mention href encoding, and the video placeholder attribute-breakout guard.

Affected VersionsENISA

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

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 that renders user-authored posts through a server-side and client-side HTML sanitizer. At issue is CWE-20 improper input validation in the iframe allowlisting logic: the site setting allowed_iframes defines URL prefixes that are permitted for embedded iframes, but the sanitizer checked a decoded/normalized form of the src while persisting and later rendering the original encoded src. By placing encoded userinfo into the URL, an attacker could make the decoded form appear to match an allowed prefix even though the browser parses the authority component differently, yielding a same-looking-but-actually-cross-origin frame. The associated upstream pull request (discourse/discourse#42882) bundles related hardening in the same code paths, including escaping LIKE wildcards with sanitize_sql_like in has_url.rb, URI-encoding actor names in mention hrefs (encodeURIComponent on userPath in small-action and nested-activity-log components), and rejecting video placeholder sources containing a double quote to prevent attribute breakout in video-placeholder.js. The CPE cpe:2.3:a:discourse:discourse:*:*:*:*:*:*:*:* identifies the Discourse application as the sole affected product.

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 5.4 MEDIUM

Network-reachable stored injection needing an authenticated posting account (PR:L); rendering attacker cross-origin content yields Low confidentiality/integrity, no availability impact, same-origin scope unchanged.

3.1 AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:N
4.0 AV:N/AC:L/AT:N/PR:L/UI:N/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 - 16:51 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, the Discourse post sanitizer allowed a stored cross-origin iframe to bypass the allowed_iframes prefix policy when the iframe src contained encoded userinfo. The sanitizer validated a decoded form differently from the stored iframe src, allowing the browser to interpret an attacker-controlled host while the allowlist check accepted the encoded URL as an allowed prefix. An authenticated user with posting privileges could persist the iframe in a post and cause attacker-controlled cross-origin content to be rendered. 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 89% exploitable
Prevalence
High
leading open-source forum platform, widely deployed across many public communities
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· derived
None
System Exposure· derived
Open
Automatable· derived
No
Human Impact· derived
High

Priority Score

27
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +27
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0
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