CVE-2024-3591

6.5 MEDIUM

📋 TL;DR

This vulnerability in the Geo Controller WordPress plugin allows unauthenticated attackers to perform PHP Object Injection by sending specially crafted requests to AJAX actions and REST API routes. This could lead to remote code execution if a suitable gadget chain exists in the WordPress installation. All WordPress sites using vulnerable versions of the Geo Controller plugin are affected.

💻 Affected Systems

Products:
  • Geo Controller WordPress Plugin
Versions: All versions before 8.6.5
Operating Systems: All
Default Config Vulnerable: ⚠️ Yes
Notes: Requires WordPress installation with Geo Controller plugin enabled. Vulnerability exists in default configuration.

📦 What is this software?

⚠️ Risk & Real-World Impact

🔴

Worst Case

Remote code execution leading to complete site compromise, data theft, malware installation, or site defacement.

🟠

Likely Case

Arbitrary file read/write, privilege escalation, or denial of service depending on available gadget chains.

🟢

If Mitigated

Limited impact if no suitable gadget chains exist, but still presents a security risk.

🌐 Internet-Facing: HIGH
🏢 Internal Only: MEDIUM

🎯 Exploit Status

Public PoC: ⚠️ Yes
Weaponized: LIKELY
Unauthenticated Exploit: ⚠️ Yes
Complexity: MEDIUM

Exploitation requires a suitable gadget chain in the WordPress installation. Proof of concept code is publicly available.

🛠️ Fix & Mitigation

✅ Official Fix

Patch Version: 8.6.5

Vendor Advisory: https://wpscan.com/vulnerability/f85d8b61-eaeb-433c-b857-06ee4db5c7d5/

Restart Required: No

Instructions:

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

🔧 Temporary Workarounds

Disable vulnerable endpoints

linux

Restrict access to AJAX and REST API endpoints used by Geo Controller plugin

Add to .htaccess: RewriteRule ^wp-admin/admin-ajax\.php.* - [F]
Add to .htaccess: RewriteRule ^wp-json/geo-controller.* - [F]

Disable plugin

all

Temporarily disable Geo Controller plugin until patched

wp plugin deactivate geo-controller

🧯 If You Can't Patch

  • Implement web application firewall (WAF) rules to block serialized object payloads
  • Restrict network access to WordPress admin and API endpoints

🔍 How to Verify

Check if Vulnerable:

Check WordPress admin panel → Plugins → Geo Controller version. If version is below 8.6.5, you are vulnerable.

Check Version:

wp plugin list --name=geo-controller --field=version

Verify Fix Applied:

Confirm Geo Controller plugin version is 8.6.5 or higher in WordPress admin panel.

📡 Detection & Monitoring

Log Indicators:

  • Unusual POST requests to /wp-admin/admin-ajax.php with serialized data
  • Requests to /wp-json/geo-controller/* endpoints with PHP serialized objects
  • Increased error logs mentioning unserialize() or Geo Controller

Network Indicators:

  • HTTP POST requests containing serialized PHP objects (O: or a: patterns)
  • Requests to Geo Controller REST API endpoints from unexpected sources

SIEM Query:

source="web_logs" AND (uri_path="/wp-admin/admin-ajax.php" OR uri_path CONTAINS "/wp-json/geo-controller/") AND http_method="POST" AND (request_body CONTAINS "O:" OR request_body CONTAINS "a:")

🔗 References

📤 Share & Export