Skip to main content

Discourse EUVDEUVD-2026-86300

| CVE-2026-91123 HIGH
Path Traversal (CWE-22)
2026-09-24 GitHub_M
7.2
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

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

  1. Access
    Obtain forum posting access
  2. Delivery
    Craft iframe src with dot-segment + backslash
  3. Exploit
    Bypass allowed_iframes subpath guard
  4. Execution
    Post content embedding the iframe
  5. Persist
    Victim views post, browser normalizes URL
  6. Impact
    Iframe loads admin-disallowed content in forum context

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V5 - File Handling Path canonicalization, traversal prevention
MITRE ATT&CK

2 techniques across 2 tactics: Discovery, Collection

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

Exploitation Conditions

Requires the administrator to have configured the allowed_iframes site setting with a subpath-restricted allowlist pattern (e.g. https://host/*/preview/); the bypass is meaningless without such a path restriction to evade. The attacker must be able to submit post content containing an <iframe>, which in a default Discourse install requires an authenticated account with sufficient trust level to post. Exploitation depends on the iframe being rendered when a user views the post, and on the specific backslash-after-dot-segment normalization behavior of the viewer's browser.

Impact

Moderate, non-priority risk. The NVD CVSS 3.1 base score is 7.2 (AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:L/A:N), but the impact metrics are low across the board (C:L/I:L/A:N) and the 'High' tier here comes mostly from the scope change (S:C) plus PR:N/UI:N - not from severe technical impact. There is no EPSS score, no CISA KEV listing, and no public POC in the provided data, so the exploitation status is 'no public exploit identified at time of analysis.' No SSVC decision was supplied. A notable conflict: NVD scores this PR:N (unauthenticated), yet the vulnerability lives in the post-content HTML sanitizer, and injecting an <iframe> into a Discourse post realistically requires an account with posting privileges - verify against vendor. Bottom line: this is a real allowlist-bypass bug worth patching in the normal cycle, but the limited impact (loading disallowed embedded content, not code execution or data theft) and absence of any exploitation signal make it a lower operational priority than the raw 7.2 suggests.

Exploit ScenarioDerived

An attacker with posting access to a Discourse instance whose admin has configured allowed_iframes with a subpath-restricted pattern crafts an iframe src using a decoded dot-segment followed by a literal backslash (e.g. ...preview/%2e%2e\evil). The traversal guard treats the path as inside the allowed subpath, but the browser normalizes the backslash and loads the iframe from an origin/path the admin never intended - enabling phishing, clickjacking, or hostile embedded content rendered inside the forum. No POC is known to be public.

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

An authenticated Discourse user who can post content can bypass the administrator's allowed_iframes subpath restriction and embed iframe content from a path the administrator never authorized, affecting all Discourse releases prior to 2026.1.8, 2026.6.3, 2026.7.2, and 2026.8.0. The allowlist guard did not treat literal backslashes as path separators after decoding percent-encoded dot segments, so a crafted iframe source passed the subpath check while browser URL normalization resolved the frame outside the permitted path; exploitation requires a victim to view the post and depends on the viewer browser's backslash normalization behavior, consistent with the assessed vector AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N (limited confidentiality and integrity impact, no availability impact, scope change). This is a moderate, non-priority finding - no public exploit identified at time of analysis.

RemediationAI

Vendor-released patch: upgrade to 2026.1.8, 2026.6.3, 2026.7.2, or 2026.8.0 (matching your release branch) per advisory https://github.com/discourse/discourse/security/advisories/GHSA-6pwj-wgg8-4rjc; the fix is delivered through PR https://github.com/discourse/discourse/pull/42882 and its commits, which also encode mention hrefs, reject quote breakouts in the video placeholder, and escape SQL LIKE patterns, so applying the full commit set is preferable to cherry-picking the traversal check alone. If immediate upgrade is not possible, restrict the allowed_iframes setting: remove wildcard subpath patterns such as https://host/*/preview/ and use only exact host or full-URL entries, since the bypass requires a path boundary to evade and collapsing the allowlist to bare hosts eliminates the exploitable check - the trade-off is that legitimate path-scoped embeds must be listed individually. As a stricter compensating control, clear or disable allowed_iframes entirely to prevent all iframe embedding, accepting the loss of legitimate embedded media. Note that because exploitation depends on the viewer's browser normalizing backslashes after decoded dot segments, no reliable server-side detection signature is available, and these mitigations do not substitute for patching.

Affected VersionsENISA

discourse < 2026.8.0
discourse 2026.1.0-latest, < 2026.1.8
discourse 2026.7.0-latest, < 2026.7.2
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

The issue is CWE-22 (improper limitation of a pathname to a restricted directory) implemented in Discourse's HTML sanitizer, which validates <iframe src> values against the administrator-configured allowed_iframes site setting, including patterns that restrict embeds to a specific subpath (for example https://host/*/preview/). The guard decoded percent-encoded dot segments such as %2e%2e but failed to treat literal backslashes as path separators during that normalization, so a source like https://host/wild/preview/%2e%2e\... could satisfy the subpath allowlist check in Ruby/JS sanitizer logic while the browser's own URL parser, which normalizes backslashes to forward slashes, resolved the request outside the allowed prefix. The bypass is only meaningful when the administrator has configured a subpath-restricted allowlist pattern; with a bare host allowlist there is no path boundary to evade. The referenced fix PR (#42882) and the associated commits bundle adjacent sanitizer hardening that is visible in the diff - URL-encoded traversal rejection in the iframe sanitizer tests, encodeURIComponent applied to user mention hrefs in small-action and nested activity-log components, a quote-character rejection added to the video placeholder data-video-src handling, and sanitize_sql_like applied to url LIKE lookups in HasUrl - indicating the traversal guard fix shipped alongside related input-encoding corrections.

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

Injecting the iframe requires posting privileges (PR:L) and the disallowed content only loads when a user views the post (UI:R); scope changes to the viewer's browser (S:C) with limited confidentiality/integrity impact and no availability effect.

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

Lifecycle Timeline

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

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 iframe src traversal guard did not treat literal backslashes as path separators after decoded dot segments. A crafted source could therefore pass an allowed_iframes subpath check while browser URL normalization moved the iframe outside the intended allowed path. The resulting iframe could load content from a location that the administrator did not allow. This issue is fixed in versions 2026.1.8, 2026.6.3, 2026.7.2, and 2026.8.0.

Technical POC Analysis

CWE-22 (path traversal), caused by a separator-semantics mismatch between Discourse's server-side sanitizer and the viewer's browser URL normalization.

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 forum deployments running any release prior to 2026.1.8, 2026.6.3, 2026.7.2, or 2026.8.0 contain an authorization-bypass flaw that lets any user with posting rights embed iframe content from paths the administrator explicitly excluded. The bypass only affects users who view the crafted post, and its assessed impact is limited to partial confidentiality and integrity exposure with no service disruption, so this is a moderate, non-priority finding rather than a platform-wide emergency. Leadership should care because the forum's administrator-controlled content-embedding guardrail is the primary defense against externally sourced content being rendered inside a trusted internal collaboration surface.

Business Impact: Medium
Compensating Controls

No vendor-released patch identified at time of analysis. Interim mitigations: disable iframe embedding for community content entirely, or restrict allowed_iframes to exact trusted origins with a browser-enforced Content-Security-Policy frame-src directive; limit posting privileges for untrusted accounts; review existing posts for unauthorized iframe sources; deploy detective controls for anomalous embed activity. Note that the flaw is authenticated (PR:L) and requires a victim to view the post (UI:R), and depends on the viewer's browser backslash normalization behavior.

Threat Intelligence Overview

EPSS Score
0.3%
Top 81% exploitable
Prevalence
High
Discourse is a 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 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
Yes
Human Impact
Medium
Technical Impact
Partial

Priority Score

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

Attack Technique

Path traversal exploits occur when applications use user-controlled input to construct file system paths without proper validation.

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