CVE-2020-36769

7.4 HIGH

📋 TL;DR

This vulnerability allows authenticated WordPress users with subscriber-level permissions or higher to inject malicious JavaScript into website pages through the Widget Settings Importer/Exporter plugin. When visitors access pages containing the injected scripts, the code executes in their browsers, potentially stealing credentials, session cookies, or performing unauthorized actions. All WordPress sites using vulnerable versions of this plugin are affected.

💻 Affected Systems

Products:
  • WordPress Widget Settings Importer/Exporter Plugin
Versions: Up to and including version 1.5.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

Attackers could steal administrator credentials, hijack user sessions, deface websites, redirect visitors to malicious sites, or perform actions on behalf of authenticated users, potentially leading to complete site compromise.

🟠

Likely Case

Attackers with subscriber accounts inject malicious scripts to steal user session cookies and credentials, potentially escalating privileges or performing unauthorized actions on the site.

🟢

If Mitigated

With proper input validation and output escaping, malicious scripts would be neutralized, preventing execution even if injection attempts occur.

🌐 Internet-Facing: HIGH
🏢 Internal Only: MEDIUM

🎯 Exploit Status

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

Exploitation requires authenticated access (subscriber role minimum). The vulnerability is well-documented with public proof-of-concept examples available.

🛠️ Fix & Mitigation

✅ Official Fix

Patch Version: Version 1.5.4 or later

Vendor Advisory: https://wordpress.org/plugins/widget-settings-importexport/

Restart Required: No

Instructions:

1. Log into WordPress admin panel. 2. Navigate to Plugins → Installed Plugins. 3. Find 'Widget Settings Importer/Exporter'. 4. Click 'Update Now' if update available. 5. If no update available, deactivate and delete the plugin, then install the latest version from WordPress repository.

🔧 Temporary Workarounds

Disable AJAX endpoint via .htaccess

linux

Block access to the vulnerable AJAX endpoint to prevent exploitation

# Add to .htaccess file
<Files "admin-ajax.php">
    <IfModule mod_authz_core.c>
        Require all denied
    </IfModule>
    <IfModule !mod_authz_core.c>
        Order deny,allow
        Deny from all
    </IfModule>
</Files>

Remove subscriber AJAX capabilities

all

Modify user roles to prevent subscribers from accessing AJAX endpoints

# Add to theme's functions.php or custom plugin
add_filter('wp_ajax_nopriv_', '__return_false');
add_action('init', function() {
    if (current_user_can('subscriber')) {
        remove_action('wp_ajax_import_widget_data', 'import_widget_data_callback');
    }
});

🧯 If You Can't Patch

  • Deactivate and remove the Widget Settings Importer/Exporter plugin immediately
  • Implement a Web Application Firewall (WAF) with XSS protection rules

🔍 How to Verify

Check if Vulnerable:

Check WordPress admin → Plugins → Installed Plugins. If 'Widget Settings Importer/Exporter' version is 1.5.3 or lower, the site is vulnerable.

Check Version:

wp plugin list --name='widget-settings-importexport' --field=version

Verify Fix Applied:

After updating, verify the plugin version shows 1.5.4 or higher in WordPress admin panel.

📡 Detection & Monitoring

Log Indicators:

  • Unusual POST requests to /wp-admin/admin-ajax.php with action=import_widget_data
  • Multiple failed authentication attempts followed by successful subscriber login
  • JavaScript payloads in POST parameters

Network Indicators:

  • Unusual traffic patterns to admin-ajax.php endpoint
  • Outbound connections to suspicious domains after page loads

SIEM Query:

source="wordpress.log" AND ("admin-ajax.php" AND "import_widget_data") AND ("<script>" OR "javascript:" OR "onload=" OR "onerror=")

🔗 References

📤 Share & Export