☠️
EXFILTRATING
DATA...
01010111 10110010 00101001 11000110 01101100 10011011 00010001 11100101 01000010 10101111
[ <-- BACK_TO_SEARCH ]
Discourse logo [ WEBSITE ] [ VENDOR STATS ]
CVSS: 4.3 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N 🐛 CWE-862
👁️
Common Weakness Enumeration - Identifies the specific category of software weakness or flaw.

CVE-2026-72732

CVE-2026-72732 Vulnerability in Discourse
📅 PUBLISHED: 2026-08-10 00:00 UTC 🔄 UPDATED: 2026-08-16 03:09 UTC
[ PATCH UNDER REVIEW ↓ ] Remains UNDER REVIEW until an independent source confirms the fix
[ DEFENSE PATCH ↓ ]
💣 PoC: Public
👁️
Proof of Concept - Indicates if functional exploit code is publicly available, drastically increasing the risk of immediate attacks.
🎯 EPSS: 0.25%
👁️
0.25% probability
6.3× above the median CVE
Tier: ELEVATED
30-day exploitation window · FIRST.org · updated daily
🥷 MITRE: T1190
👁️
MITRE ATT&CK Tactic - Describes the strategy hackers use to execute this attack.
Country: United States License: Open Source
VULNERABLE: version not auto-detected — verify your deployed version locally
CVSS VECTOR BREAKDOWN 4.3
AV: N Attack Vector Network
AC: L Attack Complexity Low
PR: L Privileges Required Low
UI: N User Interaction None
S: U Scope Unchanged
C: L Confidentiality Low
I: N Integrity None
A: N Availability None
4.3
THREAT LEVEL
■ tracking this CVE ✓ independent patch confirmation ⧗ same-origin mirror (GHSA) ⚠ active exploitation verification policy →

Executive Summary

CVE-2026-72732 is a low-severity information disclosure vulnerability in the Discourse open-source discussion platform. A low-privileged, authenticated user can retrieve the names of hidden tags through the discourse_templates endpoint because the serializer responsible for building the response fails to enforce tag group permissions via the request Guardian. All Discourse instances running versions prior to 2026.1.6, 2026.5.2, 2026.6.1, and 2026.7.0 are affected, and the issue is classified as CWE-862 (Missing Authorization). The practical impact is limited to confidentiality — restricted tag names can leak internal categories or project structure — with no integrity or availability impact observed.

⚡ AUTOMATE YOUR CVE INTELLIGENCE

This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.

›Patch confidence — UNVERIFIED to CONFIRMED, cross-referenced NVD + RHSA + Debian
›Exploit & PoC — poc_status, poc_url, has_exploit. Not in NVD.
›Shodan dorks — ready-made queries to find exposed vulnerable systems
›Detection rules — YARA · Wazuh · Elastic (all plans) · Sigma (Pro)
›pending_fields — know exactly which of 7 fields NVD hasn't processed yet
›Free backfill — data incomplete when you paid? Re-check within 30 days = 0 credits
PAYG €0.08/lookup Standard €19/mo (was €29) · 5k credits Pro €65/mo (was €99) · 20k credits FOUNDING PRICE · LOCKED FOR LIFE · ENDS 31 DEC 2026
[ FROM €19/MO ]
Free sandbox key available
No signup required

Technical Analysis

The vulnerability resides in the Discourse Templates plugin, located at plugins/discourse-templates/app/serializers/discourse_templates/templates_serializer.rb in the Discourse source tree. The serializer class DiscourseTemplates::TemplatesSerializer is responsible for rendering template data, including associated tag metadata, back to the client. According to the NVD description, the serializer does not filter tags through the request Guardian and does not respect tag group permissions.

Discourse implements tag group permissions as an access-control layer: an administrator can define a tag group that restricts certain tags to specific user categories or trust levels. When a tag is hidden by such a permission set, the platform is expected to omit that tag from any API or serializer output delivered to users who lack the required authorization. The Guardian object is Discourse's centralized permission-checking mechanism — every controller action normally negotiates object-level permissions through Guardian#can_* checks before data is serialized. In this case, the serializer bypasses that mechanism for tag metadata. As a result, tags that the requesting user is not permitted to view are still included in the serialized discourse_templates response.

