CVE-2025-39414

7.1 HIGH

📋 TL;DR

A Cross-Site Request Forgery (CSRF) vulnerability in the WordPress spam-stopper plugin allows attackers to perform actions as authenticated users, leading to stored cross-site scripting (XSS). This affects WordPress sites using spam-stopper plugin versions up to 3.1.3. Attackers can inject malicious scripts that execute when other users view affected pages.

💻 Affected Systems

Products:
  • WordPress spam-stopper plugin
Versions: n/a through 3.1.3
Operating Systems: All
Default Config Vulnerable: ⚠️ Yes
Notes: Requires WordPress installation with spam-stopper plugin enabled. Attack requires user to be authenticated and tricked into visiting a malicious page.

⚠️ Manual Verification Required

This CVE does not have specific version information in our database, so automatic vulnerability detection cannot determine if your system is affected.

Why? The CVE database entry doesn't specify which versions are vulnerable (no version ranges provided by the vendor/NVD).

🔒 Custom verification scripts are available for registered users. Sign up free to download automated test scripts.

Recommended Actions:
  1. Review the CVE details at NVD
  2. Check vendor security advisories for your specific version
  3. Test if the vulnerability is exploitable in your environment
  4. Consider updating to the latest version as a precaution

⚠️ Risk & Real-World Impact

🔴

Worst Case

Attackers could inject persistent malicious scripts that steal admin credentials, deface websites, redirect users to malicious sites, or perform administrative actions on the WordPress site.

🟠

Likely Case

Attackers inject malicious JavaScript that steals session cookies or credentials from logged-in users, potentially compromising WordPress admin accounts.

🟢

If Mitigated

With proper CSRF protections and content security policies, the attack surface is reduced, though the vulnerability still exists in the codebase.

🌐 Internet-Facing: HIGH
🏢 Internal Only: MEDIUM

🎯 Exploit Status

Public PoC: ✅ No
Weaponized: LIKELY
Unauthenticated Exploit: ✅ No
Complexity: LOW

CSRF to XSS chain is well-understood attack pattern. Requires social engineering to trick authenticated users.

🛠️ Fix & Mitigation

✅ Official Fix

Patch Version: 3.1.4 or later

Vendor Advisory: https://patchstack.com/database/wordpress/plugin/spam-stopper/vulnerability/wordpress-spam-stopper-plugin-3-1-3-csrf-to-stored-xss-vulnerability?_s_id=cve

Restart Required: No

Instructions:

1. Log into WordPress admin panel. 2. Navigate to Plugins > Installed Plugins. 3. Find spam-stopper plugin. 4. Click 'Update Now' if update available. 5. If no update available, deactivate and remove plugin, then install fresh version from WordPress repository.

🔧 Temporary Workarounds

Disable spam-stopper plugin

all

Temporarily disable the vulnerable plugin until patched version is available

wp plugin deactivate spam-stopper

Implement CSRF protection headers

all

Add Content Security Policy headers to limit script execution

Add to .htaccess: Header set Content-Security-Policy "script-src 'self'"
Add to nginx config: add_header Content-Security-Policy "script-src 'self'";

🧯 If You Can't Patch

  • Disable spam-stopper plugin immediately
  • Implement web application firewall rules to block suspicious POST requests to WordPress admin endpoints

🔍 How to Verify

Check if Vulnerable:

Check WordPress admin panel > Plugins > Installed Plugins for spam-stopper version. If version is 3.1.3 or earlier, system is vulnerable.

Check Version:

wp plugin get spam-stopper --field=version

Verify Fix Applied:

Verify spam-stopper plugin version is 3.1.4 or later in WordPress admin panel.

📡 Detection & Monitoring

Log Indicators:

  • Unusual POST requests to WordPress admin-ajax.php or admin-post.php endpoints
  • Multiple failed CSRF token validations in WordPress debug logs
  • Unexpected plugin activation/deactivation events

Network Indicators:

  • Cross-origin requests to WordPress admin endpoints without proper referrer headers
  • Suspicious JavaScript payloads in POST parameters

SIEM Query:

source="wordpress.log" AND ("admin-ajax.php" OR "admin-post.php") AND (POST) AND NOT referer="*wp-admin*"

🔗 References

📤 Share & Export