Skip to main content
CVE Vulnerability Database
Vulnerability Database/CVE-2025-12358

CVE-2025-12358: ShopEngine WordPress Plugin CSRF Vulnerability

CVE-2025-12358 is a Cross-Site Request Forgery flaw in ShopEngine Elementor WooCommerce Builder Addon for WordPress that lets attackers manipulate user wishlists. This article covers technical details, affected versions, and mitigations.

Published:

CVE-2025-12358 Overview

CVE-2025-12358 is a Cross-Site Request Forgery [CWE-352] vulnerability in the ShopEngine Elementor WooCommerce Builder Addon plugin for WordPress. The flaw affects all versions up to and including 4.8.5. The vulnerability stems from missing nonce validation on the post_add_to_list function and an incorrect permissions callback in the Api/init function. Unauthenticated attackers can add or remove products from a victim's wishlist through a forged request, provided the victim clicks a crafted link or visits a malicious page. The scope of impact is limited to wishlist state manipulation and does not affect confidentiality or availability.

Critical Impact

Unauthenticated attackers can manipulate wishlist contents for authenticated WordPress users through forged HTTP requests requiring only user interaction such as clicking a link.

Affected Products

  • ShopEngine Elementor WooCommerce Builder Addon plugin for WordPress
  • All versions up to and including 4.8.5
  • WordPress sites running WooCommerce with ShopEngine wishlist functionality

Discovery Timeline

  • 2025-12-03 - CVE-2025-12358 published to NVD
  • 2026-06-17 - Last updated in NVD database

Technical Details for CVE-2025-12358

Vulnerability Analysis

The ShopEngine plugin exposes a wishlist endpoint that mutates server-side state without verifying the origin of the request. Two implementation defects combine to produce the CSRF condition. First, the post_add_to_list function omits WordPress nonce validation, which normally binds a request to an authenticated session. Second, the Api/init function uses an incorrect permissions callback that fails to enforce meaningful authorization checks on incoming requests.

An attacker crafts a request targeting the vulnerable endpoint and delivers it through phishing, malicious advertising, or an attacker-controlled page. When a logged-in WordPress user triggers the request, the browser automatically attaches session cookies. The server processes the wishlist mutation as if the user intentionally initiated it. Successful exploitation results in unauthorized wishlist additions or deletions on behalf of the victim.

Root Cause

The root cause is a failure to implement standard WordPress CSRF protections. WordPress provides wp_verify_nonce() and capability checks specifically to defend against forged cross-origin requests. The vulnerable functions in ShopEngine bypass both controls, treating any request with a valid session cookie as legitimate regardless of origin.

Attack Vector

Exploitation requires user interaction but no authentication on the attacker's side. The attacker hosts a page containing an auto-submitting form or image tag that issues a request to the target WordPress site's wishlist endpoint. When an authenticated ShopEngine user visits the malicious page, their browser transmits the request with session credentials attached. The server-side handler executes the wishlist modification without verifying request authenticity.

The vulnerability mechanism is described in the Wordfence Vulnerability Report and the corresponding fix is documented in the WordPress Plugin Change Log.

Detection Methods for CVE-2025-12358

Indicators of Compromise

  • Unexpected wishlist additions or removals reported by end users of the WordPress site
  • HTTP POST requests to the ShopEngine wishlist API endpoints with Referer headers pointing to external or unrelated domains
  • Requests to post_add_to_list handler paths lacking a valid WordPress nonce parameter
  • Spikes in wishlist mutation traffic originating from a narrow set of external referrers

Detection Strategies

  • Inspect web server access logs for requests to ShopEngine wishlist endpoints where the Referer header does not match the site's own domain
  • Correlate wishlist state changes with user session activity to identify mutations occurring without corresponding on-site browsing behavior
  • Deploy a Web Application Firewall rule to flag POST requests to the plugin's REST routes that lack a nonce parameter

Monitoring Recommendations

  • Enable WordPress audit logging to record all wishlist state changes with source IP and referrer
  • Monitor the ShopEngine plugin's REST API endpoints for anomalous request patterns and cross-origin traffic
  • Alert on plugin version drift to detect installations still running 4.8.5 or earlier after remediation windows

How to Mitigate CVE-2025-12358

Immediate Actions Required

  • Update the ShopEngine Elementor WooCommerce Builder Addon plugin to the version released after 4.8.5 that includes the fix from changeset 3401226
  • Review WordPress user sessions and audit wishlist data for unauthorized modifications following the vulnerability window
  • Restrict administrative access to the WordPress dashboard while patching is in progress

Patch Information

The vendor addressed the vulnerability in the commit tracked as changeset 3401226 in the WordPress plugin repository. The fix adds nonce validation to the post_add_to_list function and corrects the permissions callback in the Api/init function. Site administrators should apply the update through the WordPress plugin management interface. Details are available in the WordPress Plugin Change Log.

Workarounds

  • Disable the ShopEngine plugin until the patched version is deployed if immediate updating is not possible
  • Configure the WordPress site to enforce SameSite=Lax or SameSite=Strict on session cookies to limit cross-origin cookie transmission
  • Deploy a WAF rule that blocks requests to ShopEngine wishlist endpoints missing a valid _wpnonce parameter or containing external referrers
bash
# Example WAF rule pattern to block CSRF against ShopEngine wishlist endpoint
SecRule REQUEST_URI "@contains /wp-json/shopengine/" \
  "chain,deny,status:403,id:1012358,msg:'ShopEngine CSRF attempt - missing nonce'"
SecRule &ARGS:_wpnonce "@eq 0"

Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

Default Legacy - Prefooter | Experience the World’s Most Advanced Cybersecurity Platform

Experience the Most Advanced Cybersecurity Platform

See how the world’s most intelligent, autonomous cybersecurity platform can protect your organization today and into the future.