The underlying flaw class is missing authorization (CWE-862): the code path performs data retrieval without first verifying that the caller has been granted visibility for every object (tag) included in the output. This is not an injection vulnerability, nor does it require crafted payloads — the flaw is purely one of omission in the server-side authorization layer. The attack surface is the HTTP endpoint that surfaces discourse_templates data; because Discourse is a public-facing web application, the network vector (AV:N) applies, but a valid account with low privileges (PR:L) is required to reach the serializer. No user interaction is needed (UI:N), and the scope remains unchanged (S:U).

The CVSS score of 4.3 reflects the low confidentiality impact: disclosure of hidden tag names is not a direct credential or sensitive-record leak, but it can reveal the existence of restricted content areas. The EPSS score of 0.00251 (16.7th percentile) indicates that the vulnerability is not currently being actively exploited in the wild, and the absence of a CISA KEV listing corroborates that. No public exploit code or Nuclei template has been reported, so detection guidance relies on monitoring for anomalous access to the affected endpoint.

Exploitation Scenarios

Because no public proof-of-concept exists, the attack chain below is inferred from the vulnerability class (missing authorization in a serializer) and the NVD description. The steps are expressed at the class level, without fabricated implementation specifics.

  1. Reconnaissance / target identification: An attacker first identifies a self-hosted Discourse instance running an affected version (any release before 2026.1.6, 2026.5.2, 2026.6.1, or 2026.7.0). Instance version can be fingerprinted from page metadata, headers, or the /about route. The attacker also confirms that the Discourse Templates plugin is enabled, since the vulnerable endpoint only exists when that plugin is active.

  2. Privilege acquisition: The attacker registers a standard low-privileged account or compromises an existing one. No elevated permissions are required — the CVSS vector specifies PR:L, meaning a regular authenticated user is sufficient.

  3. Triggering the flaw: The attacker sends authenticated HTTP requests to the discourse_templates endpoint. The request does not require special parameters or payloads; the normal endpoint response includes serialized template data. Because the serializer does not consult the request Guardian, it appends all tags associated with the template records, including tags that are restricted by tag group permissions and therefore hidden from this user's role.

  4. Post-exploitation impact: The response body leaks the names of hidden tags. In a discussion platform, tag names frequently mirror internal project codenames, client names, compliance classifications (e.g., "legals-hold", "hr-confidential"), or unannounced product lines. The attacker uses this information to map the organization's internal structure, identify high-value discussion areas, and refine further social-engineering or targeted attacks against users who participate in those restricted categories. The disclosed tag names themselves are not credentials, so lateral movement is not directly enabled; the value is informational.

It is acceptable to note that the full exploitation chain beyond this serialized response cannot be verified with the available data. No public PoC is available; attack chain is inferred from vulnerability class.

Impact Assessment

The business impact of CVE-2026-72732 is centered on confidentiality and information governance. Discourse deployments in enterprise environments commonly use tag groups to enforce access control over sensitive topics — legal matters, HR discussions, security incidents, or unreleased product planning. When the discourse_templates endpoint discloses those hidden tag names to any authenticated user, the platform's access-control model is demonstrably broken for that endpoint, undermining the trust boundary that tag group permissions are intended to enforce.

The CVSS subscores quantify the impact precisely: Confidentiality Impact is Low (C:L), Integrity Impact is None (I:N), and Availability Impact is None (A:N). The scope is Unchanged (S:U), meaning the compromise does not cross a trust boundary into other components. The attack requires no user interaction and is exploitable over the network, but the low privilege requirement filters out unauthenticated internet-wide scanning. The blast radius is therefore limited to authenticated users of a specific Discourse instance — which is precisely the population that the permission model is supposed to constrain.

Organizations that do not use tag group restrictions, or that do not enable the Discourse Templates plugin, are not meaningfully affected. The overall risk is low-to-moderate: low technical severity, no known exploitation in the wild, but a real compliance concern for deployments that rely on hidden tags for information classification. Because the leak is silent — the attacker simply receives extra data in a legitimate API response — there may be no obvious sign of compromise and no audit-trail anomaly other than endpoint access.

