☠️
EXFILTRATING
DATA...
01010111 10110010 00101001 11000110 01101100 10011011 00010001 11100101 01000010 10101111
[ <-- BACK_TO_SEARCH ]
Discourse logo [ WEBSITE ] [ VENDOR STATS ]
SOON 🐛 CWE-79
👁️
Common Weakness Enumeration - Identifies the specific category of software weakness or flaw.

CVE-2026-72727

CVE-2026-72727 Cross-Site Scripting in Discourse
📅 PUBLISHED: 2026-08-10 00:00 UTC 🔄 UPDATED: 2026-08-16 22:34 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.23%
👁️
0.23% probability
5.8× above the median CVE
Tier: ELEVATED
30-day exploitation window · FIRST.org · updated daily
🥷 MITRE: T1203
👁️
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 SEVERITY SCALE
9.0–10.0 CRITICAL
7.0–8.9 HIGH
4.0–6.9 MEDIUM
0.1–3.9 LOW
0.0 NONE
SOON
PENDING NVD
■ tracking this CVE ✓ independent patch confirmation ⧗ same-origin mirror (GHSA) ⚠ active exploitation verification policy →

Executive Summary

CVE-2026-72727 is a stored cross-site scripting (XSS) vulnerability in Discourse, an open-source discussion platform. A low-privileged user can place crafted content in the moderation review queue, and that content executes as JavaScript in a moderator's browser session when the queue is viewed on sites where the default Content Security Policy (CSP) has been modified or disabled. Patches were released in versions 2026.1.6, 2026.5.2, 2026.6.1, and 2026.7.0; no public exploit code or confirmed in-the-wild exploitation has been reported at the time of writing.

⚡ 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 is a stored (persistent) cross-site scripting flaw, classified as CWE-79. The attack mechanism centers on Discourse's moderation workflow: content submitted by lower-privileged users is persisted server-side and later rendered for review by a moderator. Because the affected data path fails to sufficiently sanitize or encode certain crafted fields, script-bearing HTML can survive storage and be interpreted by the browser during the rendering of the review queue.

The NVD description provides no specific function names, class names, URL endpoints, or parameters — the affected mechanism is described only as the "moderation review queue." Accordingly, the exact code-level details remain undetermined from public data. What is known is that the flaw requires an additional environmental condition: the site must be running with a modified or disabled default Content Security Policy. Discourse ships with a default CSP that functions as an effective compensating control, preventing inline or externally hosted script execution. If an administrator has explicitly disabled or altered that policy, the stored payload can execute. This makes the vulnerability conditional on configuration state rather than universally exploitable on all affected versions.

Affected version information is anomalous: the NVD text states "Prior to 026.1.6, 2026.5.2, 2026.6.1, and 2026.7.0" while the fixed versions are listed as 2026.1.6, 2026.5.2, 2026.6.1, and 2026.7.0. This likely indicates a typographical inconsistency in the advisory (026.1.6 vs. 2026.1.6), and that patches were issued across multiple maintenance branches. OSV package data lists three revision identifiers (0, 640840d818f4ee9375829ece0ef452923bb0c012, and 06d03da34c4ed09ea59f917f045ba250d2b6320d) with an "unfixed" status, meaning the affected package states have not yet received the fix commit in the available advisory metadata.

Exploitation Scenarios

No public proof-of-concept is available; the following attack chain is inferred from the vulnerability class and the NVD description:

  1. Reconnaissance / target identification: An attacker identifies a Discourse instance, typically via internet-wide search (e.g., Shodan) or by simply registering on a known community. They determine the running version and inspect HTTP response headers or embedded page metadata to verify whether the site's Content Security Policy has been disabled or modified from the default — the critical precondition for reliable execution.

  2. Flaw triggering: Using a low-privileged account (for example, a standard registered user), the attacker submits crafted content through a normal content-submission path that routes content into the moderation review queue. The content embeds a JavaScript payload; depending on the sanitization gap, this may use a <script> element, an event handler attribute, or another XSS vector that survives storage. The NVD description does not disclose which input field is affected, so the payload must be assumed to target any content fields rendered inside the review queue.

  3. Payload / execution: When a moderator opens the moderation review queue, the stored payload is rendered by the browser and executes in the context of the Discourse origin, inheriting the moderator's full session privileges. The successful execution depends entirely on the weakened CSP state — on a properly configured default CSP, the injected script would be blocked.

  4. Post-exploitation impact: With script execution in a moderator's session, the attacker can steal session cookies (e.g., by exfiltrating document.cookie), perform moderation actions on behalf of the victim (approve or reject queued content, edit or delete posts), modify user trust levels, and, if the victim is a site administrator, potentially achieve account takeover of the moderator account and further compromise the community. The stored nature of the payload means every subsequent review of the affected queue entry is re-triggered, amplifying the attack window.

