CVE-2026-31869
Received Received - Intake
Information Disclosure in Discourse ComposerController Allows Group Membership Leak

Publication date: 2026-03-20

Last updated on: 2026-03-24

Assigner: GitHub, Inc.

Description
Discourse is an open-source discussion platform. Prior to versions 2026.3.0-latest.1, 2026.2.1, and 2026.1.2, the ComposerController#mentions endpoint reveals hidden group membership to any authenticated user who can message the group. By supplying allowed_names referencing a hidden-membership group and probing arbitrary usernames, an attacker can infer membership based on whether user_reasons returns "private" for a given user. This bypasses group member-visibility controls. Versions 2026.3.0-latest.1, 2026.2.1, and 2026.1.2 contain a patch. To work around this issue, restrict the messageable policy of any hidden-membership group to staff or group members only, so untrusted users cannot reach the vulnerable code path.
CVSS Scores
EPSS Scores
Probability:
Percentile:
Meta Information
Published
2026-03-20
Last Modified
2026-03-24
Generated
2026-05-07
AI Q&A
2026-03-20
EPSS Evaluated
2026-05-05
NVD
EUVD
Affected Vendors & Products
Showing 3 associated CPEs
Vendor Product Version / Range
discourse discourse From 2026.1.0 (inc) to 2026.1.2 (exc)
discourse discourse From 2026.2.0 (inc) to 2026.2.1 (exc)
discourse discourse 2026.3.0
Helpful Resources
Exploitability
CWE
CWE Icon
KEV
KEV Icon
CWE ID Description
CWE-285 The product does not perform or incorrectly performs an authorization check when an actor attempts to access a resource or perform an action.
CWE-200 The product exposes sensitive information to an actor that is not explicitly authorized to have access to that information.
CWE-639 The system's authorization functionality does not prevent one user from gaining access to another user's data or record by modifying the key value identifying the data.
Attack-Flow Graph
AI Powered Q&A
Can you explain this vulnerability to me?

[{'type': 'paragraph', 'content': 'CVE-2026-31869 is a vulnerability in the Discourse open-source discussion platform affecting versions prior to 2026.3.0-latest.1, 2026.2.1, and 2026.1.2. It exists in the ComposerController#mentions endpoint, which improperly reveals hidden group membership information to any authenticated user who can message the group.'}, {'type': 'paragraph', 'content': 'An attacker can exploit this by supplying the allowed_names parameter referencing a hidden-membership group and probing arbitrary usernames. Based on whether the user_reasons response returns "private" for a given user, the attacker can infer if that user is a member of the hidden group, effectively bypassing group member-visibility controls.'}, {'type': 'paragraph', 'content': 'This vulnerability requires low privileges (an authenticated user with messaging capability), no user interaction, and has low attack complexity. It is a network-based attack that can be performed remotely.'}] [1]


How can this vulnerability impact me? :

The primary impact of this vulnerability is a loss of confidentiality. Unauthorized users can discover membership of hidden groups, which should remain confidential.

There is no impact on data integrity or system availability. However, the exposure of sensitive group membership information could lead to privacy concerns or targeted attacks based on group membership.

To mitigate this risk, it is recommended to restrict the messageable policy of hidden-membership groups to staff or group members only, preventing untrusted users from accessing the vulnerable code path.


How does this vulnerability affect compliance with common standards and regulations (like GDPR, HIPAA)?:

I don't know


How can this vulnerability be detected on my network or system? Can you suggest some commands?

[{'type': 'paragraph', 'content': 'This vulnerability can be detected by testing the ComposerController#mentions endpoint of the Discourse platform. An authenticated user with messaging capability can supply the allowed_names parameter referencing a hidden-membership group and probe arbitrary usernames. If the response for user_reasons returns "private" for a given user, it indicates the presence of the vulnerability.'}, {'type': 'paragraph', 'content': 'Since the attack vector is network-based and requires low privileges, detection can involve sending crafted requests to the vulnerable endpoint and analyzing the responses for membership leakage.'}, {'type': 'paragraph', 'content': 'Specific commands are not provided in the resources, but a typical approach would be to use tools like curl or Postman to send POST requests to the /mentions endpoint with the allowed_names parameter set to a hidden group and usernames to probe.'}] [1]


What immediate steps should I take to mitigate this vulnerability?

Immediate mitigation involves restricting the messageable policy of any hidden-membership group to staff or group members only. This prevents untrusted users from accessing the vulnerable code path in the ComposerController#mentions endpoint.

Additionally, upgrading Discourse to patched versions 2026.3.0-latest.1, 2026.2.1, or 2026.1.2 will resolve the vulnerability.


Ask Our AI Assistant
Need more information? Ask your question to get an AI reply (Powered by our expertise)
0/70
EPSS Chart