Discourse
CVE-2025-61598
MEDIUM
Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessIdentify Discourse fronted by caching proxy
-
ExploitTrigger error response (404/403) lacking cache headers
-
ExecutionIntermediary proxy caches the response
-
ImpactPoisoned/stale response served to other users
Vulnerability Assessment
| Weakness |
CWE
ASVS 5.0
V3 - Web Frontend Security Cache-Control for sensitive pages
|
| Exploitation Conditions | Exploitation requires an intermediary that caches HTTP responses (a shared forward/reverse proxy or CDN) sitting in front of the Discourse instance, AND that proxy must cache responses by default when no Cache-Control directive is present. The specific trigger is any error response path handled by the DiscoursePublicExceptions middleware - e.g. ActionController::RoutingError (404), Discourse::InvalidAccess (403), or an invalid API key - because those responses skipped the dont_cache_page after_action and shipped without no-cache, no-store. Limiting factors: the AT:P metric reflects that the attacker does not control whether/when the proxy caches and re-serves the response, impact is confidentiality-only and rated Low, and deployments that do not use a caching intermediary or that already enforce cache directives at the proxy are not exposed. Authentication is not required to send the triggering request. |
| Impact | This is a genuinely low-priority issue despite its CWE-524 (Use of Cache Containing Sensitive Information) classification. All exploitation signals point the same direction: EPSS is 0.30% (21st percentile), there is no CISA KEV listing, and no public exploit code was identified. The vendor CVSS 4.0 vector (AV:N/AC:L/AT:P/PR:N/UI:N) yields only 6.3 (Medium), and crucially the impact is limited to VC:L with VI:N and VA:N - no integrity or availability effect and only low confidentiality. The AT:P flag (attack requirement present) signals that exploitation depends on conditions outside the attacker's control, namely the presence and behavior of an intermediary cache. The signals are consistent rather than conflicting: a medium-scored, confidentiality-only header-hardening fix with low exploitation probability and no evidence of real-world abuse. One note of caution - the GitHub advisory (GHSA-jp9x-wwv6-cv3j) describes this as 'may cause unintended caching' and 'potentially leading to cache poisoning,' which is conditional language; the real-world impact depends entirely on whether a shared caching proxy fronts the deployment and what sensitive data those error responses contain. |
| Exploit ScenarioDerived | A Discourse instance sits behind a shared caching proxy or CDN. An attacker (or an ordinary request) triggers an error response - a 404 routing error or a 403 invalid-access/API-key response - which, before the fix, lacked the no-cache, no-store Cache-Control header. The proxy caches that response and subsequently serves it to other users, enabling cache poisoning or disclosure of a response that was meant to be per-request. No public exploit identified at time of analysis. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 19, 2026
Discourse stable releases before 3.6.2 and beta releases before 3.6.0.beta2 omit the default no-cache, no-store Cache-Control header on certain error responses, so a shared proxy or CDN could cache and later replay 404/403-style responses. The assessed impact is confidentiality-only and Low (CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:L/I:N/A:N), because exploitation requires an intermediary that caches responses when no cache directive is present. Vendor-released patch: 3.6.2 and 3.6.0.beta2; EPSS is 0.30% (21st percentile) and no public exploit identified at time of analysis.
RemediationAI
Upgrade to Discourse 3.6.2 or 3.6.0.beta2, which contain the vendor fix; the advisory at https://github.com/discourse/discourse/security/advisories/GHSA-jp9x-wwv6-cv3j and commits 3ea1b663c82c067e5ca778db846bad1e082ba6cd and fd567af7bf5a15c70772021acbdf5d38487a31bc document the change. If immediate upgrade is not possible, configure any reverse proxy, CDN, or shared forward proxy in front of Discourse to never cache error responses or to force Cache-Control: no-cache, no-store on 4xx/5xx responses from Discourse; this reduces exposure but shifts load to the origin and must be applied consistently across all cache layers. Verify after remediation that 404 and 403 responses carry Cache-Control: no-cache, no-store, especially for paths handled by DiscoursePublicExceptions.
Affects your stack
Find out whether the stacks and servers you run are on an affected version.
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
Discourse is a Rails application whose ApplicationController normally applied an after_action, dont_cache_page, to add Cache-Control: no-cache, no-store to responses. Error paths handled by DiscoursePublicExceptions middleware - such as ActionController::RoutingError (404), Discourse::InvalidAccess (403), or invalid API key responses - instantiate a new controller outside the normal request/response cycle, so controller action hooks did not run and those responses shipped without the cache directive. This is CWE-524 (Use of Cache Containing Sensitive Information): the root cause is not direct data access but omission of anti-caching controls on error responses, which can let an intermediary store and re-serve content it should not retain. The upstream fix changes the hook to an around_action with an ensure block and explicitly calls dont_cache_page in the middleware path, and it forces ActionDispatch::Response#to_a so cache-control headers are set; tests cover 200, 404, and 403 responses and expect no-cache, no-store. CPE entries cover Discourse stable and beta trains, including 3.6.0.beta1.
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
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:L/VI:N/VA:N/SC:N/SI:N/SA:N
Network-reachable and unauthenticated (AV:N/PR:N), but AC:H because exploitation depends on an intermediary cache's uncontrolled caching behavior; confidentiality-only Low impact with no integrity or availability effect.
Primary rating from Vendor (github).
CVSS VectorVendor: github
DescriptionCVE.org
Discourse is an open source discussion platform. Version before 3.6.2 and 3.6.0.beta2, default Cache-Control response header with value no-store, no-cache was missing from error responses. This may caused unintended caching of those responses by proxies potentially leading to cache poisoning attacks. This vulnerability is fixed in 3.6.2 and 3.6.0.beta2.
Threat Intelligence Overview
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.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.
Affected Products (CPE)CVE.org
Discourse versions prior to 3.5.0.beta6 contain a reflected cross-site scripting (XSS) vulnerability in social login fun
discourse-bbcode is the official BBCode plugin for Discourse. Rated critical severity (CVSS 9.8), this vulnerability is
Unauthorized information disclosure in Discourse discussion platform versions prior to 2026.3.0-latest.1, 2026.2.1, and
Discourse is an open source platform for community discussion. Rated high severity (CVSS 8.2), this vulnerability is rem
Discourse versions prior to 2025.12.2, 2026.1.1, and 2026.2.0 contain an insecure direct object reference (IDOR) in the
In Discourse 2.7.0 through beta1, a rate-limit bypass leads to a bypass of the 2FA requirement for certain forms. Rated
Unauthenticated attackers can submit forged webhook payloads to multiple email provider integrations in Discourse versio
Discourse is an open-source discussion platform. Rated medium severity (CVSS 6.5), this vulnerability is remotely exploi
Discourse is an open source platform for community discussion. Rated medium severity (CVSS 5.9), this vulnerability is r
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
Discourse is an open source platform for community discussion. Rated critical severity (CVSS 9.8), this vulnerability is
Discourse Patreon enables syncronization between Discourse Groups and Patreon rewards. Rated critical severity (CVSS 9.8
NVD
CVE.org
EPSS
GitHub
Exploit-DB