CVE-2025-1657

8.8 HIGH

📋 TL;DR

The uListing WordPress plugin has a vulnerability that allows authenticated attackers with subscriber-level access or higher to modify post metadata and inject PHP objects through AJAX requests. This can lead to arbitrary code execution or data manipulation on affected WordPress sites. All WordPress installations using uListing plugin versions up to 2.1.7 are vulnerable.

💻 Affected Systems

Products:
  • uListing - Directory Listings WordPress plugin
Versions: All versions up to and including 2.1.7
Operating Systems: All operating systems running WordPress
Default Config Vulnerable: ⚠️ Yes
Notes: Requires WordPress installation with uListing plugin enabled. Any authenticated user (subscriber role or higher) can exploit this vulnerability.

📦 What is this software?

⚠️ Risk & Real-World Impact

🔴

Worst Case

Full site compromise through remote code execution, allowing attackers to install backdoors, steal data, deface websites, or pivot to other systems.

🟠

Likely Case

Unauthorized modification of WordPress content, injection of malicious scripts, or privilege escalation leading to administrative access.

🟢

If Mitigated

Limited impact if proper access controls and monitoring are in place, potentially only affecting non-critical post metadata.

🌐 Internet-Facing: HIGH
🏢 Internal Only: MEDIUM

🎯 Exploit Status

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

Exploitation requires authenticated access but only subscriber-level privileges. PHP object injection requires understanding of WordPress serialization mechanisms.

🛠️ Fix & Mitigation

✅ Official Fix

Patch Version: Version 2.1.8 or later

Vendor Advisory: https://wordpress.org/plugins/ulisting/

Restart Required: No

Instructions:

1. Log into WordPress admin panel. 2. Navigate to Plugins → Installed Plugins. 3. Find 'uListing - Directory Listings' plugin. 4. Click 'Update Now' if update is available. 5. Alternatively, download latest version from WordPress plugin repository and manually update.

🔧 Temporary Workarounds

Disable vulnerable AJAX endpoint

all

Remove or restrict access to the vulnerable stm_listing_ajax AJAX action

Add to theme's functions.php or custom plugin: remove_action('wp_ajax_stm_listing_ajax', 'stm_listing_ajax'); remove_action('wp_ajax_nopriv_stm_listing_ajax', 'stm_listing_ajax');

Capability check workaround

all

Add capability check to prevent unauthorized access

Add to theme's functions.php: add_filter('wp_ajax_stm_listing_ajax', function() { if (!current_user_can('edit_posts')) { wp_die('Unauthorized'); } });

🧯 If You Can't Patch

  • Temporarily disable the uListing plugin if not essential for site functionality
  • Implement strict access controls and monitor for suspicious AJAX requests to stm_listing_ajax endpoint

🔍 How to Verify

Check if Vulnerable:

Check WordPress admin panel → Plugins → Installed Plugins → uListing version. If version is 2.1.7 or lower, system is vulnerable.

Check Version:

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

Verify Fix Applied:

Verify uListing plugin version is 2.1.8 or higher in WordPress admin panel. Test AJAX functionality to ensure it still works with proper authorization.

📡 Detection & Monitoring

Log Indicators:

  • Multiple POST requests to /wp-admin/admin-ajax.php with action=stm_listing_ajax from non-admin users
  • Unusual post_meta modifications in WordPress database logs
  • PHP unserialization errors in error logs

Network Indicators:

  • HTTP POST requests to admin-ajax.php with stm_listing_ajax parameter from unexpected user roles
  • Unusual serialized data in POST payloads

SIEM Query:

source="wordpress.log" AND "admin-ajax.php" AND "stm_listing_ajax" AND (user_role="subscriber" OR user_role="contributor" OR user_role="author")

🔗 References

📤 Share & Export