CVE-2025-12362

5.3 MEDIUM

📋 TL;DR

This vulnerability allows unauthenticated attackers to manipulate the myCred WordPress plugin's financial systems. Attackers can approve withdrawal requests, modify user point balances, and interfere with payment processing without any authentication. WordPress sites using myCred plugin versions 2.9.7 and earlier are affected.

💻 Affected Systems

Products:
  • myCred - Points Management System For Gamification, Ranks, Badges, and Loyalty Program WordPress plugin
Versions: Up to and including 2.9.7
Operating Systems: All operating systems running WordPress
Default Config Vulnerable: ⚠️ Yes
Notes: All WordPress installations with the vulnerable myCred plugin versions are affected regardless of configuration.

⚠️ 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 drain the site's payment system by approving fraudulent withdrawals, manipulate all user point balances to disrupt gamification systems, and potentially cause financial losses.

🟠

Likely Case

Attackers will manipulate point balances to gain unfair advantages in gamification systems and potentially approve small fraudulent withdrawals.

🟢

If Mitigated

With proper authentication controls, only authorized administrators can manage withdrawals and point balances, preventing unauthorized manipulation.

🌐 Internet-Facing: HIGH
🏢 Internal Only: LOW

🎯 Exploit Status

Public PoC: ✅ No
Weaponized: LIKELY
Unauthenticated Exploit: ⚠️ Yes
Complexity: LOW

The vulnerability is in a publicly accessible AJAX endpoint with no authentication checks, making exploitation trivial.

🛠️ Fix & Mitigation

✅ Official Fix

Patch Version: 2.9.8 or later

Vendor Advisory: https://plugins.trac.wordpress.org/changeset/3417299/mycred/trunk?contextall=1&old=3410754&old_path=%2Fmycred%2Ftrunk#file0

Restart Required: No

Instructions:

1. Log into WordPress admin panel. 2. Navigate to Plugins > Installed Plugins. 3. Find myCred plugin. 4. Click 'Update Now' if update is available. 5. Alternatively, download version 2.9.8+ from WordPress plugin repository and manually update.

🔧 Temporary Workarounds

Disable cashcred_pay_now AJAX endpoint

all

Temporarily block access to the vulnerable AJAX action by modifying WordPress functions.php or using a security plugin.

Add to theme's functions.php: add_action('init', function() { if (isset($_REQUEST['action']) && $_REQUEST['action'] === 'cashcred_pay_now') { wp_die('Access denied', 403); } });

🧯 If You Can't Patch

  • Disable the myCred plugin completely until patched
  • Implement web application firewall rules to block requests to cashcred_pay_now AJAX endpoint

🔍 How to Verify

Check if Vulnerable:

Check WordPress admin panel > Plugins > Installed Plugins for myCred version. If version is 2.9.7 or lower, you are vulnerable.

Check Version:

wp plugin list --name=mycred --field=version (if WP-CLI installed) or check WordPress admin plugins page

Verify Fix Applied:

After updating, verify myCred plugin version shows 2.9.8 or higher in WordPress admin panel.

📡 Detection & Monitoring

Log Indicators:

  • Multiple POST requests to /wp-admin/admin-ajax.php with action=cashcred_pay_now from unauthenticated users
  • Unusual withdrawal approvals or point balance changes in myCred logs

Network Indicators:

  • HTTP POST requests to admin-ajax.php with cashcred_pay_now parameter from unauthorized IPs

SIEM Query:

source="wordpress.log" AND "admin-ajax.php" AND "cashcred_pay_now" AND NOT (user="authenticated_user")

🔗 References

📤 Share & Export