Impact Assessment

The primary business impact is compromise of the moderation and administration functions of a Discourse community. Because the victim is a moderator — a privileged user by design — the confidentiality impact includes exposure of private/sensitive content visible in the moderation queue and theft of moderator session tokens. Integrity impact includes unauthorized content approval/rejection, content tampering, and account manipulation. Availability may be affected through defacement or abuse of the moderation workflow that makes the platform unusable.

The blast radius is conditionally broad: all Discourse deployments on pre-patch versions are technically affected, but only those with a modified or disabled default CSP are practically exploitable. This configuration dependency likely explains the absence of a published CVSS score. The EPSS score of 0.00234 (14.6th percentile) and the absence from the CISA Known Exploited Vulnerabilities (KEV) catalog indicate low current evidence of exploitation in the wild. Nevertheless, the combination of low-privilege attacker access and a privileged victim makes this a meaningful vector for targeted compromise of Discourse communities, especially ones operated with custom security settings.

Detection Guidance

The following detection rules target the observable artifacts of an exploitation attempt: XSS payload patterns submitted to the server, and anomalous script-bearing content in HTTP traffic associated with Discourse moderation flows. These rules are generic in nature because the NVD description does not disclose specific endpoints or parameter names.

Sigma Rule

Detects HTTP requests whose body contains common stored-XSS payload markers, which are the expected vehicle for this vulnerability.

title: Potential Stored XSS Payload Submission (CVE-2026-72727)
status: experimental
description: Detects HTTP requests containing script-bearing payload patterns consistent with stored XSS targeting Discourse moderation review queue
logsource:
  category: webserver
  product: apache
  definition: Requires access logs with request body or full URI logging
detection:
  selection_method:
    cs-method:
      - 'POST'
      - 'PUT'
  selection_keywords:
    - cs-body|contains|all:
        - '<script'
  selection_regex:
    - cs-uri-query|re: '(<script[^>]*>|javascript\s*:|on(load|error|click|mouseover)\s*=)'
  condition: selection_method and (selection_keywords or selection_regex)
  timeframe: 10m
level: medium
tags:
  - attack.t1059.007
  - attack.t1203
  - cve.2026.72727

YARA Rule

Matches XSS payload patterns within stored content, web server access logs, or exported Discourse data that exhibit characteristics consistent with this vulnerability.

