REPORT / 01

Analysis Report · Folder Analysis cache/wp-ultimate-csv-importer_7.35 → cache/wp-ultimate-csv-importer_7.36 — CVE-2025-14627

Shared security patch analysis results

mode patchdiff ai claude_cli haiku
02 · Lifecycle actions cancel · resume · skip · regenerate
03 · Share this analysis copy link · embed report
03 · CVE Security Analysis & Writeups ai-generated · per cve

Comprehensive security analysis generated by AI for each confirmed CVE match. Click on a CVE to view the detailed writeup including vulnerability background, technical details, patch analysis, and PoC guide.

CVE-2025-14627 NVD
AI-Generated Analysis
05 · Findings filter · search · paginate
Use quotes for exact: "SQL injection" · Operators: hello AND bye, admin OR root, -error, NOT warning
Showing 0 to 0 of 0 results
uploadModules/UrlUpload.php AI: 1 vulnerabilities 1 true positive CVE-2025-14627
--- cache/wp-ultimate-csv-importer_7.35/uploadModules/UrlUpload.php	2026-01-03 00:35:25.666624232 +0000+++ cache/wp-ultimate-csv-importer_7.36/uploadModules/UrlUpload.php	2026-01-03 00:36:09.813355538 +0000@@ -57,6 +57,20 @@ 		check_ajax_referer('smack-ultimate-csv-importer', 'securekey'); 		$file_url = esc_url_raw($_POST['url']); 		$file_url = wp_http_validate_url($file_url);+$host = wp_parse_url($file_url, PHP_URL_HOST);+$ip   = gethostbyname($host);++if (!filter_var(+    $ip,+    FILTER_VALIDATE_IP,+    FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE+)) {+    $response['success'] = false;+    $response['message'] = 'Download Failed. Invalid or restricted URL destination.';+    echo wp_json_encode($response);+    die();+}+ 		$media_type = '';         if (isset($_POST['MediaType'])) {             $media_type = sanitize_key($_POST['MediaType']);@@ -70,9 +84,33 @@ 		$response = []; 		global $wpdb; 		$file_table_name = $wpdb->prefix ."smackcsv_file_events";			-			if(strstr($file_url, 'https://bit.ly/')){-				$file_url = $this->unshorten_bitly_url($file_url);-			}+			if (strstr($file_url, 'https://bit.ly/')) {++    $file_url = $this->unshorten_bitly_url($file_url);++    $file_url = wp_http_validate_url($file_url);+    if (!$file_url) {+        $response['success'] = false;+        $response['message'] = 'Download Failed. Resolved URL is not valid.';+        echo wp_json_encode($response);+        die();+    }++    $host = wp_parse_url($file_url, PHP_URL_HOST);+    $ip   = gethostbyname($host);++    if (!filter_var(+        $ip,+        FILTER_VALIDATE_IP,+        FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE+    )) {+        $response['success'] = false;+        $response['message'] = 'Download Failed. Invalid or restricted URL destination.';+        echo wp_json_encode($response);+        die();+    }+}+  			$pub = substr($file_url, strrpos($file_url, '/') + 1);                /*Added support for google addon & dropbox*/
AI Analysis
Vulnerability Existed: yes
TRUE POSITIVE
[CWE Name] Server-Side Request Forgery (SSRF) - [CWE ID] CWE-918 - [File] uploadModules/UrlUpload.php [Lines 60-72, 87-111]

[Old Code]
```php
check_ajax_referer('smack-ultimate-csv-importer', 'securekey');
$file_url = esc_url_raw($_POST['url']);
$file_url = wp_http_validate_url($file_url);
$media_type = '';
...
if(strstr($file_url, 'https://bit.ly/')){
    $file_url = $this->unshorten_bitly_url($file_url);
}
```

[Fixed Code]
```php
check_ajax_referer('smack-ultimate-csv-importer', 'securekey');
$file_url = esc_url_raw($_POST['url']);
$file_url = wp_http_validate_url($file_url);
$host = wp_parse_url($file_url, PHP_URL_HOST);
$ip   = gethostbyname($host);

if (!filter_var(
    $ip,
    FILTER_VALIDATE_IP,
    FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE
)) {
    $response['success'] = false;
    $response['message'] = 'Download Failed. Invalid or restricted URL destination.';
    echo wp_json_encode($response);
    die();
}
...
if (strstr($file_url, 'https://bit.ly/')) {
    $file_url = $this->unshorten_bitly_url($file_url);
    $file_url = wp_http_validate_url($file_url);
    if (!$file_url) {
        $response['success'] = false;
        $response['message'] = 'Download Failed. Resolved URL is not valid.';
        echo wp_json_encode($response);
        die();
    }
    $host = wp_parse_url($file_url, PHP_URL_HOST);
    $ip   = gethostbyname($host);
    if (!filter_var(
        $ip,
        FILTER_VALIDATE_IP,
        FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE
    )) {
        $response['success'] = false;
        $response['message'] = 'Download Failed. Invalid or restricted URL destination.';
        echo wp_json_encode($response);
        die();
    }
}
```

Explanation:
The original code was vulnerable to SSRF attacks. While `wp_http_validate_url()` performs basic URL validation, it does not restrict access to private IP ranges or reserved addresses. An attacker could craft URLs pointing to internal infrastructure (e.g., `http://127.0.0.1`, `http://192.168.x.x`, `http://10.x.x.x`) or metadata services (e.g., AWS EC2 metadata endpoints at `http://169.254.169.254`). The fix adds IP validation using `filter_var()` with `FILTER_FLAG_NO_PRIV_RANGE` and `FILTER_FLAG_NO_RES_RANGE` flags to block requests to private and reserved IP address ranges. Additionally, after URL shortener resolution (bit.ly), the code now re-validates the resolved URL and re-checks the IP, preventing attackers from using URL shorteners to bypass the initial SSRF protection.
CVE Analysis Results:
CVE-2025-14627: Yes
View CVE Description
The WP Import – Ultimate CSV XML Importer for WordPress plugin for WordPress is vulnerable to Server-Side Request Forgery in all versions up to, and including, 7.35. This is due to inadequate validation of the resolved URL after following Bitly shortlink redirects in the `upload_function()` method. While the initial URL is validated using `wp_http_validate_url()`, when a Bitly shortlink is detected, the `unshorten_bitly_url()` function follows redirects to the final destination URL without re-validating it. This makes it possible for authenticated attackers with Contributor-level access or higher to make the server perform HTTP requests to arbitrary internal endpoints, including localhost, private IP ranges, and cloud metadata services (e.g., 169.254.169.254), potentially exposing sensitive internal data.
Showing 1 to 1 of 1 results