CVE-2021-44223
📋 TL;DR
This vulnerability allows remote attackers to execute arbitrary code via supply-chain attacks against WordPress installations. Attackers can trick WordPress into updating plugins from malicious repositories when plugin slugs match WordPress.org naming conventions but aren't actually in the official directory. All WordPress sites using plugins are affected if they run versions before 5.8.
💻 Affected Systems
- WordPress
📦 What is this software?
Wordpress by Wordpress
⚠️ Risk & Real-World Impact
Worst Case
Complete server compromise with remote code execution leading to data theft, defacement, or ransomware deployment.
Likely Case
Malicious plugin installation leading to backdoor persistence, credential theft, or site takeover.
If Mitigated
Update failures or warnings when attempting to update from unofficial sources.
🎯 Exploit Status
Exploitation requires convincing users to install plugins from unofficial sources or compromising existing plugin update mechanisms.
🛠️ Fix & Mitigation
✅ Official Fix
Patch Version: WordPress 5.8 and later
Vendor Advisory: https://make.wordpress.org/core/2021/06/29/introducing-update-uri-plugin-header-in-wordpress-5-8/
Restart Required: No
Instructions:
1. Log into WordPress admin panel
2. Navigate to Dashboard > Updates
3. Click 'Update Now' if WordPress 5.8+ is available
4. Alternatively, manually download WordPress 5.8+ from wordpress.org and replace files via FTP/SFTP
🔧 Temporary Workarounds
Add Update URI Header to Custom Plugins
allManually add Update URI headers to custom plugins to prevent WordPress from checking WordPress.org for updates
Add this line to plugin's main PHP file: /*
* Plugin Name: Your Plugin
* Update URI: https://example.com/your-update-server/
*/
Disable Plugin Auto-updates
allPrevent automatic plugin updates that could pull from malicious sources
Add to wp-config.php: define('AUTOMATIC_UPDATER_DISABLED', true);
🧯 If You Can't Patch
- Only install plugins from official WordPress.org repository or trusted sources with verified Update URI headers
- Implement web application firewall rules to block suspicious plugin update requests
🔍 How to Verify
Check if Vulnerable:
Check WordPress version in admin dashboard or examine wp-includes/version.php file for version number
Check Version:
php -r "include('wp-includes/version.php'); echo \$wp_version;"
Verify Fix Applied:
Confirm WordPress version is 5.8 or higher in admin dashboard or via version.php
📡 Detection & Monitoring
Log Indicators:
- Unusual plugin update requests from non-WordPress.org domains
- Failed update attempts with error messages about repository access
Network Indicators:
- Outbound connections to unusual domains during plugin update checks
- HTTP requests to non-standard update servers
SIEM Query:
source="wordpress.log" AND ("update" AND "plugin" AND NOT "wordpress.org")
🔗 References
- https://make.wordpress.org/core/2021/06/29/introducing-update-uri-plugin-header-in-wordpress-5-8/
- https://vavkamil.cz/2021/11/25/wordpress-plugin-confusion-update-can-get-you-pwned/
- https://make.wordpress.org/core/2021/06/29/introducing-update-uri-plugin-header-in-wordpress-5-8/
- https://vavkamil.cz/2021/11/25/wordpress-plugin-confusion-update-can-get-you-pwned/