Description
The WP Duplicate plugin for WordPress is vulnerable to Missing Authorization leading to Arbitrary File Upload in all versions up to and including 1.1.8. This is due to a missing capability check on the `process_add_site()` AJAX action combined with path traversal in the file upload functionality. This makes it possible for authenticated (subscriber-level) attackers to set the internal `prod_key_random_id` option, which can then be used by an unauthenticated attacker to bypass authentication checks and write arbitrary files to the server via the `handle_upload_single_big_file()` function, ultimately leading to remote code execution.
EPSS Score:
0%
EUVD-2026-5649: Critical Vulnerability Analysis
WP Duplicate Plugin - Authentication Bypass to Remote Code Execution
1. VULNERABILITY ASSESSMENT AND SEVERITY EVALUATION
Severity Classification
CVSS 3.1 Base Score: 9.8 (CRITICAL)
The vulnerability receives the maximum severity rating across multiple dimensions:
- Attack Vector (AV:N): Network-exploitable, requiring no physical or local access
- Attack Complexity (AC:L): Low complexity, easily reproducible
- Privileges Required (PR:N): No authentication required for final exploitation
- User Interaction (UI:N): No user interaction needed
- Scope (S:U): Unchanged scope
- Impact Triad (C:H/I:H/A:H): Complete compromise of confidentiality, integrity, and availability
Technical Assessment
This is a two-stage vulnerability chain that escalates from an authenticated low-privilege attack to complete unauthenticated remote code execution:
- Stage 1: Missing authorization check (CWE-862) on
process_add_site()AJAX action - Stage 2: Path traversal combined with arbitrary file upload leading to RCE
The vulnerability is particularly severe because:
- Initial exploitation requires only subscriber-level access (lowest authenticated privilege)
- Once the
prod_key_random_idoption is set, unauthenticated attackers can exploit the system - Direct path to remote code execution through arbitrary file upload
- No user interaction required for exploitation
2. POTENTIAL ATTACK VECTORS AND EXPLOITATION METHODS
Attack Chain Analysis
Phase 1: Initial Foothold (Authenticated - Subscriber Level)
Attacker Action: Exploit process_add_site() AJAX endpoint
Target: /wp-admin/admin-ajax.php
Method: POST
Required Privilege: Subscriber (authenticated)
Objective: Set prod_key_random_id option value
Exploitation Steps:
- Attacker creates a subscriber-level account (often possible through public registration)
- Sends crafted AJAX request to
process_add_site()without capability checks - Sets internal
prod_key_random_idoption to attacker-controlled value - This value acts as an authentication bypass token
Phase 2: Unauthenticated Remote Code Execution
Attacker Action: Upload malicious file via handle_upload_single_big_file()
Target: File upload endpoint
Method: POST with prod_key_random_id
Required Privilege: None (unauthenticated)
Objective: Write PHP webshell to server
Exploitation Steps:
- Attacker uses previously set
prod_key_random_idto bypass authentication - Exploits path traversal vulnerability in file upload functionality
- Uploads malicious PHP file (webshell) to web-accessible directory
- Executes arbitrary code by accessing uploaded file via HTTP request
Proof of Concept Attack Flow
1. POST /wp-admin/admin-ajax.php
action=process_add_site
[Set prod_key_random_id to known value]
[Authenticated as subscriber]
2. POST /wp-admin/admin-ajax.php (or similar endpoint)
action=handle_upload_single_big_file
prod_key_random_id=[known value from step 1]
file=../../wp-content/uploads/shell.php
[Unauthenticated request]
3. GET /wp-content/uploads/shell.php?cmd=whoami
[Remote code execution achieved]
Attack Vectors
- Direct exploitation: Attackers with subscriber accounts
- Credential stuffing: Using compromised credentials from data breaches
- Social engineering: Tricking site administrators into creating accounts
- Automated scanning: Mass exploitation via vulnerability scanners
- Supply chain attacks: Compromising sites to pivot to connected systems
3. AFFECTED SYSTEMS AND SOFTWARE VERSIONS
Affected Product
- Plugin Name: WP Duplicate (also referenced as "Local Sync" in code repositories)
- Vendor: Revmakx
- Affected Versions: All versions up to and including 1.1.8
- Platform: WordPress CMS
Vulnerable Code Locations
Based on the provided references:
-
Authorization Bypass:
admin/class-local-sync-admin.php(Line 422)- Function:
process_add_site()
-
File Upload Handler:
includes/class-local-sync-handle-server-requests.php(Line 389)- Function: Authentication check bypass
-
Path Traversal:
admin/class-local-sync-files-op.php(Line 843)- Function:
handle_upload_single_big_file()
Deployment Scope
- WordPress installations with WP Duplicate plugin versions ≤ 1.1.8
- Estimated exposure: Potentially thousands of WordPress sites
- Geographic distribution: Global, with significant European presence
System Requirements for Exploitation
- Target must have WP Duplicate plugin installed and activated
- WordPress site must allow user registration (for initial foothold) OR attacker has existing subscriber-level credentials
- Web server must have write permissions to exploitable directories
4. RECOMMENDED MITIGATION STRATEGIES
Immediate Actions (Priority 1 - Within 24 Hours)
For Site Administrators:
-
Disable or Remove Plugin
# Via WP-CLI wp plugin deactivate local-sync wp plugin delete local-sync- Immediately deactivate WP Duplicate plugin
- Remove plugin entirely if not critical to operations
-
Emergency Patching
- Update to version 1.1.9 or later (if available)
- Monitor vendor security advisories for patch release
-
Access Control Hardening
// Temporary .htaccess rule to block AJAX actions <Files "admin-ajax.php"> Order Allow,Deny Deny from all Allow from [trusted IP ranges] </Files> -
Audit User Accounts
- Review all subscriber-level accounts created in past 90 days
- Disable user registration if not required
- Implement CAPTCHA on registration forms
For Security Teams:
-
Incident Response Procedures
- Search web server logs for suspicious AJAX requests:
grep "process_add_site" /var/log/apache2/access.log grep "handle_upload_single_big_file" /var/log/apache2/access.log -
File Integrity Monitoring
- Scan for unauthorized PHP files:
find /var/www/html/wp-content/uploads -name "*.php" -type f -mtime -30 -
Database Inspection
SELECT * FROM wp_options WHERE option_name = 'prod_key_random_id';- Check if
prod_key_random_idhas been set - Remove suspicious option values
- Check if
Short-Term Mitigations (Priority 2 - Within 1 Week)
-
Web Application Firewall (WAF) Rules
# ModSecurity rule example SecRule ARGS:action "@streq process_add_site" \ "id:1000001,phase:2,deny,status:403,\ msg:'WP Duplicate vulnerability block'" SecRule ARGS:action "@streq handle_upload_single_big_file" \ "id:1000002,phase:2,deny,status:403,\ msg:'WP Duplicate file upload block'" -
Network Segmentation
- Isolate WordPress installations from critical infrastructure
- Implement egress filtering to prevent reverse shells
-
Enhanced Monitoring
- Deploy SIEM rules for detecting exploitation attempts
- Monitor for unusual file uploads and modifications
- Alert on new PHP files in upload directories
Long-Term Security Measures (Priority 3 - Ongoing)
-
Security Hardening