Severity by source
AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:L/A:N
Unauthenticated network injection (AV:N/AC:L/PR:N) but payload executes only when an admin views the log page (UI:R), running in admin context for a scope change (S:C) with limited C/I impact.
Primary rating from Vendor (Wordfence).
CVSS VectorVendor: Wordfence
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:L/A:N
Lifecycle Timeline
2DescriptionCVE.org
The SUMO Reward Points plugin for WordPress is vulnerable to Unauthenticated Stored Cross-Site Scripting via the REST API endpoint /wp-json/wc-srp/v1/earning in versions up to, and including, 32.7.0. This is due to the user_has_cap filter in the SRP_REST_Earning_Controller class unconditionally granting the custom rs_earning_read capability to all users - including unauthenticated visitors - combined with missing sanitization of the reason parameter in the create_items() function and missing output escaping in the column_default() method of SRP_Master_Log. This makes it possible for unauthenticated attackers to inject arbitrary web scripts into the reward points log that will execute whenever an administrator accesses the Master Log or User Reward Points admin pages.
AnalysisAI
Unauthenticated stored cross-site scripting in the SUMO Reward Points for WooCommerce WordPress plugin (versions up to and including 32.7.0) lets any anonymous visitor inject persistent JavaScript through the /wp-json/wc-srp/v1/earning REST endpoint. A broken user_has_cap filter hands the rs_earning_read capability to everyone, so an attacker can write an unsanitized reason value that later executes in an administrator's browser when the Master Log or User Reward Points pages are viewed. There is no public exploit identified at time of analysis and the plugin is not on CISA KEV, but the flaw is trivially reachable and Wordfence-confirmed.
Technical ContextAI
The affected software is a premium WooCommerce loyalty/rewards plugin (CPE cpe:2.3:a:fantasticplugins:sumo_reward_points_for_woocommerce) that exposes a custom WordPress REST API namespace (wc-srp/v1). The root cause is CWE-79 (Improper Neutralization of Input During Web Page Generation) compounded by a broken access-control decision: the SRP_REST_Earning_Controller class registers a user_has_cap filter that unconditionally grants the custom rs_earning_read capability to every request context, including unauthenticated ones. WordPress capability filters are meant to conditionally elevate specific privileges; here it effectively removes authentication from the earning endpoint. The create_items() function then stores the reason parameter without sanitization, and SRP_Master_Log::column_default() renders that stored value in the admin list table without output escaping (e.g. esc_html), so the payload is persisted server-side and reflected into a privileged admin page - a classic stored/second-order XSS.
RemediationAI
No vendor-released patched version was identified in the provided data, so the exact fixed release cannot be cited (do not assume one beyond 32.7.0). Update to any release later than 32.7.0 once the vendor publishes it, and monitor the CodeCanyon item page and the Wordfence advisory (https://www.wordfence.com/threat-intel/vulnerabilities/id/366b5051-d042-4425-9aad-b77d93bcd485?source=cve) for the fixed build. As compensating controls until patched: block or restrict access to the /wp-json/wc-srp/v1/earning REST route at the web server or WAF layer (trade-off: may break legitimate earning API calls if the site relies on that endpoint), deploy a WAF rule to filter script/HTML payloads in the reason parameter, and consider disabling the SUMO Reward Points plugin if the rewards feature is non-essential (trade-off: loyalty program stops functioning). Administrators should avoid opening the Master Log and User Reward Points admin pages until remediated, since that view is what triggers payload execution.
Same weakness CWE-79 – Cross-site Scripting (XSS)
View allShare
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-47877
GHSA-j42q-gjcw-f29h