CVE-2025-23560

7.1 HIGH

📋 TL;DR

This vulnerability in the Web Testimonials WordPress plugin allows attackers to perform Cross-Site Request Forgery (CSRF) attacks that lead to Stored Cross-Site Scripting (XSS). Attackers can trick authenticated administrators into executing malicious actions that inject persistent scripts into the website. All WordPress sites using Web Testimonials version 1.2 or earlier are affected.

💻 Affected Systems

Products:
  • Web Testimonials WordPress Plugin
Versions: n/a through 1.2
Operating Systems: All
Default Config Vulnerable: ⚠️ Yes
Notes: Requires WordPress installation with the vulnerable plugin enabled. Attack requires administrator interaction but no authentication from the attacker.

⚠️ 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 malicious JavaScript that steals administrator credentials, redirects visitors to malicious sites, or takes full control of the WordPress site when administrators view infected pages.

🟠

Likely Case

Attackers create fake testimonial submission forms that trick administrators into approving malicious testimonials containing JavaScript payloads, leading to session hijacking or defacement.

🟢

If Mitigated

With proper CSRF tokens and input validation, the attack chain would be broken at the initial CSRF stage, preventing XSS injection entirely.

🌐 Internet-Facing: HIGH
🏢 Internal Only: LOW

🎯 Exploit Status

Public PoC: ✅ No
Weaponized: UNKNOWN
Unauthenticated Exploit: ✅ No
Complexity: MEDIUM

Exploitation requires social engineering to trick administrators into clicking malicious links. The CSRF-to-XSS chain increases impact but requires two-step exploitation.

🛠️ Fix & Mitigation

✅ Official Fix

Patch Version: Version after 1.2

Vendor Advisory: https://patchstack.com/database/wordpress/plugin/web-testimonials/vulnerability/wordpress-web-testimonials-plugin-1-2-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 'Web Testimonials'. 4. Click 'Update Now' if update available. 5. If no update available, deactivate and delete the plugin immediately.

🔧 Temporary Workarounds

Implement CSRF Protection

WordPress

Add nonce verification to testimonial submission forms to prevent CSRF attacks

Requires custom PHP code modification to add wp_nonce_field() and wp_verify_nonce() checks

Input Sanitization

WordPress

Implement strict input validation and output escaping for testimonial content

Use wp_kses() or esc_html() functions when processing and displaying testimonial data

🧯 If You Can't Patch

  • Deactivate and remove the Web Testimonials plugin immediately
  • Implement web application firewall (WAF) rules to block XSS payloads and suspicious testimonial submissions

🔍 How to Verify

Check if Vulnerable:

Check WordPress admin panel > Plugins > Installed Plugins for 'Web Testimonials' version 1.2 or earlier

Check Version:

wp plugin get web-testimonials --field=version

Verify Fix Applied:

Verify plugin version is greater than 1.2 or plugin is completely removed

📡 Detection & Monitoring

Log Indicators:

  • Multiple testimonial submissions from same IP with script tags
  • Administrator actions (testimonial approvals) followed by unusual page views

Network Indicators:

  • HTTP POST requests to /wp-admin/admin-ajax.php with testimonial data containing script tags
  • Referer headers pointing to external domains in admin actions

SIEM Query:

source="wordpress.log" AND ("testimonial" AND ("script" OR "javascript" OR "onclick"))

🔗 References

📤 Share & Export