CVE-2025-12844

7.1 HIGH

📋 TL;DR

The AI Engine WordPress plugin is vulnerable to PHP Object Injection via PHAR deserialization in functions handling audio transcription and vision queries. This allows authenticated attackers with Subscriber-level access or higher to inject PHP objects, but exploitation requires a separate plugin or theme with a POP chain to achieve impact. Sites running AI Engine version 3.1.8 or earlier are affected.

💻 Affected Systems

Products:
  • AI Engine WordPress Plugin
Versions: All versions up to and including 3.1.8
Operating Systems: All operating systems running WordPress
Default Config Vulnerable: ⚠️ Yes
Notes: Requires WordPress installation with AI Engine plugin enabled. Exploitation requires authenticated access (Subscriber role or higher) and presence of a POP chain in another plugin or theme.

⚠️ 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

If combined with a POP chain from another plugin/theme, attackers could delete arbitrary files, retrieve sensitive data, or execute arbitrary code leading to complete site compromise.

🟠

Likely Case

Limited impact since no POP chain exists in the vulnerable software itself; exploitation requires specific additional vulnerable components to be present on the target system.

🟢

If Mitigated

With proper access controls and no vulnerable POP chains present, the vulnerability has minimal impact as object injection alone cannot achieve code execution.

🌐 Internet-Facing: MEDIUM
🏢 Internal Only: LOW

🎯 Exploit Status

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

Exploitation requires authenticated access and depends on finding/creating a suitable POP chain from other installed components.

🛠️ Fix & Mitigation

✅ Official Fix

Patch Version: Version 3.1.9 or later

Vendor Advisory: https://plugins.trac.wordpress.org/changeset/3392052/

Restart Required: No

Instructions:

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

🔧 Temporary Workarounds

Disable vulnerable REST endpoints

all

Remove or restrict access to the 'rest_simpleTranscribeAudio' and 'rest_simpleVisionQuery' functions

Add to theme's functions.php or custom plugin: remove_action('rest_api_init', 'ai_engine_register_rest_routes');

Restrict user roles

all

Limit Subscriber and higher role access to minimize attack surface

Use WordPress role management plugins to restrict capabilities

🧯 If You Can't Patch

  • Disable the AI Engine plugin completely until patched
  • Implement web application firewall rules to block requests to vulnerable REST endpoints

🔍 How to Verify

Check if Vulnerable:

Check WordPress admin → Plugins → Installed Plugins → AI Engine version. If version is 3.1.8 or earlier, you are vulnerable.

Check Version:

wp plugin get ai-engine --field=version (if WP-CLI installed)

Verify Fix Applied:

After updating, verify AI Engine plugin version is 3.1.9 or later in WordPress plugins page.

📡 Detection & Monitoring

Log Indicators:

  • Unusual POST requests to /wp-json/ai-engine/v1/ endpoints
  • Multiple failed authentication attempts followed by successful Subscriber login

Network Indicators:

  • HTTP requests containing serialized PHP data or PHAR wrappers in payloads

SIEM Query:

source="wordpress.log" AND ("rest_simpleTranscribeAudio" OR "rest_simpleVisionQuery") AND status=200

🔗 References

📤 Share & Export