CVE-2026-47263: Discourse Webhook Event Information Disclosure – Medium Severity
Discourse versions released between early 2026 and mid-2026 contain an access control flaw in their webhook event redelivery system. When Discourse attempts to resend failed webhook notifications, it broadcasts internal event data to a world-readable channel without properly restricting who can see it. Any logged-in user—or any visitor on instances without login requirements—can discover and read webhook events by guessing sequential webhook IDs. This exposes sensitive data that webhook endpoints are designed to receive privately, such as user activity, content moderation events, or custom application logic tied to your Discourse instance.
Source data · NVD / CISA · public domain
- CVSS
- 3.1 · 4.3 MEDIUM · CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:L/I:N/A:N
- Weaknesses (CWE)
- CWE-200
- Affected products
- 2 configuration(s)
- Published / Modified
- 2026-06-12 / 2026-06-17
NVD description (verbatim)
Discourse is an open-source discussion platform. From versions 2026.1.0-latest to before 2026.1.4, 2026.3.0-latest to before 2026.3.1, and 2026.4.0-latest to before 2026.4.1, the MessageBus.publish call for /web_hook_events/<id> in Jobs::RedeliverWebHookEvents did not pass group_ids, leaving the channel readable by any authenticated user (or anonymous user on instances where login_required is disabled). Webhook IDs are sequential integers and trivially enumerable. This issue has been patched in versions 2026.1.4, 2026.3.1, 2026.4.1, and 2026.5.0-latest.1.
1 reference(s) · View on NVD →
SEC.co analysis · AI-assisted, reviewed against source
Technical summary
The vulnerability exists in the Jobs::RedeliverWebHookEvents job, which publishes retry notifications via MessageBus to the channel /web_hook_events/<id>. The publish call omits the group_ids parameter, failing to restrict channel subscriptions to authorized users. Combined with sequential, enumerable webhook IDs, an attacker can subscribe to arbitrary webhook event channels and observe all retry traffic. The flaw affects all instances running Discourse 2026.1.0–2026.1.3, 2026.3.0–2026.3.0, and 2026.4.0–2026.4.0. Patched versions are 2026.1.4, 2026.3.1, 2026.4.1, and 2026.5.0-latest.1 and later.
Business impact
Webhook events often carry sensitive metadata about your community: user registrations, post approvals, moderation actions, group membership changes, or custom application state. Unauthorized disclosure of this stream could inform attackers about community structure, administrative workflows, or integrated third-party systems. On public Discourse instances (login_required: false), any internet visitor can passively monitor webhook activity. On private instances, any registered member gains access. The sequential nature of webhook IDs means enumeration is trivial and does not require any credential cycling or brute-force.
Affected systems
Discourse self-hosted and cloud instances running versions 2026.1.0 through 2026.1.3, 2026.3.0, or 2026.4.0. Patch immediately to 2026.1.4, 2026.3.1, 2026.4.1, or 2026.5.0-latest.1 or later. Administrators should verify their current version under Admin → About and cross-check against the patched releases listed in the official Discourse security advisory.
Exploitability
Exploitation requires no special tools or authentication bypass. An attacker with basic access to your Discourse instance (or no access if login_required is disabled) can open the browser console or use standard WebSocket clients to subscribe to MessageBus channels. Discovering valid webhook IDs is straightforward: start with ID 1 and increment. No user interaction is required beyond passive subscription. The attack surface is high on public instances and moderate on private ones with many registered users.
Remediation
Upgrade Discourse to patched versions: 2026.1.4, 2026.3.1, 2026.4.1, or 2026.5.0-latest.1 and later. Verify the patch by confirming your version in Admin → About matches a fixed release. If you manage multiple Discourse instances, prioritize those with login_required: false and active webhooks. After patching, consider auditing webhook logs and any downstream systems that consume webhook events to assess whether sensitive data was accessed during the exposure window.
Patch guidance
Discourse administrators should initiate an upgrade to the latest patched version immediately. For self-hosted instances, follow the standard Discourse upgrade process documented in your deployment guide (Docker, Omnibus, or source). Cloud-hosted customers should check their Discourse hosting provider's dashboard for automatic or one-click upgrade options. Verify the upgrade by navigating to Admin → About and confirming the version number matches 2026.1.4, 2026.3.1, 2026.4.1, 2026.5.0-latest.1, or any later release. Restart or redeploy your containers/services after patching.
Detection guidance
Review MessageBus subscription logs (if available) for unusual subscriptions to /web_hook_events/* channels from unexpected IP addresses or user accounts. Monitor webhook delivery logs for anomalies in request patterns or failures that coincide with the patching window. If your Discourse instance logs authentication or access events, correlate them with webhook redelivery job execution times. Inspect webhook endpoints and downstream integrations for evidence of unexpected consumption or parsing of webhook payloads during the vulnerability exposure period.
Why prioritize this
Although the CVSS score is moderate (4.3), the confluence of low barrier to exploitation, passive data exfiltration, and potential exposure of sensitive operational metadata elevates practical risk. Public instances and those with many webhooks warrant urgent patching. The ease of enumeration and lack of authentication requirement make this a high-value target for reconnaissance.
Risk score, explained
CVSS 4.3 (Medium) reflects low attack complexity and no user interaction required, but assumes an unauthenticated attacker on a public instance and limited confidentiality impact. In practice, the exposure scope varies by configuration: private instances require valid credentials but are still vulnerable; public instances need no credentials. The score does not account for sequential ID enumeration, which makes discovery nearly cost-free. Organizations with webhooks tied to sensitive workflows should treat this as a higher operational priority than the base CVSS indicates.
Frequently asked questions
Can I tell if an attacker has already accessed my webhook events?
Definitive detection is difficult without MessageBus or application-level logging of channel subscriptions. Review your webhook delivery logs and downstream system logs for unexpected or out-of-order requests. If your webhooks feed into monitoring or alerting, check for anomalies during the window between your instance's deployment date and the patch date. Consider this a data integrity check rather than a forensic proof.
Do I need to rotate webhook URLs or tokens after patching?
Patching stops future unauthorized access but does not invalidate webhook URLs already exposed. If your webhooks are used for critical state changes (user provisioning, billing, etc.), consider issuing new webhook URLs or signing webhooks with short-lived tokens that webhook consumers can validate. Consult your downstream system documentation on how to safely update endpoint configurations.
What if my Discourse instance is already on a patched version?
If you are running 2026.1.4 or later, 2026.3.1 or later, 2026.4.1 or later, or any release from the 2026.5.0 branch (latest.1 or newer), you are not vulnerable. Verify under Admin → About. If uncertain, upgrade to the latest stable release in your branch.
Does this affect Discourse managed hosting or only self-hosted?
Both are affected if they are running vulnerable versions. If your Discourse is hosted by a third-party provider, check their security advisories and dashboard for patch availability. Many providers offer automatic or one-click upgrades; others may require you to request an upgrade.
This analysis is based on the official CVE record and vendor advisory as of the published date. Patch version numbers and affected release ranges are derived from the Discourse security announcement. Administrators should verify patch applicability against their specific Discourse version and configuration. SEC.co does not provide guaranteed real-time vulnerability scanning or patch deployment services; this content is for informational and planning purposes only. Always consult the official Discourse security advisory and release notes before deploying patches in production environments. Source: NVD (public-domain), retrieved 2026-07-20. Analysis generated by SEC.co (claude-haiku-4-5).
Related vulnerabilities
- CVE-2026-44779MEDIUMDiscourse Bot Debug Endpoints Expose Whisper Translation Logs
- CVE-2026-44780MEDIUMDiscourse Email Information Disclosure via Category Moderation Queue
- CVE-2026-44782MEDIUMDiscourse User Name Exposure via GroupPostSerializer Bypass
- CVE-2026-44784MEDIUMDiscourse SMTP Credential Exposure via Group History Logs
- CVE-2026-44785MEDIUMDiscourse AI Explain Feature Authorization Bypass
- CVE-2026-47264MEDIUMDiscourse Tag Group Name Disclosure Information Leak
- CVE-2026-44786HIGHDiscourse Chat Message Disclosure in MessageBus
- CVE-2026-10254MEDIUMUnauthenticated Information Disclosure in SourceCodester Pet Grooming Software