CVE-2024-12825

5.4 MEDIUM

📋 TL;DR

The Custom Related Posts WordPress plugin has a missing capability check vulnerability that allows authenticated users with Subscriber-level access or higher to search posts and modify post relationships without proper authorization. This affects all versions up to and including 1.7.3. Attackers can link/unlink related posts and access search functionality they shouldn't have permission to use.

💻 Affected Systems

Products:
  • Custom Related Posts WordPress Plugin
Versions: All versions up to and including 1.7.3
Operating Systems: All operating systems running WordPress
Default Config Vulnerable: ⚠️ Yes
Notes: Requires WordPress installation with the vulnerable plugin enabled. Any authenticated user (Subscriber role or higher) can exploit this vulnerability.

📦 What is this software?

⚠️ Risk & Real-World Impact

🔴

Worst Case

An attacker could manipulate post relationships to create misleading content connections, damage site credibility, or create SEO spam links between unrelated content.

🟠

Likely Case

Low-privileged users can modify post relationships without authorization, potentially creating inappropriate content associations or disrupting editorial workflows.

🟢

If Mitigated

With proper user access controls and monitoring, impact is limited to minor content manipulation that can be detected and reverted.

🌐 Internet-Facing: HIGH
🏢 Internal Only: MEDIUM

🎯 Exploit Status

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

Exploitation requires authenticated access but only needs Subscriber-level permissions. The vulnerability is in AJAX endpoints that lack proper capability checks.

🛠️ Fix & Mitigation

✅ Official Fix

Patch Version: 1.7.4

Vendor Advisory: https://plugins.trac.wordpress.org/changeset?sfp_email=&sfph_mail=&reponame=&old=3226283%40custom-related-posts&new=3226283%40custom-related-posts&sfp_email=&sfph_mail=

Restart Required: No

Instructions:

1. Log into WordPress admin panel
2. Navigate to Plugins → Installed Plugins
3. Find 'Custom Related Posts' plugin
4. Click 'Update Now' if update is available
5. Alternatively, download version 1.7.4+ from WordPress plugin repository
6. Deactivate and delete old version
7. Upload and activate new version

🔧 Temporary Workarounds

Disable vulnerable AJAX endpoints

all

Remove or restrict access to the vulnerable AJAX actions by modifying WordPress functions.php or using a security plugin

Add to theme's functions.php or custom plugin:
add_action('admin_init', function() {
    remove_action('wp_ajax_crp_search_posts', 'crp_ajax_search_posts');
    remove_action('wp_ajax_crp_link_relation', 'crp_ajax_link_relation');
    remove_action('wp_ajax_crp_unlink_relation', 'crp_ajax_unlink_relation');
});

Restrict user capabilities

all

Temporarily limit Subscriber role capabilities or implement additional access controls

Using a role management plugin like 'User Role Editor' or add to functions.php:
add_action('init', function() {
    $subscriber = get_role('subscriber');
    if ($subscriber) {
        $subscriber->remove_cap('read');
        // Or use custom capability restrictions
    }
});

🧯 If You Can't Patch

  • Deactivate the Custom Related Posts plugin completely until patched
  • Implement strict monitoring of user activities and post relationship changes

🔍 How to Verify

Check if Vulnerable:

Check WordPress admin → Plugins → Installed Plugins for Custom Related Posts version. If version is 1.7.3 or lower, you are vulnerable.

Check Version:

wp plugin list --name='custom-related-posts' --field=version (WP-CLI) or check WordPress admin interface

Verify Fix Applied:

After updating, verify plugin version shows 1.7.4 or higher in WordPress admin panel. Test with Subscriber account that AJAX actions now return permission errors.

📡 Detection & Monitoring

Log Indicators:

  • Multiple AJAX requests to /wp-admin/admin-ajax.php with action parameters: crp_search_posts, crp_link_relation, crp_unlink_relation from low-privilege users
  • Unexpected post relationship changes in database or audit logs

Network Indicators:

  • POST requests to admin-ajax.php with vulnerable action parameters from unauthorized user roles

SIEM Query:

source="wordpress_logs" AND (action="crp_search_posts" OR action="crp_link_relation" OR action="crp_unlink_relation") AND user_role="subscriber"

🔗 References

📤 Share & Export