CVE-2026-96660
Executive Summary
CVE-2026-96660 is a stored cross-site scripting (XSS) vulnerability in the "User Registration & Membership" plugin for WordPress, affecting all versions up to and including 5.2.8. The flaw is reachable without authentication through the nopriv AJAX action user_registration_user_form_submit, which routes requests into ur_process_registration() without nonce validation, allowing arbitrary web scripts to be injected via an unescaped Checkbox field value and executed in the browsers of visitors who view the injected page.
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.
No signup required
Technical Analysis
The vulnerability resides in the user-submission processing path of the User Registration & Membership plugin. The NVD description provides several concrete, load-bearing technical facts:
- Injection point: A Checkbox field value within user registration form submissions.
- Root cause class: Insufficient input sanitization combined with insufficient output escaping (CWE-79). User-controlled data is stored and later rendered without adequate encoding, yielding a persistent (stored) XSS condition.
- Reachability: The plugin exposes a WordPress AJAX action registered with the
noprivprefix (wp_ajax_nopriv_user_registration_user_form_submit), meaning logged-out, unauthenticated visitors can invoke it. The description explicitly states this action "reachesur_process_registration()without nonce validation," removing the anti-CSRF/authenticity gate that would normally constrain the submission endpoint.
The combination of these factors is what elevates the issue: a function designed to persist registration form data (ur_process_registration()) can be driven by any anonymous internet client, and a Checkbox field value is stored and later reflected back into rendered pages without sanitization or escaping. Because output is stored, the malicious script persists in the WordPress database and executes in the context of every subsequent visitor who loads the affected page — not merely the attacker.
The CVSS vector CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:L/A:N (7.2 High) is consistent with this analysis: network-reachable, no privileges or user interaction required, and a Scope Changed rating — the injected script executes in the browser of a victim whose security context differs from the vulnerable component. Confidentiality and integrity are rated Low, and availability is not impacted.
No public PoC, exploit code, or Nuclei template was available at the time of this report; the code-level mechanics beyond those described above are not independently confirmed and are therefore not expanded here.
Exploitation Scenarios
No public PoC is available; the following attack chain is inferred from the vulnerability class and the specifics disclosed in the NVD description.
Reconnaissance / target identification. The attacker enumerates internet-facing WordPress sites and confirms the User Registration & Membership plugin is present, e.g. by requesting
/wp-content/plugins/user-registration/assets or by loading a page that renders a registration form. Version metadata (up to and including 5.2.8) is checked where exposed.Triggering the flaw. Because the form-submission AJAX action is registered as a
noprivhandler and — per the description —ur_process_registration()is reached without nonce validation, the attacker sends a crafted unauthenticated POST directly to the WordPress AJAX endpoint (admin-ajax.php) with the action targetinguser_registration_user_form_submit. The request carries a malicious value in the Checkbox field. No account, session, or nonce is required.Payload / execution method (vulnerability-class level). The Checkbox value is stored without sanitization and later rendered into a page without output escaping. Performing stored-XSS-class payload placement, the attacker injects script markup into the field so that it executes in the browser of any user who loads the injected page. The exact rendered context (form confirmation, profile, or listing view) is not specified in the available data and is not asserted here.
Post-exploitation impact. Script execution occurs in the security context of the affected site's visitors. Publicly documented XSS consequences include session/token theft, forced actions performed as the victim, credential phishing rendered in-site, and redirect or malware distribution. Because the injection is stored, it persists until the underlying record or page is cleaned, producing a durable watering-hole condition for all visitors of the poisoned page.
Unauthenticated, interaction-free: consistent with the PR:N / UI:N vector, exploitation requires no prior access and no victim action beyond visiting the injected page.
Impact Assessment
- Affected systems: Any WordPress installation running User Registration & Membership version ≤ 5.2.8 with the registration/submission functionality enabled.
- Blast radius: The stored payload executes for every visitor to the injected page — registered users, administrators previewing content, and anonymous visitors — so a single unauthenticated submission can seed a site-wide persistent XSS.
- Business impact: Website defacement/repurposing, theft of session data from legitimate users, unauthorized actions in the victim's context, reputational damage, and downstream malware/phishing delivery to customers. WordPress plugins frequently sit on customer-facing registration flows, so the exposure window is customer-visible.
- CVSS interpretation: 7.2 (High). AV:N — remote; AC:L — no special conditions; PR:N — no privileges needed (matches the
noprivpath); UI:N — no victim interaction beyond page load; S:C — scope change, script runs in a context outside the vulnerable component; C:L/I:L — limited confidentiality and integrity impact; A:N — availability unaffected. - CISA KEV: Not listed. No known in-the-wild exploitation is reported.
Detection Guidance
Sigma Rule
title: Unauthenticated Stored XSS via User Registration Plugin Form Submit
id: 7b1c2e9a-5c3e-4c55-8a2f-96660urxss0
status: experimental
description: Detects unauthenticated POSTs to admin-ajax.php invoking the user_registration_user_form_submit action with script-like payloads in submitted fields (CVE-2026-96660).
references:
- https://nvd.nist.gov/vuln/detail/CVE-2026-96660
author: threat-intel
logsource:
category: webserver
detection:
selection_endpoint:
cs-method: 'POST'
c-uri|contains: '/wp-admin/admin-ajax.php'
selection_action:
cs-body|contains: 'action=user_registration_user_form_submit'
selection_payload:
cs-body|contains:
- '<script'
- 'onerror='
- 'onload='
- 'javascript:'
- '%3Cscript'
condition: selection_endpoint and selection_action and selection_payload
fields:
- c-ip
- c-uri
- cs-body
falsepositives:
- Legitimate users pasting script-like text into registration fields
level: high
YARA Rule
rule CVE_2026_96660_UserReg_Checkbox_XSS
{
meta:
author = "threat-intel"
description = "Detects script-bearing values submitted to User Registration plugin AJAX action (CVE-2026-96660)"
cve = "CVE-2026-96660"
reference = "https://nvd.nist.gov/vuln/detail/CVE-2026-96660"
strings:
$action = "user_registration_user_form_submit" ascii wide
$js1 = "<script" ascii wide nocase
$js2 = "onerror=" ascii wide nocase
$js3 = "onload=" ascii wide nocase
$js4 = "javascript:" ascii wide nocase
$chk = "checkbox" ascii wide nocase
condition:
$action and 1 of ($js*) and filesize < 5MB
}
Suricata IDS Rule
alert http any any -> any any (msg:"CVE-2026-96660 User Registration plugin unauthenticated stored XSS attempt"; flow:to_server,established; http.method; content:"POST"; http.uri; content:"/wp-admin/admin-ajax.php"; http.request_body; content:"action=user_registration_user_form_submit"; http.request_body; content:"<script"; nocase; reference:cve,2026-96660; classtype:web-application-attack; sid:202696660; rev:1;)
Elastic Detection
sequence by source.ip with maxspan=30s
[network where network.protocol == "http" and http.request.method == "POST" and
url.path : "*/wp-admin/admin-ajax.php" and
http.request.body.content : "*user_registration_user_form_submit*"]
[network where network.protocol == "http" and
http.request.body.content : ("*<script*" or "*onerror=*" or "*javascript:*")]
Splunk SPL Query
index=web sourcetype=access_combined
| search method=POST uri_path="*/wp-admin/admin-ajax.php"
| eval body=coalesce(form_data, request_body)
| search body="*user_registration_user_form_submit*"
| eval payload=if(match(body,"(?i)(<script|onerror=|onload=|javascript:)"),"suspicious","clean")
| where payload="suspicious"
| stats count values(body) as bodies by src_ip
| sort -count
Wazuh OSSEC Rule
<group name="web,appsec,">
<rule id="202696660" level="12">
<if_sid>31100,31103,31108,31533</if_sid>
<match>admin-ajax.php</match>
<regex type="pcre2">user_registration_user_form_submit.*(?:<script|onerror\s*=|javascript:)</regex>
<description>CVE-2026-96660: Unauthenticated stored XSS attempt against User Registration plugin.</description>
<mitre>
<id>T1190</id>
</mitre>
<group>attack,</group>
</rule>
</group>
Mitigation & Patch Guidance
Patch confidence: 2/4 (CLAIMED — single source claims a patch; not independently confirmed). No patch version has been published in the provided data, and affected versions were not enumerated beyond the description's "up to, and including, 5.2.8."
Immediate mitigations
- If the registration/membership functionality is not required, deactivate the plugin until a confirmed fixed release is verified.
- Put a WAF/edge rule in front of
admin-ajax.phpthat rejects POSTs withaction=user_registration_user_form_submitwhose body contains script-bearing markup for anonymous callers. - Restrict registration form functionality to authenticated or vetted users where feasible.
- Hunt for existing stored payloads in registration field data and clean them (the injection persists in the database).
Patch / upgrade steps
- Monitor the plugin's official repository for a release newer than 5.2.8 and verify its changelog addresses CVE-2026-96660 before relying on it.
- Because the patch status is unverified, validate any "fixed" version in a staging environment (submit a Checkbox-value payload and confirm it is sanitized on input and escaped on output) before production rollout.
- Keep WordPress core and all plugins updated; this class of bug is routinely reintroduced via third-party registration plugins.
Long-term hardening
- Enforce the principle of least privilege and review any
wp_ajax_nopriv_*handlers to confirm nonce validation and capability checks run before business logic. - Deploy a strict Content Security Policy and input/output encoding standards for custom form-building plugins.
- Maintain continuous scanning (e.g., plugin inventory and vulnerability scanners) and monitor logs for malformed
admin-ajax.phpsubmissions.
- Enforce the principle of least privilege and review any
References
- NVD — CVE-2026-96660: https://nvd.nist.gov/vuln/detail/CVE-2026-96660
- MITRE CWE-79 — Improper Neutralization of Input During Web Page Generation: https://cwe.mitre.org/data/definitions/79.html
- WordPress Plugin Security / Hardening guidance: https://developer.wordpress.org/plugins/security/
- MITRE ATT&CK T1190 — Exploit Public-Facing Application: https://attack.mitre.org/techniques/T1190/
- CISA KEV catalog (not listed for this CVE): https://www.cisa.gov/known-exploited-vulnerabilities-catalog
No known threat-actor campaigns or in-the-wild exploitation of CVE-2026-96660 are reported in the provided data.
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.
💣 PoC CODE AVAILABLE
Exploit code for this CVE is tracked in our database.
Access poc_code via API Pro.