CVE-2020-36769
📋 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
- WordPress Widget Settings Importer/Exporter Plugin
📦 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.
🎯 Exploit Status
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
linuxBlock 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
allModify 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
- https://www.wordfence.com/blog/2020/04/unpatched-high-severity-vulnerability-in-widget-settings-importer-exporter-plugin/
- https://www.wordfence.com/threat-intel/vulnerabilities/id/e14f0fc6-fca4-4dd7-8f7b-ed5ed535c9af?source=cve
- https://www.wordfence.com/blog/2020/04/unpatched-high-severity-vulnerability-in-widget-settings-importer-exporter-plugin/
- https://www.wordfence.com/threat-intel/vulnerabilities/id/e14f0fc6-fca4-4dd7-8f7b-ed5ed535c9af?source=cve