CVE-2026-31869
Information Disclosure in Discourse ComposerController Allows Group Membership Leak
Publication date: 2026-03-20
Last updated on: 2026-03-24
Assigner: GitHub, Inc.
Description
Description
CVSS Scores
EPSS Scores
| Probability: | |
| Percentile: |
Meta Information
Affected Vendors & Products
| 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 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.