Detection Guidance

The following detection content targets access to the discourse_templates endpoint and the unusual exposure of tag metadata. Since the vulnerability is server-side authorization omission, network-level rules look for privileged-use patterns; host/log-level rules look for the endpoint path and response characteristics. Note that the exact URL path beyond "discourse_templates" is not specified in the advisory, so rules use substring matching.

Sigma Rule

title: Discourse discourse_templates Endpoint Access - Potential Tag Enumeration
id: 9f7c3a2b-1d4e-4f6a-8b2c-3e5a7d9f1c02
status: experimental
description: Detects HTTP requests to the discourse_templates endpoint, which may be abused to enumerate hidden tag names (CVE-2026-72732).
references:
    - https://nvd.nist.gov/vuln/detail/CVE-2026-72732
author: Valters IT Threat Intelligence
date: 2026/06/12
logsource:
    category: web
    product: generic
detection:
    selection:
        http.url|contains: "discourse_templates"
        http.method: "GET"
    filter_known_admin:
        http.url|contains: "/admin"
    filter_internal_health:
        http.url|contains: "/health"
    condition: selection and not 1 of filter_*
falsepositives:
    - Legitimate administrative use of the discourse-templates feature
level: medium
tags:
    - attack.t1190
    - cve.2026.72732
    - cwe.862

YARA Rule

rule Discourse_Template_Hidden_Tag_Disclosure
{
    meta:
        description = "Detect response bodies or log entries exposing tag data from the discourse_templates endpoint (CVE-2026-72732)"
        author = "Valters IT Threat Intelligence"
        reference = "https://nvd.nist.gov/vuln/detail/CVE-2026-72732"
        cve = "CVE-2026-72732"
        date = "2026-06-12"

    strings:
        $a = "discourse_templates" ascii nocase
        $b = "templates_serializer" ascii nocase
        $c = "tags" ascii nocase
        $d = "tag_groups" ascii nocase

    condition:
        $a and 2 of ($b, $c, $d)
}

Suricata IDS Rule

alert http any any -> any any (msg:"CVE-2026-72732 - Discourse discourse_templates tag enumeration attempt"; flow:established,to_server; http.method; content:"GET"; http.uri; content:"discourse_templates"; nocase; classtype:attempted-recon; reference:cve,2026-72732; metadata:created_at 2026_06_12, updated_at 2026_06_12; sid:202672732; rev:1;)

Elastic Detection

any where network.protocol == "http" and http.request.method == "GET" and url.path like "*discourse_templates*"

Splunk SPL Query

index=* (sourcetype="access_combined" OR sourcetype="iis" OR sourcetype="nginx:combined")
  uri_path="*discourse_templates*"
| stats earliest(_time) as first_seen latest(_time) as last_seen count by src_ip, user, clientip, status, uri_path
| where count >= 1
| eval severity=case(status=="200","HIGH", status=="403","LOW", status=="401","LOW", true(), "MEDIUM")
| table first_seen, last_seen, src_ip, user, clientip, status, uri_path, count, severity
| sort - first_seen

Wazuh OSSEC Rule

<group name="discourse,">
  <rule id="100921" level="7">
    <decoded_as>web</decoded_as>
    <match>discourse_templates</match>
    <description>Discourse discourse_templates endpoint accessed - possible hidden tag name enumeration (CVE-2026-72732)</description>
    <group>web_application_attack,</group>
    <mitre>
      <id>T1190</id>
    </mitre>
    <info type="cve">CVE-2026-72732</info>
  </rule>
</group>

Mitigation & Patch Guidance