rule Discourse_Stored_XSS_CVE_2026_72727
{
    meta:
        author      = "ValtersIT Threat Intelligence"
        description = "Detects XSS payload strings consistent with stored XSS in Discourse moderation review queue"
        cve         = "CVE-2026-72727"
        date        = "2026-01-01"
        reference   = "https://nvd.nist.gov/vuln/detail/CVE-2026-72727"
    strings:
        $a = /<script[^>]*>.*?<\/script>/is
        $b = /on(load|error|click|mouseover|focus)\s*=\s*["']?[^"'\s>]{3,}/i
        $c = /javascript\s*:\s*[a-zA-Z_]/i
        $d = "document.cookie"
        $e = "fetch("
    condition:
        any of ($a, $b, $c) and 1 of ($d, $e)
}

Suricata IDS Rule

Network-level detection of script payloads in HTTP client bodies destined for the web server, with an accompanying response-side rule pattern for script reflection.

alert http $HOME_NET any -> $EXTERNAL_NET any (msg:"CVE-2026-72727 Stored XSS Payload Exfiltration Attempt"; flow:from_client,established; content:"<script"; http_client_body; pcre:"/<script[^>]*>.*<\/script>/i"; classtype:web-application-attack; sid:10072727; rev:1;)

alert http $EXTERNAL_NET any -> $HOME_NET any (msg:"CVE-2026-72727 Stored XSS Payload Reflector Response"; flow:from_server,established; content:"<script"; http_server_body; pcre:"/<script[^>]*>(alert|fetch|document\.cookie)/i"; classtype:web-application-attack; sid:10072728; rev:1;)

Elastic Detection

EQL query that flags HTTP request bodies containing XSS indicators; suitable for ingestion pipelines that parse proxy or web server logs into Elastic Common Schema.

any where
  network.protocol == "http" and
  (wildcard(http.request.body.content, "*<script*") or
   wildcard(http.request.body.content, "*onerror=*") or
   wildcard(http.request.body.content, "*onload=*") or
   wildcard(http.request.body.content, "*javascript:*"))

Splunk SPL Query

Splunk search over web access logs that isolates clients submitting repeated XSS-bearing requests — a pattern consistent with an attacker iterating payloads into the moderation queue.

index=web sourcetype=access_combined
| regex _raw="(?i)(<script[\s>]|javascript\s*:|onerror\s*=)"
| eval payload_type=case(
    like(_raw,"%<script%"),"script_tag",
    like(_raw,"%javascript:%"),"javascript_protocol",
    like(_raw,"%onerror=%"),"event_handler",
    true(),"other")
| stats count min(_time) as first_seen max(_time) as last_seen
        values(payload_type) as payload_types
        by src_ip uri_path user
| where count >= 3
| sort - count

Wazuh OSSEC Rule

Wazuh rule that alerts on repeated XSS payload patterns appearing in monitored web server logs, including an audit rule for modified Discourse configuration files (CSP changes).

<group name="web_xss,">

    <rule id="795535" level="10" frequency="8" timeframe="120">
        <if_sid>31100</if_sid>
        <match> <script|javascript:|onerror= </match>
        <description>CVE-2026-72727: Possible stored XSS payload traffic targeting Discourse</description>
        <group>discourse,xss,attack,web_application_attack</group>
    </rule>

    <rule id="795536" level="7">
        <if_sid>550</if_sid>
        <match> content_security_policy|Content-Security-Policy|csp </match>
        <description>CVE-2026-72727 context: Discourse CSP configuration modified or disabled - reviewing site is predisposed to exploitation</description>
        <group>discourse,configuration_change,security_policy</group>
    </rule>

</group>

Mitigation & Patch Guidance

Patch confidence: 2/4 — CLAIMED. The fix is documented by a single source (OSV) and has not been independently confirmed against Discourse's official release channel. Organizations should validate the patch status against their own deployment artifacts before assuming protection.

  1. Immediate mitigations:

    • Verify that all Discourse sites are running the platform's default Content Security Policy. Re-enable and restore the default CSP configuration, since the vulnerability is only exploitable when CSP has been modified or disabled.
    • Where feasible, temporarily restrict low-privileged account content submission capabilities or route new registrations through manual approval to reduce the population that can inject queue content.
    • Advise moderators to avoid opening the moderation review queue from untrusted/unmanaged endpoints and to clear sessions after moderation duties.
  2. Patch / upgrade steps:

    • Upgrade Discourse to the earliest applicable fixed release: 2026.1.6, 2026.5.2, 2026.6.1, or 2026.7.0, depending on the running maintenance branch.
    • After upgrade, confirm the patch hash against the OSV advisory and unrelated provenance (e.g., official Discourse GitHub release notes or community announcement posts) to raise confidence beyond the single-source claim.
  3. Long-term hardening:

    • Maintain the default CSP with script-src restricted to trusted sources; treat any proposed CSP modification as a security-significant change requiring review and regression testing.
    • Apply defense-in-depth output encoding/sanitization for all content rendered in moderator-facing views, including the review queue.
    • Monitor for XSS payload patterns using the detection rules above; retain web access logs with request body capture for the review queue endpoints.
    • Enforce least privilege: moderator roles should not overlap with administrator roles unless strictly necessary, and session lifetimes should be short with periodic revocation.

References

  1. NVD Entry — CVE-2026-72727: https://nvd.nist.gov/vuln/detail/CVE-2026-72727
  2. OSV Vulnerability Entry — CVE-2026-72727: https://osv.dev/vulnerability/CVE-2026-72727
  3. CWE-79 (Improper Neutralization of Input During Web Page Generation): https://cwe.mitre.org/data/definitions/79.html
  4. Discourse Official Site / Release Information: https://www.discourse.org/
  5. CISA Known Exploited Vulnerabilities Catalog (no current listing for this CVE): https://www.cisa.gov/known-exploited-vulnerabilities-catalog

Threat actor / exploit-in-the-wild evidence: None recorded. CVE-2026-72727 is not listed in the CISA KEV catalog, no public exploit code or Nuclei template exists, and the EPSS score of 0.00234 (14.6th percentile) indicates no observed mass-exploitation signal. Analysts should nonetheless treat this as a viable targeted vector against Discourse communities running weakened CSP configurations.

💣 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-72727/ · 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.