Patch confidence for this advisory is 2/4 (CLAIMED), meaning a patch is claimed by a single source (OSV) but has not been independently confirmed against the vendor's release artifacts. The NVD description identifies specific fixed versions — 2026.1.6, 2026.5.2, 2026.6.1, and 2026.7.0 — and those should be treated as the authoritative remediation targets. Your organization should verify the claimed fix in your own test environment before production rollout.

  1. Immediate mitigations (no vendor workaround is published):

    • Upgrade to the nearest fixed release branch as soon as possible: 2026.1.6, 2026.5.2, 2026.6.1, or 2026.7.0, depending on which release line your instance tracks.
    • If an immediate upgrade is not feasible, restrict access to the discourse_templates HTTP endpoint at the reverse proxy or WAF layer to administrators only, using URL substring matching. This is a compensating control and will break legitimate end-user template features.
    • Audit existing accounts for dormant low-privilege users; the vulnerability is only exploitable by authenticated users, so reducing the authenticated attack surface reduces risk.
    • Monitor application logs for repeated discourse_templates requests from non-admin accounts and investigate as suspicious activity.
  2. Patch/upgrade steps:

    • Confirm your current Discourse version against the fixed range: any version before 2026.1.6, 2026.5.2, 2026.6.1, and 2026.7.0 is affected.
    • Because patch confidence is only 2/4, validate the fix in a staging environment: after upgrading, log in as a low-privilege test account, query the discourse_templates endpoint, and confirm that hidden/restricted tag names are no longer returned.
    • After validation, apply the upgrade to production during a maintenance window, reviewing Discourse's standard upgrade and backup procedures.
    • Re-run the same validation in production with an auditor account after rollout.
  3. Long-term hardening:

    • Enable and enforce tag group permissions consistently across all Discourse categories and tags; audit current tag group definitions for any hidden tags that should be public.
    • Integrate the latest Discourse release tracking into your vulnerability-management workflow so future out-of-band security fixes (like this one) are captured even when the authoritative CNA advisory is sparse.
    • Add the Sigma/Splunk/Elastic detection content above to your SIEM to establish a baseline of discourse_templates access; tune the rules to administrative IP ranges to reduce false positives.
    • Consider applying network segmentation or authenticated reverse-proxy requirements (e.g., SSO) to reduce the likelihood that low-privilege local accounts are available to external attackers.

References

No known threat actor campaigns or in-the-wild exploitation evidence exist for CVE-2026-72732 at the time of writing. The CISA KEV catalog does not list this CVE. The following authoritative references are available:

  1. NVD Entry — https://nvd.nist.gov/vuln/detail/CVE-2026-72732
  2. OSV Vulnerability Record — https://osv.dev/vulnerability/CVE-2026-72732
  3. CWE-862 Missing Authorization — https://cwe.mitre.org/data/definitions/862.html
  4. Discourse Official Site / Release Downloads — https://www.discourse.org/
  5. Discourse GitHub Repository (contains the vulnerable plugin path plugins/discourse-templates/app/serializers/discourse_templates/templates_serializer.rb referenced in the advisory) — https://github.com/discourse/discourse

Note on OSV package data: the OSV record lists three package entries (a root package and two commit hashes) all marked as "unfixed," which is consistent with the 2/4 patch confidence rating — the OSV source claims a fix exists in the released versions named by the NVD description, but the OSV record itself has not been updated to reflect patched states for those commit-specific references. Verify against your installed build to determine actual exposure.

👁️ SHODAN DORKS (THREAT HUNTING)

What is this? Security researchers use these exact search queries on Shodan.io (a search engine for internet-connected devices) to find vulnerable systems globally. You can copy these dorks to see if your organization's IP space is exposed.

http.title:"Discourse"
product:"Discourse"
http.html:"discourse"

💣 PoC CODE AVAILABLE

Exploit code for this CVE is tracked in our database. Access poc_code via API Pro.

[ API_PRO ] →
◈ SOURCE Analysis & enrichment: valtersit.com/cve/CVE-2026-72732/ · CVE data: NVD/MITRE (public domain) · © 2026 ValtersIT Hub
>_ SYSTEM_CORE: INTEL_ACTIVE
90% TEAM-CURATED // 10% AUTOMATED INGESTION.
ALL PATCH REFERENCES AND VERSION DATA SOURCED FROM NVD + OSV OFFICIAL REGISTRIES.